diff --git a/.eslintrc b/.eslintrc index f3994e5b3..44b19cda2 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,6 +1,7 @@ { "extends": [ - "lisk-base" + "lisk-base", + "prettier" ], "plugins": [ "import", @@ -8,9 +9,9 @@ ], "globals": { "ipc": true, + "BigInt": true, "PRODUCTION": true, - "TEST": true, - "BigInt": true + "TEST": true }, "env": { "node": true, @@ -42,6 +43,7 @@ ] } ], + "no-await-in-loop": "off", "no-loop-func": "off", "no-plusplus": "off", "no-restricted-properties": "off", @@ -70,9 +72,6 @@ } ], "mocha/no-skipped-tests": "off", - "indent": [ - "error", - "tab" - ] + "indent": "off" } } diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index dd3ad113f..4f67a641e 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,5 +1,4 @@ --- - name: Bug report about: Create a report to help us improve title: '' @@ -7,21 +6,12 @@ labels: 'type: bug' assignees: '' projects: 'Lisk Service Version 0.7.0' status: 'Backlog' - --- ### Actual behavior - - ### Expected behavior - - ### Steps to reproduce - - ### Which version(s) does this affect? (Environment, OS, etc...) - - diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index a481c7fc5..df495b212 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -4,7 +4,6 @@ about: Propose an idea for new improvements/features title: '' labels: 'type: enhancement, type: feature proposal' assignees: '' - --- ### Description diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 1ad9c8b80..69cdbaeb6 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,8 +1,11 @@ ### What was the problem? + This PR resolves #INSERT_ISSUE_NUMBER ### How was it solved? + ### How was it tested? + diff --git a/.github/semgrep/rule.yaml b/.github/semgrep/rule.yaml index 9cf827557..bdc656132 100644 --- a/.github/semgrep/rule.yaml +++ b/.github/semgrep/rule.yaml @@ -1,7 +1,7 @@ rules: - id: schema_hardcoded_pattern message: A fastest-validator schema uses a hardcoded pattern instead of a constant - languages: + languages: - javascript severity: WARNING patterns: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 2d7833ce3..529ddb733 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -9,14 +9,14 @@ # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # -name: "CodeQL" +name: 'CodeQL' on: push: - branches: [ "development", feature/*, hotfix/*, main, release/* ] + branches: ['development', feature/*, hotfix/*, main, release/*] pull_request: # The branches below must be a subset of the branches above - branches: [ feature/*, hotfix/*, release/* ] + branches: ['development', feature/*, hotfix/*, release/*] schedule: - cron: '30 3 * * 2' @@ -32,28 +32,28 @@ jobs: strategy: fail-fast: true matrix: - language: [ 'javascript' ] + language: ['javascript'] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout repository + uses: actions/checkout@v3 - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - config-file: ./.github/codeql/codeql-config.yml - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + config-file: ./.github/codeql/codeql-config.yml + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 - with: - category: "/language:${{matrix.language}}" + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: '/language:${{matrix.language}}' diff --git a/.github/workflows/dependency.yaml b/.github/workflows/dependency.yaml index fe461b424..69f2a1a81 100644 --- a/.github/workflows/dependency.yaml +++ b/.github/workflows/dependency.yaml @@ -16,5 +16,3 @@ jobs: steps: - name: 'Checkout Repository' uses: actions/checkout@v3 - - name: 'Dependency Review' - uses: actions/dependency-review-action@v2 diff --git a/.github/workflows/pr-coverage.yml b/.github/workflows/pr-coverage.yml index a12c201b8..ab3358ffe 100644 --- a/.github/workflows/pr-coverage.yml +++ b/.github/workflows/pr-coverage.yml @@ -12,7 +12,7 @@ jobs: - name: Set up node uses: actions/setup-node@v3 with: - node-version-file: ".nvmrc" + node-version-file: '.nvmrc' - name: Install dependencies run: make build-local - name: Check test coverage diff --git a/.github/workflows/semgrep.yml b/.github/workflows/semgrep.yml index 87d59c6a3..5e82690e3 100644 --- a/.github/workflows/semgrep.yml +++ b/.github/workflows/semgrep.yml @@ -3,10 +3,10 @@ name: Semgrep on: push: - branches: [ "development", feature/*, hotfix/*, main, release/* ] + branches: ['development', feature/*, hotfix/*, main, release/*] pull_request: # The branches below must be a subset of the branches above - branches: [ "development", feature/*, hotfix/*, release/* ] + branches: ['development', feature/*, hotfix/*, release/*] # Schedule the CI job (this method uses cron syntax): schedule: - cron: '30 3 * * 2' @@ -15,8 +15,8 @@ on: jobs: semgrep: # User definable name of this GitHub Actions job. - name: semgrep/ci - # If you are self-hosting, change the following `runs-on` value: + name: semgrep/ci + # If you are self-hosting, change the following `runs-on` value: runs-on: ubuntu-latest container: @@ -36,7 +36,7 @@ jobs: # Generate a token from Semgrep Cloud Platform > Settings # and add it to your GitHub secrets. # SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }} - SEMGREP_RULES: "p/javascript p/r2c p/r2c-security-audit p/r2c-best-practices p/nodejs p/nodejsscan ./.github/semgrep/rule.yaml" + SEMGREP_RULES: 'p/javascript p/r2c p/r2c-security-audit p/r2c-best-practices p/nodejs p/nodejsscan ./.github/semgrep/rule.yaml' - name: Upload SARIF file for GitHub Advanced Security Dashboard uses: github/codeql-action/upload-sarif@v2 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..65bdb8c9d --- /dev/null +++ b/.prettierignore @@ -0,0 +1,61 @@ +# Files +Jenkinsfile* +Makefile +Dockerfile +LICENSE +.DS_Store +data/ +.idea +logs/ +jenkins/*.deployment + +docs/ + +.gitkeep +mocha.opts + +# rc files +.*rc +## ignore files +.*ignore + +# Ignore extensions +*.png +*.sql +*.blob +*.ejs +*.sh +*.conf +*.env +*.info +*.log +*.tgz +*.lock +*.sqlite3 + +## jest snapshot +*.snap +*.tsbuildinfo + +# project specific paths +test/.coverage-unit/ +helm +coverage/ +build/ +dist/ +docker/.env* +qa/ +bin +tmp/ + +*.pid +*.gz + +*.SHA256 +*.mock +*.txt +.editorconfig + +*.mainnet + +docker/* diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 000000000..7b23ef550 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/Makefile b/Makefile index b90398818..b950497b1 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ test-functional: $(compose) exec -T tests yarn run test:functional test-integration: - $(compose) exec -T tests yarn run test:integration:APIv3:SDKv6 + $(compose) exec -T tests yarn run test:integration:APIv3 cli: cli-gateway @@ -70,7 +70,9 @@ logs-live-%: print-config: $(compose) config -build: build-app-registry build-connector build-indexer build-coordinator build-statistics build-fees build-market build-export build-gateway +build: build-local build-images + +build-images: build-app-registry build-connector build-indexer build-coordinator build-statistics build-fees build-market build-export build-gateway build-all: build build-template build-tests @@ -121,6 +123,7 @@ build-local: cd ./services/export && yarn install --frozen-lockfile cd ./services/template && yarn install --frozen-lockfile cd ./tests && yarn install --frozen-lockfile + clean: clean-local clean-images clean-local: diff --git a/README.md b/README.md index 5ba98ed7f..94e822843 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Every microservice is independently managed and placed in a separate directory u - The default installation method is based on Docker. - Some token conversion rates in the Market service require their API keys. - For the events information to be always available in the API, please set `system.keepEventsForHeights: -1` in the Lisk application node config. -- It is highly recommended to *NOT* enable any plugins on the Lisk application node when running Lisk Service against it. Enabling them can cause performance issues in Lisk Service. +- It is highly recommended to _NOT_ enable any plugins on the Lisk application node when running Lisk Service against it. Enabling them can cause performance issues in Lisk Service. ## Architecture Diagram @@ -95,7 +95,7 @@ cd lisk-service If you wish to build the local version of Lisk Service execute the following command below: ```bash -make build +make build-images ``` > This step is only necessary if you wish to build a custom or pre-release version of Lisk Service that does not have a pre-built Docker image published on the Docker Hub. The installation script chooses the last available stable version on Docker Hub, **unless** there is no local image. If you are unsure about any local builds, use the `make clean` command to remove all locally built docker images. @@ -106,8 +106,8 @@ The following system requirements are recommended to start Lisk Service: #### Memory -- Machines with a minimum of 8 GB RAM for the Mainnet. -- Machines with a minimum of 8 GB RAM for the Testnet. +- Machines with a minimum of 16 GB RAM for the Mainnet. +- Machines with a minimum of 16 GB RAM for the Testnet. #### Storage diff --git a/docker-compose.yml b/docker-compose.yml index dfc939ea9..9df2e1504 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,5 @@ version: '3.3' services: - nats: image: nats:2.6-alpine volumes: @@ -13,7 +12,7 @@ services: test: echo $$(wget --server-response http://nats:8222/varz 2>&1 | grep '200 OK') | grep '200' || exit 1 redis_persistent: - image: redis:5-alpine + image: redis:7-alpine volumes: - ./docker/redis.persistent.conf:/etc/redis/redis.conf:ro - redis-data:/data @@ -25,7 +24,7 @@ services: test: redis-cli ping redis_volatile: - image: redis:5-alpine + image: redis:7-alpine volumes: - ./docker/redis.volatile.conf:/etc/redis/redis.conf:ro networks: @@ -38,7 +37,7 @@ services: mysql-primary: image: mysql:8 platform: linux/amd64 - command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max_connections=500 + command: mysqld --max_connections=500 volumes: - ./docker/mysql/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - mysql-primary-data:/var/lib/mysql @@ -53,7 +52,7 @@ services: - MYSQL_PASSWORD=password - MYSQL_DATABASE=lisk healthcheck: - test: [ 'CMD', 'bash', '/healthcheck.sh' ] + test: ['CMD', 'bash', '/healthcheck.sh'] mysql-read-replica: image: mysql:8 @@ -61,13 +60,13 @@ services: mysql-primary: condition: service_healthy platform: linux/amd64 - command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max_connections=500 + command: mysqld --max_connections=500 volumes: - ./docker/mysql/read/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - ./docker/mysql/read/init:/docker-entrypoint-initdb.d restart: always expose: - - "3306" + - '3306' networks: - services_network deploy: @@ -77,20 +76,13 @@ services: environment: - MYSQL_ROOT_PASSWORD=password healthcheck: - test: - [ - "CMD", - "mysqladmin", - "ping", - "-hlocalhost", - "-ppassword" - ] + test: ['CMD', 'mysqladmin', 'ping', '-hlocalhost', '-ppassword'] mysql-read-replica-haproxy: image: nginx:latest restart: always expose: - - "3307" + - '3307' depends_on: mysql-read-replica: condition: service_healthy @@ -99,7 +91,7 @@ services: networks: - services_network healthcheck: - test: [ "CMD", "service", "nginx", "status" ] + test: ['CMD', 'service', 'nginx', 'status'] blockchain-app-registry: image: lisk/service_blockchain_app_registry @@ -159,13 +151,20 @@ services: - ENABLE_TESTING_MODE=${ENABLE_TESTING_MODE} - ENABLE_BLOCK_CACHING=${ENABLE_BLOCK_CACHING} - EXPIRY_IN_HOURS=${EXPIRY_IN_HOURS} + - CLIENT_INSTANTIATION_MAX_WAIT_TIME=${CLIENT_INSTANTIATION_MAX_WAIT_TIME} + - CLIENT_INSTANTIATION_RETRY_INTERVAL=${CLIENT_INSTANTIATION_RETRY_INTERVAL} + - CLIENT_ALIVE_ASSUMPTION_TIME=${CLIENT_ALIVE_ASSUMPTION_TIME} + - HEARTBEAT_ACK_MAX_WAIT_TIME=${HEARTBEAT_ACK_MAX_WAIT_TIME} + - ENDPOINT_INVOKE_MAX_RETRIES=${ENDPOINT_INVOKE_MAX_RETRIES} + - ENDPOINT_INVOKE_RETRY_DELAY=${ENDPOINT_INVOKE_RETRY_DELAY} + - CONNECTOR_EXIT_DELAY_IN_HOURS=${CONNECTOR_EXIT_DELAY_IN_HOURS} - JOB_INTERVAL_CACHE_CLEANUP=${JOB_INTERVAL_CACHE_CLEANUP} - JOB_SCHEDULE_CACHE_CLEANUP=${JOB_SCHEDULE_CACHE_CLEANUP} - JOB_INTERVAL_REFRESH_PEERS=${JOB_INTERVAL_REFRESH_PEERS} - JOB_SCHEDULE_REFRESH_PEERS=${JOB_SCHEDULE_REFRESH_PEERS} restart: always extra_hosts: - - "host.docker.internal:host-gateway" + - 'host.docker.internal:host-gateway' blockchain-indexer: image: lisk/service_blockchain_indexer @@ -187,9 +186,9 @@ services: replicas: 1 environment: - SERVICE_BROKER=nats://nats:4222 - - SERVICE_INDEXER_CACHE_REDIS=redis://redis_persistent:6379/0 - - SERVICE_INDEXER_REDIS_VOLATILE=redis://redis_volatile:6379/0 - - SERVICE_MESSAGE_QUEUE_REDIS=redis://redis_persistent:6379/8 + - SERVICE_INDEXER_CACHE_REDIS=redis://lisk:password@redis_persistent:6379/0 + - SERVICE_INDEXER_REDIS_VOLATILE=redis://lisk:password@redis_volatile:6379/0 + - SERVICE_MESSAGE_QUEUE_REDIS=redis://lisk:password@redis_persistent:6379/8 - SERVICE_INDEXER_MYSQL=mysql://lisk:password@mysql-primary:3306/lisk - SERVICE_INDEXER_MYSQL_READ_REPLICA=mysql://reader:password@mysql-read-replica-haproxy:3307/lisk - ENABLE_DATA_RETRIEVAL_MODE=${ENABLE_DATA_RETRIEVAL_MODE} @@ -202,12 +201,15 @@ services: - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} - ENABLE_APPLY_SNAPSHOT=${ENABLE_APPLY_SNAPSHOT} + - DURABILITY_VERIFY_FREQUENCY=${DURABILITY_VERIFY_FREQUENCY} - INDEX_SNAPSHOT_URL=${INDEX_SNAPSHOT_URL} - ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP=${ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP} - DOCKER_HOST=${DOCKER_HOST} - MAINCHAIN_SERVICE_URL=${MAINCHAIN_SERVICE_URL} - LISK_STATIC=${LISK_STATIC} - DEVNET_MAINCHAIN_URL=${DEVNET_MAINCHAIN_URL} + - ACCOUNT_BALANCE_UPDATE_BATCH_SIZE=${ACCOUNT_BALANCE_UPDATE_BATCH_SIZE} + - INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT=${INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT} - JOB_INTERVAL_DELETE_SERIALIZED_EVENTS=${JOB_INTERVAL_DELETE_SERIALIZED_EVENTS} - JOB_SCHEDULE_DELETE_SERIALIZED_EVENTS=${JOB_SCHEDULE_DELETE_SERIALIZED_EVENTS} - JOB_INTERVAL_REFRESH_VALIDATORS=${JOB_INTERVAL_REFRESH_VALIDATORS} @@ -243,7 +245,7 @@ services: replicas: 1 environment: - SERVICE_BROKER=nats://nats:4222 - - SERVICE_MESSAGE_QUEUE_REDIS=redis://redis_persistent:6379/8 + - SERVICE_MESSAGE_QUEUE_REDIS=redis://lisk:password@redis_persistent:6379/8 - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} @@ -251,6 +253,8 @@ services: - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} - DOCKER_HOST=${DOCKER_HOST} + - INDEX_MISSING_BLOCKS_SKIP_THRESHOLD=${INDEX_MISSING_BLOCKS_SKIP_THRESHOLD} + - INDEX_MISSING_BLOCKS_MAX_SCHEDULE=${INDEX_MISSING_BLOCKS_MAX_SCHEDULE} - JOB_INTERVAL_INDEX_MISSING_BLOCKS=${JOB_INTERVAL_INDEX_MISSING_BLOCKS} - JOB_SCHEDULE_INDEX_MISSING_BLOCKS=${JOB_SCHEDULE_INDEX_MISSING_BLOCKS} restart: always @@ -273,7 +277,7 @@ services: replicas: 1 environment: - SERVICE_BROKER=nats://nats:4222 - - SERVICE_STATISTICS_REDIS=redis://redis_persistent:6379/5 + - SERVICE_STATISTICS_REDIS=redis://lisk:password@redis_persistent:6379/5 - SERVICE_STATISTICS_MYSQL=mysql://lisk:password@mysql-primary:3306/lisk - SERVICE_STATISTICS_MYSQL_READ_REPLICA=mysql://reader:password@mysql-read-replica-haproxy:3307/lisk - TRANSACTION_STATS_HISTORY_LENGTH_DAYS=${TRANSACTION_STATS_HISTORY_LENGTH_DAYS} @@ -304,7 +308,7 @@ services: replicas: 1 environment: - SERVICE_BROKER=nats://nats:4222 - - SERVICE_FEE_ESTIMATOR_CACHE=redis://redis_persistent:6379/6 + - SERVICE_FEE_ESTIMATOR_CACHE=redis://lisk:password@redis_persistent:6379/6 - ENABLE_FEE_ESTIMATOR_QUICK=${ENABLE_FEE_ESTIMATOR_QUICK} - ENABLE_FEE_ESTIMATOR_FULL=${ENABLE_FEE_ESTIMATOR_FULL} - FEE_EST_COLD_START_BATCH_SIZE=${FEE_EST_COLD_START_BATCH_SIZE} @@ -342,7 +346,7 @@ services: - SERVICE_BROKER=nats://nats:4222 - PORT=${PORT} - HOST=${HOST} - - SERVICE_GATEWAY_REDIS_VOLATILE=redis://redis_volatile:6379/1 + - SERVICE_GATEWAY_REDIS_VOLATILE=redis://lisk:password@redis_volatile:6379/1 - ENABLE_HTTP_API=${ENABLE_HTTP_API} - ENABLE_WS_API=${ENABLE_WS_API} - HTTP_CACHE_CONTROL_DIRECTIVES=${HTTP_CACHE_CONTROL_DIRECTIVES} @@ -391,7 +395,7 @@ services: replicas: 1 environment: - SERVICE_BROKER=nats://nats:4222 - - SERVICE_MARKET_REDIS=redis://redis_persistent:6379/2 + - SERVICE_MARKET_REDIS=redis://lisk:password@redis_persistent:6379/2 - EXCHANGERATESAPI_IO_API_KEY=${EXCHANGERATESAPI_IO_API_KEY} - SERVICE_MARKET_FIAT_CURRENCIES=${SERVICE_MARKET_FIAT_CURRENCIES} - SERVICE_MARKET_TARGET_PAIRS=${SERVICE_MARKET_TARGET_PAIRS} @@ -430,8 +434,8 @@ services: replicas: 1 environment: - SERVICE_BROKER=nats://nats:4222 - - SERVICE_EXPORT_REDIS=redis://redis_persistent:6379/3 - - SERVICE_EXPORT_REDIS_VOLATILE=redis://redis_volatile:6379/3 + - SERVICE_EXPORT_REDIS=redis://lisk:password@redis_persistent:6379/3 + - SERVICE_EXPORT_REDIS_VOLATILE=redis://lisk:password@redis_volatile:6379/3 - SERVICE_EXPORT_PARTIALS=/home/lisk/lisk-service/export/data/partials - EXPORT_S3_BUCKET_NAME_PARTIALS=${EXPORT_S3_BUCKET_NAME_PARTIALS} - SERVICE_EXPORT_STATIC=/home/lisk/lisk-service/export/data/static diff --git a/docker/example.env b/docker/example.env index def188720..9bb3acc86 100644 --- a/docker/example.env +++ b/docker/example.env @@ -28,6 +28,13 @@ ## Lisk Service Blockchain Connector # GENESIS_BLOCK_URL='https://downloads.lisk.com/lisk/mainnet/genesis_block.json.tar.gz' +# CLIENT_INSTANTIATION_MAX_WAIT_TIME=5000 +# CLIENT_INSTANTIATION_RETRY_INTERVAL=1 +# CLIENT_ALIVE_ASSUMPTION_TIME=5000 +# HEARTBEAT_ACK_MAX_WAIT_TIME=1000 +# ENDPOINT_INVOKE_MAX_RETRIES=3 +# ENDPOINT_INVOKE_RETRY_DELAY=10 +# CONNECTOR_EXIT_DELAY_IN_HOURS=0 # Moleculer jobs configuration # JOB_INTERVAL_CACHE_CLEANUP=0 @@ -44,19 +51,23 @@ LISK_APP_WS=ws://host.docker.internal:7887 # Lisk Service geolocation backend (empty = disabled) -GEOIP_JSON='https://geoip.lisk.com/json' +# GEOIP_JSON='https://geoip.lisk.com/json' ## Lisk Service Blockchain Indexer -ENABLE_DATA_RETRIEVAL_MODE=true -ENABLE_INDEXING_MODE=true -ENABLE_PERSIST_EVENTS=false +# ENABLE_DATA_RETRIEVAL_MODE=true +# ENABLE_INDEXING_MODE=true +# ENABLE_PERSIST_EVENTS=false # MAINCHAIN_SERVICE_URL='https://service.lisk.com' # LISK_STATIC='https://static-data.lisk.com' # DEVNET_MAINCHAIN_URL='http://devnet-service.liskdev.net:9901' # ESTIMATES_BUFFER_BYTES_LENGTH=0 # ENABLE_APPLY_SNAPSHOT=false +# DURABILITY_VERIFY_FREQUENCY=1 # INDEX_SNAPSHOT_URL= '' # ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP=false +# ACCOUNT_BALANCE_UPDATE_BATCH_SIZE=1000 +# INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT=100000 +# INVOKE_ALLOWED_METHODS='dynamicReward_getExpectedValidatorRewards,token_hasUserAccount,token_getInitializationFees,interoperability_getMinimumMessageFee,txpool_getTransactionsFromPool' # Moleculer jobs configuration # JOB_INTERVAL_DELETE_SERIALIZED_EVENTS=0 @@ -76,13 +87,15 @@ ENABLE_PERSIST_EVENTS=false # JOB_INTERVAL_TRIGGER_ACCOUNT_UPDATES=0 # JOB_SCHEDULE_TRIGGER_ACCOUNT_UPDATES='*/15 * * * *' -## Lisk Service Blockchain Connector +## Lisk Service Blockchain Coordinator +# INDEX_MISSING_BLOCKS_SKIP_THRESHOLD=1000 +# INDEX_MISSING_BLOCKS_MAX_SCHEDULE=25000 # JOB_INTERVAL_INDEX_MISSING_BLOCKS=0 -# JOB_SCHEDULE_INDEX_MISSING_BLOCKS='*/15 * * * *' +# JOB_SCHEDULE_INDEX_MISSING_BLOCKS='*/5 * * * *' ## Lisk Service Fee Estimator -ENABLE_FEE_ESTIMATOR_QUICK=true -ENABLE_FEE_ESTIMATOR_FULL=false +# ENABLE_FEE_ESTIMATOR_QUICK=true +# ENABLE_FEE_ESTIMATOR_FULL=false # FEE_EST_DEFAULT_START_BLOCK_HEIGHT=1 # FEE_EST_COLD_START_BATCH_SIZE=1 # FEE_EST_EMA_BATCH_SIZE=20 @@ -90,10 +103,10 @@ ENABLE_FEE_ESTIMATOR_FULL=false # FEE_EST_WAVG_DECAY_PERCENTAGE=10 # Log debug messages -#DEBUG=*dynamicFees* +# DEBUG=*dynamicFees* ## Lisk Service Transaction Statistics -TRANSACTION_STATS_HISTORY_LENGTH_DAYS=366 +# TRANSACTION_STATS_HISTORY_LENGTH_DAYS=366 # Moleculer jobs configuration # JOB_INTERVAL_REFRESH_TRANSACTION_STATS=0 @@ -112,12 +125,12 @@ TRANSACTION_STATS_HISTORY_LENGTH_DAYS=366 # JOB_SCHEDULE_UPDATE_READINESS_STATUS='* * * * *' # Enabled Gateway APIs -ENABLE_HTTP_API=http-status,http-version3,http-exports -ENABLE_WS_API=blockchain,rpc-v3 +# ENABLE_HTTP_API=http-status,http-version3,http-exports +# ENABLE_WS_API=blockchain,rpc-v3 # HTTP API caching config -ENABLE_HTTP_CACHE_CONTROL=false -HTTP_CACHE_CONTROL_DIRECTIVES=public,max-age=10 +# ENABLE_HTTP_CACHE_CONTROL=false +# HTTP_CACHE_CONTROL_DIRECTIVES=public,max-age=10 # Websocket caching config # ENABLE_REQUEST_CACHING=true @@ -128,22 +141,22 @@ HTTP_CACHE_CONTROL_DIRECTIVES=public,max-age=10 # HTTP_HEADERS_TIMEOUT=66000 # Websocket rate limit config -ENABLE_WS_RATELIMIT=false -WS_RATELIMIT_POINTS=5 -WS_RATELIMIT_DURATION=1 # in seconds +# WS_RATE_LIMIT_ENABLE=false +# WS_RATE_LIMIT_CONNECTIONS=5 +# WS_RATE_LIMIT_DURATION=1 # in seconds # HTTP rate limit config -HTTP_RATE_LIMIT_ENABLE=false -HTTP_RATE_LIMIT_CONNECTIONS=200 -HTTP_RATE_LIMIT_WINDOW=10 # in seconds -HTTP_RATE_LIMIT_ENABLE_X_FORWARDED_FOR=false, -HTTP_RATE_LIMIT_NUM_KNOWN_PROXIES=0, +# HTTP_RATE_LIMIT_ENABLE=false +# HTTP_RATE_LIMIT_CONNECTIONS=200 +# HTTP_RATE_LIMIT_WINDOW=10 # in seconds +# HTTP_RATE_LIMIT_ENABLE_X_FORWARDED_FOR=false, +# HTTP_RATE_LIMIT_NUM_KNOWN_PROXIES=0, ## Lisk Service Market # Currency pairs -SERVICE_MARKET_FIAT_CURRENCIES=EUR,USD,CHF,GBP,RUB,PLN,JPY,AUD,GBP,INR -SERVICE_MARKET_TARGET_PAIRS=LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,LSK_PLN,LSK_JPY,LSK_AUD,LSK_GBP,LSK_INR,BTC_EUR,BTC_USD,BTC_CHF +# SERVICE_MARKET_FIAT_CURRENCIES=EUR,USD,CHF,GBP,RUB,PLN,JPY,AUD,GBP,INR +# SERVICE_MARKET_TARGET_PAIRS=LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,LSK_PLN,LSK_JPY,LSK_AUD,LSK_GBP,LSK_INR,BTC_EUR,BTC_USD,BTC_CHF # Moleculer jobs configuration # JOB_INTERVAL_REFRESH_PRICES_BINANCE=0 @@ -158,7 +171,7 @@ SERVICE_MARKET_TARGET_PAIRS=LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,LSK_PLN,LSK_JPY,LSK_ # JOB_SCHEDULE_UPDATE_PRICES='' # Exchange Rates API authentication (empty = disabled) -EXCHANGERATESAPI_IO_API_KEY= +# EXCHANGERATESAPI_IO_API_KEY= ## Lisk Service Export # SERVICE_EXPORT_PARTIALS='./data/partials' diff --git a/docker/mariaDB/primary/conf/mysql.cnf b/docker/mariaDB/primary/conf/mysql.cnf new file mode 100644 index 000000000..afdb54d4d --- /dev/null +++ b/docker/mariaDB/primary/conf/mysql.cnf @@ -0,0 +1,19 @@ +[mysqld] + +# Default authentication plugin +default-authentication-plugin=caching_sha2_password + +# Default character charset +character-set-server=utf8mb4 + +# Default collation server +collation-server=utf8mb4_unicode_ci + +# Unique identifying number of the server. +server-id = 1 + +# Set binary log file base name. +log_bin=mysql-bin.log + +# Log row changes for replication. Other possible way is to log statements. +binlog_format = ROW diff --git a/docker/mariaDB/read/conf/mysql.cnf b/docker/mariaDB/read/conf/mysql.cnf new file mode 100644 index 000000000..f83dcab89 --- /dev/null +++ b/docker/mariaDB/read/conf/mysql.cnf @@ -0,0 +1,22 @@ +[mysqld] + +# Default authentication plugin +default-authentication-plugin=caching_sha2_password + +# Default character charset +character-set-server=utf8mb4 + +# Default collation server +collation-server=utf8mb4_unicode_ci + +# Max connections +max_connections=500 + +# Unique identifying number of the server. +server-id = 2 + +# Set binary log file base name. This should be identical to the binary log file base name in source. +log_bin=mysql-bin.log + +# Set the relay log file base name used by replica. This is needed to avoid error incase hostname is changed in future. +relay_log=mysql-relay-bin.log diff --git a/docker/mysql/primary/conf/mysql.cnf b/docker/mysql/primary/conf/mysql.cnf index c68110a67..aa9cfada6 100644 --- a/docker/mysql/primary/conf/mysql.cnf +++ b/docker/mysql/primary/conf/mysql.cnf @@ -1,5 +1,14 @@ [mysqld] +# Default authentication plugin +default-authentication-plugin=caching_sha2_password + +# Default character charset +character-set-server=utf8mb4 + +# Default collation server +collation-server=utf8mb4_unicode_ci + # Unique identifying number of the server. server_id = 1 diff --git a/docker/mysql/primary/init/01-databases.sql b/docker/mysql/primary/init/01-databases.sql index 860e5e7c6..5d9f2db0a 100644 --- a/docker/mysql/primary/init/01-databases.sql +++ b/docker/mysql/primary/init/01-databases.sql @@ -5,6 +5,6 @@ CREATE DATABASE IF NOT EXISTS `lisk`; GRANT ALL PRIVILEGES ON *.* TO 'lisk'@'%'; -- Create user for replica and grant replication privilege. -CREATE USER 'replica'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; +CREATE USER 'replica'@'%' IDENTIFIED WITH caching_sha2_password BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES; diff --git a/docker/mysql/read/conf/mysql.cnf b/docker/mysql/read/conf/mysql.cnf index c29b98025..29b48d18b 100644 --- a/docker/mysql/read/conf/mysql.cnf +++ b/docker/mysql/read/conf/mysql.cnf @@ -1,5 +1,14 @@ [mysqld] +# Default authentication plugin +default-authentication-plugin=caching_sha2_password + +# Default character charset +character-set-server=utf8mb4 + +# Default collation server +collation-server=utf8mb4_unicode_ci + # Unique identifying number of the server. server_id = 2 diff --git a/docker/mysql/read/init/01-databases.sql b/docker/mysql/read/init/01-databases.sql index 10685211d..b82b1200c 100644 --- a/docker/mysql/read/init/01-databases.sql +++ b/docker/mysql/read/init/01-databases.sql @@ -1,5 +1,5 @@ -- Create `reader` user for read queries and grant read privilages. -CREATE USER 'reader'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; +CREATE USER 'reader'@'%' IDENTIFIED WITH caching_sha2_password BY 'password'; GRANT SELECT ON *.* TO 'reader'@'%'; FLUSH PRIVILEGES; @@ -8,4 +8,5 @@ CHANGE REPLICATION SOURCE TO SOURCE_PORT = 3306, SOURCE_USER = 'replica', SOURCE_PASSWORD = 'password', - SOURCE_AUTO_POSITION = 1; + SOURCE_AUTO_POSITION = 1, + GET_SOURCE_PUBLIC_KEY = 1; diff --git a/docker/nats-server.conf b/docker/nats-server.conf index 9e540b6e8..9e1573650 100644 --- a/docker/nats-server.conf +++ b/docker/nats-server.conf @@ -1,2 +1,2 @@ -max_payload: 4Mb +max_payload: 8MB http_port: 8222 diff --git a/docker/redis.persistent.conf b/docker/redis.persistent.conf index 13a090198..ffddb9e52 100644 --- a/docker/redis.persistent.conf +++ b/docker/redis.persistent.conf @@ -13,5 +13,13 @@ aof-use-rdb-preamble yes save "" # Memory management -maxmemory 512mb +maxmemory 2gb maxmemory-policy volatile-lru + +# Replication +slave-read-only no + +# ACL rule for a lisk user +requirepass password +user lisk on allkeys allchannels allcommands >password +user default off diff --git a/docker/redis.volatile.conf b/docker/redis.volatile.conf index c0bc8888b..1109cb922 100644 --- a/docker/redis.volatile.conf +++ b/docker/redis.volatile.conf @@ -14,3 +14,11 @@ save "" # Memory management maxmemory 512mb maxmemory-policy allkeys-lru + +# Replication +slave-read-only no + +# ACL rule for a lisk user +requirepass password +user lisk on allkeys allchannels allcommands >password +user default off diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index d82cf856b..5edcf12a4 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -95,6 +95,8 @@ _Before_ submitting a pull request, please make sure the following is done: Follow the [JavaScript](https://github.com/airbnb/javascript) styleguide from Airbnb with the [lisk extension](https://github.com/LiskHQ/eslint-config-lisk-base). +1. Format your code using [Prettier](https://prettier.io/). This can be performed manually + with `npm run format`. 1. Submit a pull request via GitHub. Include issue numbers in the PR title, at the end with: `Description - Closes #IssueNumber`. 1. Check that Jenkins CI tests pass (pull request turns green). First time diff --git a/docs/antora/antora.yml b/docs/antora/antora.yml index 27acdeb72..068524ded 100644 --- a/docs/antora/antora.yml +++ b/docs/antora/antora.yml @@ -1,7 +1,7 @@ name: lisk-service title: Lisk Service -version: '0.7' -display_version: '0.7 (beta)' +version: 'master' +display_version: '0.7 (latest)' start_page: ROOT:index.adoc nav: - modules/ROOT/nav.adoc diff --git a/docs/antora/modules/ROOT/nav.adoc b/docs/antora/modules/ROOT/nav.adoc index 73af2fe1e..8ff53b261 100644 --- a/docs/antora/modules/ROOT/nav.adoc +++ b/docs/antora/modules/ROOT/nav.adoc @@ -7,5 +7,6 @@ ** xref:configuration/source.adoc[] * Management +** xref:management/snapshots.adoc[] ** xref:management/docker.adoc[] -** xref:management/source.adoc[] \ No newline at end of file +** xref:management/source.adoc[] diff --git a/docs/antora/modules/ROOT/pages/configuration/index.adoc b/docs/antora/modules/ROOT/pages/configuration/index.adoc index f27c5df8a..8a57e0042 100644 --- a/docs/antora/modules/ROOT/pages/configuration/index.adoc +++ b/docs/antora/modules/ROOT/pages/configuration/index.adoc @@ -49,7 +49,7 @@ The common configurations described in this section apply to all the microservic *Must be identical for all the microservices.* Make sure that all microservices can connect with the message broker. This could be a NATS or a Redis instance. -|redis://127.0.0.1:6379/0 +|redis://lisk:password@127.0.0.1:6379/0 | `SERVICE_BROKER_TIMEOUT` | number @@ -103,7 +103,7 @@ module.exports = { // [...] env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', SERVICE_LOG_LEVEL: 'info', // SERVICE_BROKER_TIMEOUT: 10, // SERVICE_LOG_CONSOLE: 'false', @@ -118,7 +118,7 @@ module.exports = { // [...] env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', SERVICE_LOG_LEVEL: 'info', // SERVICE_BROKER_TIMEOUT: 10, // SERVICE_LOG_CONSOLE: 'false', @@ -156,7 +156,7 @@ module.exports = { | `SERVICE_BROKER` | string | URL of the microservice message broker (NATS or Redis). -| redis://127.0.0.1:6379/0 +| redis://lisk:password@127.0.0.1:6379/0 | `JSON_RPC_STRICT_MODE` | boolean @@ -181,7 +181,7 @@ Must be listed as comma-separated values. | URL of the volatile cache storage (Redis). Used to cache RPC requests. Required when `ENABLE_REQUEST_CACHING` is enabled. -| redis://127.0.0.1:6379/5 +| redis://lisk:password@127.0.0.1:6379/5 | `GATEWAY_DEPENDENCIES` | string @@ -296,7 +296,7 @@ By default, it is set to run every minute. .Sample Configurations [%collapsible] ==== -.Example environment variables for the Gateway microservice +.Example environment variables for the Gateway microservice ---- module.exports = { apps: [ @@ -307,8 +307,8 @@ module.exports = { env: { PORT: 9901, // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_GATEWAY_REDIS_VOLATILE: 'redis://127.0.0.1:6379/5', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_GATEWAY_REDIS_VOLATILE: 'redis://lisk:password@127.0.0.1:6379/5', ENABLE_HTTP_API: 'http-status,http-version3,http-exports', ENABLE_WS_API: 'blockchain,rpc-v3', GATEWAY_DEPENDENCIES: 'indexer,connector', @@ -346,7 +346,7 @@ module.exports = { ==== -=== Connector +=== Blockchain Connector [cols="2,1,~,~m",options="header",stripes="hover"] @@ -359,7 +359,7 @@ module.exports = { | `SERVICE_BROKER` | string | URL of the microservice message broker (NATS or Redis). -| redis://127.0.0.1:6379/0 +| redis://lisk:password@127.0.0.1:6379/0 | `LISK_APP_WS` | string @@ -391,19 +391,63 @@ Only to be used when the genesis block is large enough to be transmitted over AP | `ENABLE_BLOCK_CACHING` | boolean | Boolean flag to enable block caching. -Enabled by default. +Enabled by default. To disable it, set it to `false`. | true | `EXPIRY_IN_HOURS` | number -| Expiry time in hours for block cache. +| Expiry time in hours for block cache. By default, it is set to `12` hours. | 12 +| `CLIENT_INSTANTIATION_MAX_WAIT_TIME` +| number +| Maximum wait time (in milliseconds) for the API client instantiation before forcefully instantiating a new client when getApiClient is invoked. +By default, it is set to `5000`. +| 5000 + +| `CLIENT_INSTANTIATION_RETRY_INTERVAL` +| number +| Retry interval (in milliseconds) to invoke instantiate API client when getApiClient is invoked. +By default, it is set to `1`. +| 1 + +| `CLIENT_ALIVE_ASSUMPTION_TIME` +| number +| Interval (in milliseconds) for which the WS API Client is assumed to be alive since the last ping/pong success check. +By default, it is set to `5000`. +| 5000 + +| `HEARTBEAT_ACK_MAX_WAIT_TIME` +| number +| Maximum time (in milliseconds) within which the checkIsClientAlive's algorithm expects a corresponding `pong` for the `ping` sent to the WS server. +By default, it is set to `1000`. +| 1000 + +| `ENDPOINT_INVOKE_MAX_RETRIES` +| number +| Maximum number of endpoint invocation request retries to the node. +By default, it is set to `3`. +| 5 + +| `ENDPOINT_INVOKE_RETRY_DELAY` +| number +| Delay (in milliseconds) between each endpoint invocation request retry. +By default, it is set to `10`. +| 10 + +| `CONNECTOR_EXIT_DELAY_IN_HOURS` +| number +| Delay (in hours) after which the blockchain-connector microservice exits. The service should restart automatically if deployed using Docker or PM2. +To be removed eventually. +To enable it, set it higher than `0`. +By default, it is set to `0`. +| 0 + | `JOB_INTERVAL_CACHE_CLEANUP` | number -| Job run interval to clean up block cache. +| Job run interval to clean up block cache. By default, it is set to 0. | 0 @@ -430,7 +474,7 @@ By default, it is set to an empty string `''`. .Sample Configurations [%collapsible] ==== -.Example environment variables for the Blockchain Connector microservice +.Example environment variables for the Blockchain Connector microservice ---- module.exports = { apps: [ @@ -440,7 +484,7 @@ module.exports = { // [...] env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', LISK_APP_WS: 'ws://127.0.0.1:7887', GEOIP_JSON: 'https://geoip.lisk.com/json', // ENABLE_BLOCK_CACHING: true, @@ -470,7 +514,7 @@ module.exports = { -=== Coordinator +=== Blockchain Coordinator [cols="2,1,~,~m",options="header",stripes="hover"] |=== @@ -482,13 +526,13 @@ module.exports = { | `SERVICE_BROKER` | string | URL of the microservice message broker (NATS or Redis). -| redis://127.0.0.1:6379/0 +| redis://lisk:password@127.0.0.1:6379/0 | `SERVICE_MESSAGE_QUEUE_REDIS` | string | URL of the Redis instance hosting the job queue to schedule the block indexing jobs. Must match the value supplied for the `indexer` microservice. -| redis://127.0.0.1:6379/3 +| redis://lisk:password@127.0.0.1:6379/3 | `JOB_INTERVAL_INDEX_MISSING_BLOCKS` | number @@ -499,14 +543,14 @@ By default, it is set to `0`. | `JOB_SCHEDULE_INDEX_MISSING_BLOCKS` | string | Job run cron schedule to index missing blocks. -By default, it is set to run every 15 minutes. -| */15 * * * * +By default, it is set to run every 5 minutes. +| */5 * * * * |=== .Sample Configurations [%collapsible] ==== -.Example environment variables for the Coordinator microservice +.Example environment variables for the Coordinator microservice ---- module.exports = { apps: [ @@ -516,8 +560,8 @@ module.exports = { // [...] env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_MESSAGE_QUEUE_REDIS: 'redis://127.0.0.1:6379/3', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_MESSAGE_QUEUE_REDIS: 'redis://lisk:password@127.0.0.1:6379/3', // SERVICE_BROKER_TIMEOUT: 10, // SERVICE_LOG_LEVEL: 'info', // SERVICE_LOG_CONSOLE: false, @@ -526,7 +570,7 @@ module.exports = { // SERVICE_LOG_FILE: false, // DOCKER_HOST: 'local', // JOB_INTERVAL_INDEX_MISSING_BLOCKS: 0, - // JOB_SCHEDULE_INDEX_MISSING_BLOCKS: '*/15 * * * *', + // JOB_SCHEDULE_INDEX_MISSING_BLOCKS: '*/5 * * * *', }, }, // Configuration for other microservices. @@ -536,7 +580,7 @@ module.exports = { ==== -=== Indexer +=== Blockchain Indexer [cols="2,1,~,~m",options="header",stripes="hover"] |=== @@ -548,7 +592,7 @@ module.exports = { | `SERVICE_BROKER` | string | URL of the microservice message broker (NATS or Redis). -| redis://127.0.0.1:6379/0 +| redis://lisk:password@127.0.0.1:6379/0 | `SERVICE_INDEXER_MYSQL` | string @@ -559,12 +603,12 @@ module.exports = { | string | URL of the job queue to process the scheduled indexing jobs by the Blockchain Coordinator (Redis). Must match the value supplied for the `coordinator` microservice. -| redis://127.0.0.1:6379/3 +| redis://lisk:password@127.0.0.1:6379/3 | `SERVICE_INDEXER_REDIS_VOLATILE` | string | URL of the volatile cache storage (Redis). -| redis://127.0.0.1:6379/2 +| redis://lisk:password@127.0.0.1:6379/2 | `ENABLE_DATA_RETRIEVAL_MODE` | string @@ -584,28 +628,13 @@ Must match the value supplied for the `coordinator` microservice. | `SERVICE_INDEXER_CACHE_REDIS` | string | URL of the cache storage (Redis). -| redis://127.0.0.1:6379/1 +| redis://lisk:password@127.0.0.1:6379/1 | `SERVICE_INDEXER_MYSQL_READ_REPLICA` | string | Connection string for the replicated MySQL (read-only) instance that the microservice connects to. | mysql://lisk:password@127.0.0.1:3306/lisk -| `ENABLE_APPLY_SNAPSHOT` -| boolean -| Boolean flag to enable initialization of the index with the Lisk Service database snapshot. -| false - -| `INDEX_SNAPSHOT_URL` -| string -| URL from where the Lisk Service database snapshot will be downloaded. -| - -| `ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP` -| boolean -| Boolean flag to enable downloading the snapshot from an (unsecured) HTTP URL. -| true - | `LISK_STATIC` | string | URL of Lisk static assets. @@ -655,9 +684,9 @@ By default, it is set to run every `10` seconds. | `JOB_SCHEDULE_REFRESH_INDEX_STATUS` | string -| Job run cron schedule to refresh indexing status. +| Job run cron schedule to refresh indexing status. By default, it is set to an empty string `''`. -| +| | `JOB_INTERVAL_REFRESH_BLOCKCHAIN_APPS_STATS` | number @@ -703,7 +732,7 @@ By default, it is set to `0`. | `JOB_SCHEDULE_TRIGGER_ACCOUNT_UPDATES` | string -| Job run cron schedule to trigger account updates. +| Job run cron schedule to trigger account updates. By default, it is set to run every 15 minutes. | */15 * * * * @@ -713,17 +742,72 @@ By default, it is set to run every 15 minutes. By default, it is set to `0`. | 0 +| `ACCOUNT_BALANCE_UPDATE_BATCH_SIZE` +| number +| Number of accounts for which the balance index is updated at a time. +By default, it is set to `1000`. +| 1000 + +| `INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT` +| number +| Maximum number of jobs (in active and waiting state) allowed in the block indexing queue. +By default, it is set to `100000`. +| 100000 + | `MAINCHAIN_SERVICE_URL` | string | Mainchain service URL for custom deployments. | https://service.lisk.com +| `INVOKE_ALLOWED_METHODS` +| string +| List of allowed methods that can be invoked via the `/invoke` API endpoint. +The list can be expressed as a CSV. +To allow invocation of all endpoints, set it to `*`. +To allow invocation of all the registered methods under the specified namespaces, set it similar to `legacy,chain`. +To allow invocation of specific methods, set it similar to `chain_getBlocksByIDs,chain_getBlocksByHeight`. +| `*`, `legacy,chain`, `chain_getBlocksByIDs` + |=== +==== Database snapshot configuration + +To accelerate the indexing process, the blockchain-indexer microservice also supports automatic download and an application of a snapshot to the MySQL/MariaDB databases. The following environment variables in the table below can be used to configure the same. + +[cols="2,1,~,~m",options="header",stripes="hover"] + +|=== +|Environment variable +|Datatype +|Description +|Sample + +|`ENABLE_APPLY_SNAPSHOT` +|boolean +|Enable or disable auto-apply snapshot feature. By default, the value is false. +|false + +|`DURABILITY_VERIFY_FREQUENCY` +|number +|Frequency in milliseconds to verify if a block is indexed or rolled-back successfully. By default, it is set to 1. +|1 + +|`INDEX_SNAPSHOT_URL` +|string +|Custom snapshot download URL (expected to end with sql.gz). +|https://snapshots.lisk.io/mainnet/service.sql.gz + +|`ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP` +|boolean +|Boolean flag to enable downloading the snapshot from an (unsecured) HTTP URL. By default, this is set to false. +|false +|=== + + .Sample Configurations [%collapsible] ==== -.Example environment variables for the Blockchain Indexer microservice +.Example environment variables for the Blockchain Indexer microservice ---- module.exports = { apps: [ @@ -733,15 +817,16 @@ module.exports = { // [...] env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_INDEXER_CACHE_REDIS: 'redis://127.0.0.1:6379/1', - SERVICE_INDEXER_REDIS_VOLATILE: 'redis://127.0.0.1:6379/2', - SERVICE_MESSAGE_QUEUE_REDIS: 'redis://127.0.0.1:6379/3', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_INDEXER_CACHE_REDIS: 'redis://lisk:password@127.0.0.1:6379/1', + SERVICE_INDEXER_REDIS_VOLATILE: 'redis://lisk:password@127.0.0.1:6379/2', + SERVICE_MESSAGE_QUEUE_REDIS: 'redis://lisk:password@127.0.0.1:6379/3', SERVICE_INDEXER_MYSQL: 'mysql://lisk:password@127.0.0.1:3306/lisk', ENABLE_DATA_RETRIEVAL_MODE: 'true', ENABLE_INDEXING_MODE: 'true', ENABLE_PERSIST_EVENTS: 'false', // ENABLE_APPLY_SNAPSHOT: 'false', + // DURABILITY_VERIFY_FREQUENCY: 1, // INDEX_SNAPSHOT_URL: '', // ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP: 'true', // SERVICE_INDEXER_MYSQL_READ_REPLICA: 'mysql://lisk:password@127.0.0.1:3306/lisk', @@ -756,6 +841,8 @@ module.exports = { // LISK_STATIC: 'https://static-data.lisk.com', // DEVNET_MAINCHAIN_URL: 'http://devnet-service.liskdev.net:9901', // ESTIMATES_BUFFER_BYTES_LENGTH: 0, + // ACCOUNT_BALANCE_UPDATE_BATCH_SIZE: 1000, + // INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT: 100000, // JOB_INTERVAL_DELETE_SERIALIZED_EVENTS: 0, // JOB_SCHEDULE_DELETE_SERIALIZED_EVENTS: '*/5 * * * *', // JOB_INTERVAL_REFRESH_VALIDATORS: 0, @@ -794,7 +881,7 @@ module.exports = { | `SERVICE_BROKER` | string | URL of the microservice message broker (NATS or Redis). -| redis://127.0.0.1:6379/0 +| redis://lisk:password@127.0.0.1:6379/0 | `SERVICE_APP_REGISTRY_MYSQL` | string @@ -808,7 +895,7 @@ module.exports = { | `DEFAULT_APPS` | string -| Default blockchain applications. +| Default blockchain applications. By default, it is set to `lisk_mainchain`. | lisk_mainchain @@ -850,7 +937,7 @@ By default, it is set to run every `10` minutes. .Sample Configurations [%collapsible] ==== -.Example environment variables for the Blockchain App Registry microservice +.Example environment variables for the Blockchain App Registry microservice ---- module.exports = { apps: [ @@ -860,7 +947,7 @@ module.exports = { // [...] env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', SERVICE_APP_REGISTRY_MYSQL: 'mysql://lisk:password@127.0.0.1:3306/lisk', ENABLE_REBUILD_INDEX_AT_INIT: false, // SERVICE_BROKER_TIMEOUT: 10, @@ -897,12 +984,12 @@ module.exports = { | `SERVICE_BROKER` | string | URL of the microservice message broker (NATS or Redis). -| redis://127.0.0.1:6379/0 +| redis://lisk:password@127.0.0.1:6379/0 | `SERVICE_FEE_ESTIMATOR_CACHE` | string | URL of the cache storage (Redis). -| redis://127.0.0.1:6379/1 +| redis://lisk:password@127.0.0.1:6379/1 | `ENABLE_FEE_ESTIMATOR_QUICK` | boolean @@ -945,7 +1032,7 @@ By default, it starts at the genesis height in full mode and the current block h .Sample Configurations [%collapsible] ==== -.Example environment variables for the Fee Estimator microservice +.Example environment variables for the Fee Estimator microservice ---- module.exports = { apps: [ @@ -955,8 +1042,8 @@ module.exports = { // [...] env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_FEE_ESTIMATOR_CACHE: 'redis://127.0.0.1:6379/1', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_FEE_ESTIMATOR_CACHE: 'redis://lisk:password@127.0.0.1:6379/1', ENABLE_FEE_ESTIMATOR_QUICK: true, ENABLE_FEE_ESTIMATOR_FULL: false, // FEE_EST_COLD_START_BATCH_SIZE: 1, @@ -993,7 +1080,7 @@ module.exports = { | `SERVICE_BROKER` | string | URL of the microservice message broker (NATS or Redis). -| redis://127.0.0.1:6379/0 +| redis://lisk:password@127.0.0.1:6379/0 | `SERVICE_STATISTICS_MYSQL` | string @@ -1003,7 +1090,7 @@ module.exports = { | `SERVICE_STATISTICS_REDIS` | string | URL of the cache storage (Redis). -| redis://127.0.0.1:6379/1 +| redis://lisk:password@127.0.0.1:6379/1 | `TRANSACTION_STATS_HISTORY_LENGTH_DAYS` | number @@ -1035,7 +1122,7 @@ By default, it is set to `0`. | `JOB_SCHEDULE_VERIFY_TRANSACTION_STATS` | string -|Job run cron schedule to verify if the transaction statistics have been built correctly. +|Job run cron schedule to verify if the transaction statistics have been built correctly. By default, it is set to run every 3rd hour after the first `15` minutes. | 15 */3 * * * @@ -1044,7 +1131,7 @@ By default, it is set to run every 3rd hour after the first `15` minutes. .Sample Configurations [%collapsible] ==== -.Example environment variables for the Transaction Statistics microservice +.Example environment variables for the Transaction Statistics microservice ---- module.exports = { apps: [ @@ -1054,8 +1141,8 @@ module.exports = { // [...] env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_STATISTICS_REDIS: 'redis://127.0.0.1:6379/1', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_STATISTICS_REDIS: 'redis://lisk:password@127.0.0.1:6379/1', SERVICE_STATISTICS_MYSQL: 'mysql://lisk:password@127.0.0.1:3306/lisk', TRANSACTION_STATS_HISTORY_LENGTH_DAYS: 366, // SERVICE_STATISTICS_MYSQL_READ_REPLICA: 'mysql://reader:password@127.0.0.1:3307/lisk', @@ -1090,12 +1177,12 @@ module.exports = { | `SERVICE_BROKER` | string | URL of the microservice message broker (NATS or Redis). -| redis://127.0.0.1:6379/0 +| redis://lisk:password@127.0.0.1:6379/0 | `SERVICE_MARKET_REDIS` | string | URL of the cache storage (Redis). -| redis://127.0.0.1:6379/2 +| redis://lisk:password@127.0.0.1:6379/2 | `SERVICE_MARKET_FIAT_CURRENCIES` | string @@ -1181,7 +1268,7 @@ By default, it is set to an empty string `''`. .Sample Configurations [%collapsible] ==== -.Example environment variables for the Market microservice +.Example environment variables for the Market microservice ---- module.exports = { apps: [ @@ -1191,8 +1278,8 @@ module.exports = { // [...] env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_MARKET_REDIS: 'redis://127.0.0.1:6379/2', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_MARKET_REDIS: 'redis://lisk:password@127.0.0.1:6379/2', SERVICE_MARKET_FIAT_CURRENCIES: 'EUR,USD,CHF,GBP,RUB,PLN,JPY,AUD,GBP,INR', SERVICE_MARKET_TARGET_PAIRS: 'LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,LSK_PLN,LSK_JPY,LSK_AUD,LSK_GBP,LSK_INR,BTC_EUR,BTC_USD,BTC_CHF', // EXCHANGERATESAPI_IO_API_KEY: '' @@ -1236,17 +1323,17 @@ For the local file system, use `*SERVICE_EXPORT_PARTIALS*` and `*SERVICE_EXPORT_ | `SERVICE_BROKER` | string | URL of the microservice message broker (NATS or Redis). -| redis://127.0.0.1:6379/0 +| redis://lisk:password@127.0.0.1:6379/0 | `SERVICE_EXPORT_REDIS` | string | URL of the permanent cache storage (Redis). -| redis://127.0.0.1:6379/3 +| redis://lisk:password@127.0.0.1:6379/3 | `SERVICE_EXPORT_REDIS_VOLATILE` | string | URL of the volatile cache storage (Redis). -| redis://127.0.0.1:6379/4 +| redis://lisk:password@127.0.0.1:6379/4 | `SERVICE_EXPORT_PARTIALS` | string @@ -1266,17 +1353,17 @@ For the local file system, use `*SERVICE_EXPORT_PARTIALS*` and `*SERVICE_EXPORT_ | `EXPORT_S3_ACCESS_KEY` | string | Amazon S3 bucket access key for the specified endpoint. -| +| | `EXPORT_S3_SECRET_KEY` | string | Amazon S3 bucket secret key. -| +| | `EXPORT_S3_SESSION_TOKEN` | string | Amazon S3 bucket session token. -| +| | `EXPORT_S3_REGION` | string @@ -1320,7 +1407,7 @@ By default, it is set to run daily at 04:45 am. .Sample Configurations [%collapsible] ==== -.Example environment variables for the Export microservice +.Example environment variables for the Export microservice ---- module.exports = { apps: [ @@ -1329,9 +1416,9 @@ module.exports = { name: 'lisk-service-export', // [...] env: { - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_EXPORT_REDIS: 'redis://127.0.0.1:6379/3', - SERVICE_EXPORT_REDIS_VOLATILE: 'redis://127.0.0.1:6379/4', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_EXPORT_REDIS: 'redis://lisk:password@127.0.0.1:6379/3', + SERVICE_EXPORT_REDIS_VOLATILE: 'redis://lisk:password@127.0.0.1:6379/4', // SERVICE_EXPORT_PARTIALS: './data/partials', // EXPORT_S3_BUCKET_NAME_PARTIALS: 'partials', // SERVICE_EXPORT_STATIC: './data/static', @@ -1356,4 +1443,6 @@ module.exports = { ], }; ---- -==== \ No newline at end of file +==== + + diff --git a/docs/antora/modules/ROOT/pages/index.adoc b/docs/antora/modules/ROOT/pages/index.adoc index 53d266be0..18dce3aae 100644 --- a/docs/antora/modules/ROOT/pages/index.adoc +++ b/docs/antora/modules/ROOT/pages/index.adoc @@ -6,8 +6,7 @@ Mona Bärenfänger :idprefix: :imagesdir: ../assets/images :page-no-previous: true -// :docs_general: ROOT:: -:lisk-docs: beta@ROOT:: +:lisk-docs: ROOT:: :url_api_mainnet: https://service.lisk.com/api/v3 :url_api_testnet: https://testnet-service.lisk.com/api/v3 @@ -27,10 +26,10 @@ Mona Bärenfänger :url_services_directory: https://github.com/LiskHQ/lisk-service/tree/development/services :url_app_registry: https://github.com/LiskHQ/app-registry :url_dynamic_fee: https://github.com/LiskHQ/lips/blob/main/proposals/lip-0013.md -// :url_http_api: https://github.com/LiskHQ/lisk-service/blob/v0.7.0-beta.0/docs/api/version3.md -:url_http_api: reference/api.adoc -:url_websocket_api: https://github.com/LiskHQ/lisk-service/blob/v0.7.0-beta.0/docs/api/version3.md -:url_subscribe_api: https://github.com/LiskHQ/lisk-service/blob/v0.7.0-beta.0/docs/api/websocket_subscribe_api.md +// :url_http_api: https://github.com/LiskHQ/lisk-service/blob/v0.7.0-rc.2/docs/api/version3.md +:url_http_api: {lisk-docs}api/lisk-service-http.adoc +:url_websocket_api: https://github.com/LiskHQ/lisk-service/blob/v0.7.0-rc.2/docs/api/version3.md +:url_subscribe_api: https://github.com/LiskHQ/lisk-service/blob/v0.7.0-rc.2/docs/api/websocket_subscribe_api.md :url_postman: https://www.postman.com/ :url_curl: https://curl.se/ :url_httpie: https://httpie.io/ @@ -220,7 +219,7 @@ The Gateway service provides the following APIs, which all users of Lisk Service // [source,bash] // ---- -// make build +// make build-images // ---- // Please note, this step is only necessary if you wish to build a custom or pre-release version of Lisk Service that does not have a pre-built Docker image published on the Docker Hub. // The installation script chooses the last available stable version on the Docker Hub, *unless* there is no local image. @@ -456,11 +455,15 @@ Lisk Testnet:: // }); // }; -// subscribe('update.block'); +// subscribe('new.block'); +// subscribe('new.transactions'); +// subscribe('delete.block'); +// subscribe('delete.transactions'); // subscribe('update.round'); -// subscribe('update.forgers'); -// subscribe('update.transactions.confirmed'); +// subscribe('update.generators'); // subscribe('update.fee_estimates'); +// subscribe('update.metadata'); +// subscribe('update.index.status'); // To log all events // [ diff --git a/docs/antora/modules/ROOT/pages/management/docker.adoc b/docs/antora/modules/ROOT/pages/management/docker.adoc index ee454feeb..aabc359c5 100644 --- a/docs/antora/modules/ROOT/pages/management/docker.adoc +++ b/docs/antora/modules/ROOT/pages/management/docker.adoc @@ -9,11 +9,26 @@ Mona Bärenfänger :source-language: bash :url_config: configuration/docker.adoc :url_FLUSHALL: https://redis.io/commands/FLUSHALL +:url_snapshot_config: configuration/index.adoc +:url_backups: management/snapshots.adoc +:url_rel_notes: https://github.com/LiskHQ/lisk-service/releases +:url_tags: https://github.com/LiskHQ/lisk-service/tags + +== Build Docker image + +.Inside the lisk-service root folder +---- +make build-images +---- +This creates the necessary Docker images to start Lisk Service in the containers. == Start .Inside the lisk-service root folder ---- +cp ./docker/example.env .env +---- +---- make up ---- @@ -196,12 +211,153 @@ make up NOTE: When Lisk Service is started again after a database reset, then the process to reindex all the data is initiated. This can be quite time-consuming when the chain is long, spanning over hours. +== Taking Snapshots + +If you wish to take a snapshot of your Docker installation, the details can be found here on the xref:{url_backups}[Snapshots] page. + == Logging -To check the logs for the different microservices of Lisk Service, use the command `docker container logs CONTAINER`, where `CONTAINER` is the respective Docker container that holds the logs you wish to view. +The possibility exists here to either use the `docker` commands or the `make` commands to check the logs, and both options are listed here below. + +For `docker`, to check the logs for the different microservices of Lisk Service, use the command `docker container logs CONTAINER`, where `CONTAINER` is the respective Docker container that holds the logs you wish to view. For example, to see the logs for the Gateway microservice, execute the following command: ---- docker container logs lisk-service_gateway_1 ---- + +To check the logs for different microservices using the `make` commands, the following commands listed below can be used: + +.Displays the logs for all the microservices that have been logged so far, and that are currently existing +---- +make logs +---- + +.Displays the latest logs for all the microservices +---- +make logs-live +---- + +.Displays the logs for the specified microservice. +---- +make logs-blockchain-connector +---- +In the above example, it will display logs only for the `blockchain-connector` microservice. + +.Displays the latest logs for the specified microservice. +---- +make logs-live-blockchain-connector +---- +In the above example, it will display the latest logs only for the `blockchain-connector` microservice. + + +Replace the `blockchain-connector` with the specific service name required. + + +== Upgrade Lisk Service + +To upgrade the Docker container to a desired version, please follow one of the two options below. To find all the tagged versions for Lisk Service, please check the {url_tags}[available tags] on GitHub. + +[tabs] +==== +Option A - Download pre-built images from DockerHub:: ++ +-- +. Stop Lisk Service ++ +---- +make stop +---- +NOTE: In case the database needs to be flushed please execute the `make down` command instead. Please check the {url_rel_notes}[release notes] for the relevant version to see if the existing databases need to be flushed. + +. Checkout the version with *`git checkout `* ++ +---- +git checkout v0.7.0 +---- + +. Update `docker-compose.yml` to download the specific image versions from the DockerHub as shown below. +Update specified images with the desired version, for example `0.7.0`. ++ +.docker-compose.yml +[source,yaml] +---- +blockchain-app-registry: + image: lisk/service_blockchain_app_registry:0.7.0 + ... + + blockchain-connector: + image: lisk/service_blockchain_connector:0.7.0 + ... + + blockchain-indexer: + image: lisk/service_blockchain_indexer:0.7.0 + ... + + blockchain-coordinator: + image: lisk/service_blockchain_coordinator:0.7.0 + ... + + transaction-statistics: + image: lisk/service_transaction_statistics:0.7.0 + ... + + fee-estimator: + image: lisk/service_fee_estimator:0.7.0 + ... + + gateway: + image: lisk/service_gateway:0.7.0 + ... + + market: + image: lisk/service_market:0.7.0 + ... + + export: + image: lisk/service_export:0.7.0 + +---- + +. Start Lisk Service in the containers. ++ +---- +make up +---- +-- +Option B - Build images locally :: ++ +-- +Build the images locally using the following steps. +Navigate inside the lisk-service root folder, and execute the following commands. + +. Stop Lisk Service ++ +---- +make stop +---- +NOTE: In case the database needs to be flushed please execute the `make down` command instead. Please check the {url_rel_notes}[release notes] for the relevant version to see if the existing databases need to be flushed. + +. Checkout the version with *`git checkout `* ++ +---- +git checkout v0.7.0 +---- + +. Build the required updated Docker images ++ +---- +make build-images +---- + +. Start Lisk Service in the containers ++ +---- +make up +---- +-- + +==== + +To verify the microservice logs, please refer to the <> section. diff --git a/docs/antora/modules/ROOT/pages/management/snapshots.adoc b/docs/antora/modules/ROOT/pages/management/snapshots.adoc new file mode 100644 index 000000000..50f8e0f93 --- /dev/null +++ b/docs/antora/modules/ROOT/pages/management/snapshots.adoc @@ -0,0 +1,30 @@ += Applying database snapshots +Chris Braithwaite +:description: Describes how to perform Lisk Service database snapshots +:toc: +:idseparator: - +:idprefix: +:experimental: +:imagesdir: ../assets/images +:source-language: bash +:url_snapshot_config: configuration/index.adoc#database-snapshot-configuration + +You can create a snapshot of the database in your Docker or Source-based installation. +The process is quite similar for both and is explained in the following sections. + +== Applying snapshots using Docker + +With regard to applying snapshots for the Docker installation, the configurations to sync Lisk Service from an existing snapshot can be used to speed up the sync process. +It is possible to enable or create a snapshot of the MySQL and Maria database, and the available xref:{url_snapshot_config}[snapshot configurations] can be found in the Lisk Service configuration reference page. +To create either a MariaDB or a MySQL snapshot, set the `ENABLE_APPLY_SNAPSHOT` to `true` in the Indexer Service configuration. + +To enable the relevant snapshot to be imported automatically, please ensure to set the aforementioned parameters above before starting the service. +With regard to the MariaDB the configurations will be the same as the MySQL DB. + +NOTE: The `MARIADB_ROOT_PASSWORD`/`MYSQL_ROOT_PASSWORD` and `MARIADB_PASSWORD`/`MYSQL_PASSWORD` must not contain any of the non-ASCII characters, for example, ¡, ¢, £, etc. + +== Applying snapshots using Source + +The same instructions are applicable with regard to the Source based installation, as listed above in the Docker section. + + diff --git a/docs/antora/modules/ROOT/pages/management/source.adoc b/docs/antora/modules/ROOT/pages/management/source.adoc index f0ef762fa..7d858d9cd 100644 --- a/docs/antora/modules/ROOT/pages/management/source.adoc +++ b/docs/antora/modules/ROOT/pages/management/source.adoc @@ -6,15 +6,26 @@ Mona Bärenfänger Muhammad Talha > command. To learn more about PM2 log management please refer the {url_pm2_management}[PM2 logs documentation]. + + == Various PM2 commands === Start @@ -99,6 +110,7 @@ Alternatively, it is also possible to check the logs for a specific PM2 process For example, `pm2 logs 0` can be used to check the Lisk Service Gateway logs. TIP: The process ID of each PM2-managed process can be seen by executing the <> command. +To learn more about PM2 log management please refer the {url_pm2_management}[PM2 logs documentation]. For example, to see the logs for the Gateway microservice, execute the following command: @@ -262,6 +274,10 @@ pm2 delete ecosystem.config.js ---- ==== +== Taking Snapshots + +If you wish to take a snapshot of your Source-based installation, the details can be found here on the xref:{url_backups}[Snapshots] page. + == Resetting Lisk Service === Clean all run-time files with dependencies @@ -359,3 +375,104 @@ redis-cli -n flushdb ==== You can start Lisk Service again with the <> command. + + +== Upgrade Lisk Service + +To upgrade Lisk Service to a desired version, please follow the steps listed below. To find all the tagged versions for Lisk Service, please check the {url_tags}[available tags] on GitHub. + +. Stop the existing running version of Lisk Service. ++ +---- +pm2 stop ecosystem.config.js +---- ++ +.Response +[%collapsible] +==== +.Example output +[source,bash] +---- +[PM2] [lisk-service-blockchain-app-registry](1) ✓ +[PM2] [lisk-service-gateway](0) ✓ +[PM2] [lisk-service-blockchain-indexer](3) ✓ +[PM2] [lisk-service-blockchain-connector](2) ✓ +[PM2] [lisk-service-blockchain-coordinator](4) ✓ +[PM2] [lisk-service-fee-estimator](5) ✓ +[PM2] [lisk-service-transaction-statistics](6) ✓ +[PM2] [lisk-service-market](7) ✓ +[PM2] [lisk-service-export](8) ✓ +┌------------------------------------------------------------------------------------------------------------------------------------------------------------------------┐ +│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ +├------------------------------------------------------------------------------------------------------------------------------------------------------------------------┤ +│ 1 │ lisk-service-blockchain-app-registry │ default │ 0.7.0-… │ fork │ 0 │ 0 │ 32 │ stopped │ 0% │ 0b │ XYZ │ disabled │ +│ 2 │ lisk-service-blockchain-connector │ default │ 0.7.0-… │ fork │ 0 │ 0 │ 0 │ stopped │ 0% │ 0b │ XYZ │ disabled │ +│ 4 │ lisk-service-blockchain-coordinator │ default │ 0.7.0-… │ fork │ 0 │ 0 │ 0 │ stopped │ 0% │ 0b │ XYZ │ disabled │ +│ 3 │ lisk-service-blockchain-indexer │ default │ 0.7.0-… │ fork │ 0 │ 0 │ 32 │ stopped │ 0% │ 0b │ XYZ │ disabled │ +│ 8 │ lisk-service-export │ default │ 0.7.0-… │ fork │ 0 │ 0 │ 30 │ stopped │ 0% │ 0b │ XYZ │ disabled │ +│ 5 │ lisk-service-fee-estimator │ default │ 0.7.0-… │ fork │ 0 │ 0 │ 30 │ stopped │ 0% │ 0b │ XYZ │ disabled │ +│ 0 │ lisk-service-gateway │ default │ 0.7.0-… │ fork │ 0 │ 0 │ 30 │ stopped │ 0% │ 0b │ XYZ │ disabled │ +│ 7 │ lisk-service-market │ default │ 0.7.0-… │ fork │ 0 │ 0 │ 30 │ stopped │ 0% │ 0b │ XYZ │ disabled │ +│ 6 │ lisk-service-transaction-statistics │ default │ 0.7.0-… │ fork │ 0 │ 0 │ 30 │ stopped │ 0% │ 0b │ XYZ │ disabled │ +└------------------------------------------------------------------------------------------------------------------------------------------------------------------------┘ +---- +==== + +. Checkout the version with *`git checkout `*. ++ +---- +git checkout v0.7.0 +---- + +. Update the npm dependencies by executing the following command. ++ +---- +make build-local +---- + +. Restart Lisk Service with the following command. ++ +---- +pm2 start ecosystem.config.js +---- ++ +.Response +[%collapsible] +==== +.Example output +---- +[PM2] Applying action restartProcessId on app [lisk-service-gateway](ids: [ 0 ]) +[PM2] Applying action restartProcessId on app [lisk-service-blockchain-app-registry](ids: [ 1 ]) +[PM2] [lisk-service-gateway](0) ✓ +[PM2] [lisk-service-blockchain-app-registry](1) ✓ +[PM2] Applying action restartProcessId on app [lisk-service-blockchain-connector](ids: [ 2 ]) +[PM2] [lisk-service-blockchain-connector](2) ✓ +[PM2] Applying action restartProcessId on app [lisk-service-blockchain-indexer](ids: [ 3 ]) +[PM2] [lisk-service-blockchain-indexer](3) ✓ +[PM2] Applying action restartProcessId on app [lisk-service-blockchain-coordinator](ids: [ 4 ]) +[PM2] [lisk-service-blockchain-coordinator](4) ✓ +[PM2] Applying action restartProcessId on app [lisk-service-fee-estimator](ids: [ 5 ]) +[PM2] [lisk-service-fee-estimator](5) ✓ +[PM2] Applying action restartProcessId on app [lisk-service-transaction-statistics](ids: [ 6 ]) +[PM2] [lisk-service-transaction-statistics](6) ✓ +[PM2] Applying action restartProcessId on app [lisk-service-market](ids: [ 7 ]) +[PM2] [lisk-service-market](7) ✓ +[PM2] Applying action restartProcessId on app [lisk-service-export](ids: [ 8 ]) +[PM2] [lisk-service-export](8) ✓ +┌----------------------------------------------------------------------------------------------------------------------------------------------------------------------------┐ +│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ +├----------------------------------------------------------------------------------------------------------------------------------------------------------------------------┤ +│ 1 │ lisk-service-blockchain-app-registry │ default │ 0.7.0-… │ fork │ 33328 │ 0s │ 16 │ online │ 0% │ 65.5mb │ XYZ │ disabled │ +│ 2 │ lisk-service-blockchain-connector │ default │ 0.7.0-… │ fork │ 33331 │ 0s │ 0 │ online │ 0% │ 63.8mb │ XYZ │ disabled │ +│ 4 │ lisk-service-blockchain-coordinator │ default │ 0.7.0-… │ fork │ 33341 │ 0s │ 0 │ online │ 0% │ 54.1mb │ XYZ │ disabled │ +│ 3 │ lisk-service-blockchain-indexer │ default │ 0.7.0-… │ fork │ 33338 │ 0s │ 16 │ online │ 0% │ 54.3mb │ XYZ │ disabled │ +│ 8 │ lisk-service-export │ default │ 0.7.0-… │ fork │ 33355 │ 0s │ 15 │ online │ 0% │ 14.1mb │ XYZ │ disabled │ +│ 5 │ lisk-service-fee-estimator │ default │ 0.7.0-… │ fork │ 33346 │ 0s │ 15 │ online │ 0% │ 46.9mb │ XYZ │ disabled │ +│ 0 │ lisk-service-gateway │ default │ 0.7.0-… │ fork │ 33326 │ 0s │ 15 │ online │ 0% │ 65.6mb │ XYZ │ disabled │ +│ 7 │ lisk-service-market │ default │ 0.7.0-… │ fork │ 33351 │ 0s │ 15 │ online │ 0% │ 36.9mb │ XYZ │ disabled │ +│ 6 │ lisk-service-transaction-statistics │ default │ 0.7.0-… │ fork │ 33348 │ 0s │ 15 │ online │ 0% │ 43.5mb │ XYZ │ disabled │ +└----------------------------------------------------------------------------------------------------------------------------------------------------------------------------┘ +---- +==== + +NOTE: Please check the {url_rel_notes}[GitHub release notes] for the relevant version to verify if the existing databases need to be flushed. diff --git a/docs/antora/modules/ROOT/pages/reference/api-testnet.adoc b/docs/antora/modules/ROOT/pages/reference/api-testnet.adoc deleted file mode 100644 index 77445b84c..000000000 --- a/docs/antora/modules/ROOT/pages/reference/api-testnet.adoc +++ /dev/null @@ -1,6 +0,0 @@ -= HTTP API (Testnet) -Mona Bärenfänger -:description: Interactive HTTP API reference of Lisk Service (Testnet). -:page-no-next: true -:page-layout: swagger -:page-swagger-url: https://testnet-service.lisk.com/api/v2/spec diff --git a/docs/antora/modules/ROOT/pages/reference/api.adoc b/docs/antora/modules/ROOT/pages/reference/api.adoc deleted file mode 100644 index 34338a7bf..000000000 --- a/docs/antora/modules/ROOT/pages/reference/api.adoc +++ /dev/null @@ -1,6 +0,0 @@ -= HTTP API (Mainnet) -Mona Bärenfänger -:description: Interactive HTTP API reference of Lisk Service (Mainnet). -:page-no-next: true -:page-layout: swagger -:page-swagger-url: https://service.lisk.com/api/v2/spec diff --git a/docs/antora/modules/ROOT/pages/reference/rpc-api.adoc b/docs/antora/modules/ROOT/pages/reference/rpc-api.adoc deleted file mode 100644 index 95f35f045..000000000 --- a/docs/antora/modules/ROOT/pages/reference/rpc-api.adoc +++ /dev/null @@ -1,1289 +0,0 @@ -= WebSocket JSON 2.0 RPC API -:toc: - -== Access paths and compatibility -The RPC WebSocket API can be accessed by the `ws://127.0.0.1:9901/rpc-v2`. - -=== Access paths and compatibility -The WebSocket API can be accessed by the `wss://service.lisk.com/rpc-v2`. - -The testnet network can also be accessed by `wss://testnet-service.lisk.com/rpc-v2`. - -The Lisk Service WebSocket API uses the `socket.io` library and is compatible with the JSON-RPC 2.0 standard. -The specification below contains numerous examples how to use the API in practice. - -=== Endpoint logic -The logic of the endpoints is derived as follows: the method naming is always based on the following pattern: `.`, where the action is equivalent to HTTP standard (GET, POST, PUT, etc.) and `entity` is a part of the application logic, ex. `accounts`, transactions and so on. - -=== Requests - -[source,js] ----- -import io from 'socket.io-client'; - -const request = async (endpoint, method, params) => new Promise(resolve => { - const socket = io(endpoint, { forceNew: true, transports: ['websocket'] }); - - socket.emit('request', { jsonrpc: '2.0', method, params }, answer => { - socket.close(); - resolve(answer); - }); -}); - -const wsRequest = async () => { - return await request('ws://127.0.0.1:9901/rpc', 'get.accounts', { "address": "lskzkfw7ofgp3uusknbetemrey4aeatgf2ntbhcds" }); -}; - -wsRequest().then(response => { - console.log(response); -}); ----- - -=== Responses -All responses are returned in the JSON format - application/json. - -Each API response has the following structure: - -[source,js] ----- -{ - "jsonrpc": "2.0", // standard JSON-RPC envelope - "result": { - "data": {}, // Contains the requested data - "meta": {}, // Contains additional metadata, e.g. the values of `limit` and `offset` - }, - "id": 1 // Number of response in chain -} ----- - -== Date Format -In the contrary to the original Lisk Core API, all timestamps used by the Lisk Service are in the UNIX timestamp format. -The blockchain dates are always expressed as integers and the epoch date is equal to the number of seconds since 1970-01-01 00:00:00. - -== Multi-Requests -A request can consist of an array of multiple responses. - -[source,js] ----- -[ - { "jsonrpc": "2.0", "id": 1, "method": "get.blocks", "params": {} }, - { "jsonrpc": "2.0", "id": 2, "method": "get.transactions", "params": { "height": "123" } }, - { "jsonrpc": "2.0", "id": 3, "method": "get.accounts", "params": { "address": "lskzkfw7ofgp3uusknbetemrey4aeatgf2ntbhcds"} } -] ----- - -Response - -[source,js] ----- -[ - { - "jsonrpc": "2.0", - "result": { - "data": [ - ... // List of blocks - ], - "meta": {}, - }, - "id": 1 - }, - { - "jsonrpc": "2.0", - "result": { - "data": [ - ... // List of transactions - ], - "meta": {}, - }, - "id": 2 - }, - { - "jsonrpc": "2.0", - "data": [ - ... // List of accounts - ], - "meta": {}, - }, - "id": 3 - } -] ----- - -== Lisk Blockchain-related Endpoints - -=== Accounts - -==== get.accounts -Retrieves account details based on criteria defined by params. - -Supports pagination. - -[cols=",,,,", options="header"] -.Parameters -|=== -|Parameter |Type |Validation |Default |Comment - -|`address` -|String -|`/^lsk[a-hjkm-z2-9]{38}$//^[1-9]\d{0,19}[L|l]$/` -|(empty) -|Resolves new and old address system. - -|`publickey` -|String -|`/^([A-Fa-f0-9]{2}){32}$/` -|(empty) -| - -|`username` -|String -|`/^[a-z0-9!@$&_.]{1,20}$/` -|(empty) -| - -|`isDelegate` -|Boolean -|`true` or `false` -|(empty) -| - -|`status` -|String -|`active`, `standby`, `banned`, `punished`, `non-eligible` -|(empty) -|Multiple choice possible i.e. `active,banned` - -|`search` -|String -| -|(empty) -| - -|`limit` -|Number -|`<1;100>` -|10 -| - -|`offset` -|Number -|`<0;+Inf>` -|0 -| - -|`sort` -|Array of strings -|`["balance:asc", "balance:desc", "rank:asc", "rank:desc"]` -|`balance:desc` -|Rank is dedicated to delegate accounts -|=== - -.Response example -[source,json] ----- -{ - "data": { - "summary": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "legacyAddress": "2841524825665420181L", - "balance": "151146419900", - "username": "liberspirita", - "publicKey": "968ba2fa993ea9dc27ed740da0daf49eddd740dbd7cb1cb4fc5db3a20baf341b", - "isMigrated": true, - "isDelegate": true, - "isMultisignature": true, - }, - "knowledge": { - "owner": "Genesis Account", - "description": "" - }, - "token": { - "balance": "151146419900" - }, - "sequence": { - "nonce": "11" - }, - "keys": { - "numberOfSignatures": 0, - "mandatoryKeys": [], - "optionalKeys": [], - "members": [ - { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "publicKey": "968ba2fa993ea9dc27ed740da0daf49eddd740dbd7cb1cb4fc5db3a20baf341b", - "isMandatory": true, - } - ], - "memberships": [ - { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "publicKey": "968ba2fa993ea9dc27ed740da0daf49eddd740dbd7cb1cb4fc5db3a20baf341b", - "username": "genesis_51", - } - ], - }, - "dpos": { - "delegate": { - "username": "liberspirita", - "pomHeights": [ - { "start": 123, "end": 456 }, - { "start": 789, "end": 1050 } - ], - "consecutiveMissedBlocks": 0, - "lastForgedHeight": 68115, - "isBanned": false, - "totalVotesReceived": "201000000000", - }, - "sentVotes": [ - { - "delegateAddress": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "amount": "102000000000" - }, - { - "delegateAddress": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "amount": "95000000000" - } - ], - "unlocking": [ - { - "delegateAddress": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "amount": "150000000", - "height": { - "start": "10", - "end": "2010" - } - } - ], - "legacy": { - "address": "2841524825665420181L", // legacyAddress - "balance": "234500000" // Reclaimable balance - } - } - }, - "meta": { - "count": 1, - "offset": 0 - }, - "links": {} -} ----- - -.Example: Get account with a specific Lisk account ID -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.accounts", - "params": { - "address": "lskzkfw7ofgp3uusknbetemrey4aeatgf2ntbhcds" - } -} ----- - -==== get.votes_sent -Retrieves votes of a single account based on address, public key or delegate name. - -Supports pagination. - -[cols=",,,,", options="header"] -.Parameters -|=== -|Parameter |Type |Validation |Default |Comment - -|`address` -|String -|`/^lsk[a-hjkm-z2-9]{38}$//^[1-9]\d{0,19}[L|l]$/` -|(empty) -|Resolves only new address system - -|`publickey` -|String -|`/^([A-Fa-f0-9]{2}){32}$/` -|(empty) -| - -|`username` -|String -|`/^[a-z0-9!@$&_.]{1,20}$/` -|(empty) -| - -|=== - -.Response -[source,json] ----- -{ - "data": { - "account": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "username": "genesis_56", - "votesUsed": 10 - }, - "votes": [ - { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "amount": 1081560729258, // = voteWeight - "username": "liskhq" - } - ] - }, - "meta": { - "count": 10, - "offset": 0, - "total": 10 // = votesUsed - }, - "links": {} -} ----- - -.Example -[source,json] ----- -{ - "method": "get.votes_sent", - "params": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu" - } -} ----- - -==== get.votes_received -Retrieves voters for a delegate account based on address, public key or delegate name. - -Supports pagination. - -[cols=",,,,", options="header"] -.Parameters -|=== -|Parameter |Type |Validation |Default |Comment - -|`address` -|String -|`/^lsk[a-hjkm-z2-9]{38}$//^[1-9]\d{0,19}[L|l]$/` -|(empty) -|Resolves only new address system - -|`publickey` -|String -|`/^([A-Fa-f0-9]{2}){32}$/` -|(empty) -| - -|`username` -|String -|`/^[a-z0-9!@$&_.]{1,20}$/` -|(empty) -| - -|`limit` -|Number -|`<1;100>` -|10 -| - -|`offset` -|Number -|`<0;+Inf>` -|0 -| - -|=== - -.Response -[source,json] ----- -{ - "data": { - "account": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "username": "genesis_56", - "votesUsed": 10 - }, - "votes": [ - { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "amount": 1081560729258, // = voteWeight - "username": "liskhq" - } - ] - }, - "meta": { - "count": 10, - "offset": 0, - "total": 10 // = votesUsed - }, - "links": {} -} ----- -.Example -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.votes_received", - "params": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu" - } -} ----- - -=== Blocks -==== get.blocks -Retrieves blocks from the blockchain based on ID, height or account. - -Supports pagination. - -[cols=",,,,", options="header"] -.Parameters -|=== -|Parameter |Type |Validation |Default |Comment - -|`blockId` -|String -|`/^([1-9]|[A-Fa-f0-9]){1,64}$/` -|(empty) -| - -|`height` -|String -|`/[0-9]+/` and `/[0-9]+:[0-9]+/` -|(empty) -|Can be expressed as an interval ie. `1:20`. - -|`generatorAddress` -|String -|`/^lsk[a-hjkm-z2-9]{38}$/ and /^[1-9]\d{0,19}[L|l]$/` -|(empty) -|Resolves new and old address system. - -|`generatorPublicKey` -|String -|`/^([A-Fa-f0-9]{2}){32}$/` -|(empty) -| - -|`generatorUsername` -|String -|`/^[a-z0-9!@$&_.]{1,20}$/` -|(empty) -| - -|`limit` -|Number -|`<1;100>` -|10 -| - -|`offset` -|Number -|`<0;+Inf>` -|0 -| - -|`sort` -|Array of strings -|`["height:asc", "height:desc","timestamp:asc", "timestamp:desc"]` -|`height:desc` -|Rank is dedicated to delegate accounts -|=== - -.Response -[source,json] ----- -{ - "data": [ - { - "id": "1963e291eaa694fb41af320d7af4e92e38be26ddd88f61b150c74347f119de2e", - "height": 8344448, - "version": 0, - "timestamp": 85944650, - "generatorAddress": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "generatorPublicKey": "6e904b2f678eb3b6c3042acb188a607d903d441d61508d047fe36b3c982995c8", - "generatorUsername": "genesis_13", - "transactionRoot": "4e4d91be041e09a2e54bb7dd38f1f2a02ee7432ec9f169ba63cd1f193a733dd2", - "signature": "a3733254aad600fa787d6223002278c3400be5e8ed4763ae27f9a15b80e20c22ac9259dc926f4f4cabdf0e4f8cec49308fa8296d71c288f56b9d1e11dfe81e07", - "previousBlockId": "15918760246746894806", - "numberOfTransactions": 15, - "totalFee": "15000000", - "reward": "50000000", - "totalForged": "65000000", - "totalBurnt": "10000000", - "isFinal": true, - "maxHeightPreviouslyForged": 68636, - "maxHeightPrevoted": 68707, - "seedReveal": "4021e5048af4c9f64ff2e12780af21f4" - } - ], - "meta": { - "count": 100, - "offset": 25, - "total": 43749 - }, - "links": {} -} ----- -=== Forgers -==== get.forgers -Retrieves next forgers with details in the current round. - -Supports pagination. - -[cols=",,,,", options="header"] -.Parameters -|=== -|Parameter |Type |Validation |Default |Comment - -|`limit` -|Number -|`<1;103>` -|10 -| - -|`offset` -|Number -|`<0;+Inf>` -|0 -| - -|=== - -.Response -[source,json] ----- -{ - "data": [ - { - "username": "genesis_51", - "totalVotesReceived": "1006000000000", - "address": "c6d076ed541ca20869a1398a9d28c645ac8a8719", - "minActiveHeight": 27605, - "isConsensusParticipant": true, - "nextForgingTime": 1607521557 - }, - ], - "meta": { - "count": 10, - "offset": 20, - "total": 103 - }, - "links": {} -} ----- - -.Example: Get 20 items, skip 50 first -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.forgers", - "params": { - "limit": "20", - "offset": "50" - } -} ----- - -=== Transactions -==== get.transactions -Retrieves network transactions by criteria defined by params. - -Supports pagination. - -[cols=",,,,", options="header"] -.Parameters -|=== -|Parameter |Type |Validation |Default |Comment - -|`transactionId` -|String -|`/^([1-9]|[A-Fa-f0-9]){1,64}$/` -|(empty) -| - -|`moduleAssetId` -|String -|`ModuleId:AssetId/[0-9]+:[0-9]+/` -|(empty) -|Transfer transaction: moduleID = 2,assetID = 0 - -|`moduleAssetName` -|String -|`ModuleName:AssetName/[a-z]+:[a-z]+/` -|(empty) -|Transfer transaction: moduleName = token, assetName = transfer - -|`senderAddress` -|String -|`/^lsk[a-hjkm-z2-9]{38}$//^[1-9]\d{0,19}[L|l]$/` -|(empty) -| - -|`senderPublicKey` -|String -|`/^([A-Fa-f0-9]{2}){32}$/` -|(empty) -| - -|`senderUsername` -|String -|`/^[a-z0-9!@$&_.]{1,20}$/` -|(empty) -| - -|`recipientAddress` -|String -|`/^lsk[a-hjkm-z2-9]{38}$//^[1-9]\d{0,19}[L|l]$/` -|(empty) -| - -|`recipientPublicKey` -|String -|`/^([A-Fa-f0-9]{2}){32}$/` -|(empty) -| - -|`recipientUsername` -|String -|`/^[a-z0-9!@$&_.]{1,20}$/` -|(empty) -| - -|`amount` -|String -| -|(empty) -|Can be expressed as interval ie. `100000:200000`. - -|`timestamp` -|String -| -|(empty) -|Can be expressed as interval ie. `100000:200000` - -|`blockId` -|String -|`/^([1-9]|[A-Fa-f0-9]){1,64}$/` -|(empty) -|Block ID - -|`height` -|String -| -|(empty) -|Block height - -|`search` -|String -| -|(empty) -|Wildcard search - -|`data` -|String -| -|(empty) -|Wildcard search - -|`includePending` -|Boolean -| -|false -| - -|`nonce` -|String -|`/^\d+$/` -|(empty) -|In conjunction with senderAddress - -|`limit` -|Number -|`<1;100>` -|10 -| - -|`offset` -|Number -|`<0;+Inf>` -|0 -| - -|`sort` -|Array of strings -|`["amount:asc", "amount:desc", "timestamp:asc", "timestamp:desc"]` -|`timestamp:desc` -| - -|=== - -.Response -[source,json] ----- -{ - "data": [ - { - "id": "222675625422353767", - "operationId": "2:0", - "operationName": "token:transfer", - "fee": "1000000", - "nonce": "0", - "block": { // optional - "id": "6258354802676165798", - "height": 8350681, - "timestamp": 28227090, - }, - "sender": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "publicKey": "2ca9a7...c23079", - "username": "genesis_51", - }, - "signatures": [ "72c9b2...36c60a" ], - "confirmations": 0, - "asset": { // Depends on operation - "amount": "150000000", - "recipient": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "publicKey": "2ca9a7...c23079", - "username": "genesis_49", - }, - "data": "message" - }, - "relays": 0, - "isPending": false - } - ], - "meta": { - "count": 100, - "offset": 25, - "total": 43749 - }, - "links": {} -} ----- -.Example: Getting a transaction by transaction ID -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.transactions", - "params": { - "transactionId": "222675625422353767" - } -} ----- -.Example: Getting the last 25 transactions for account 14935562234363081651L -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.transactions", - "params": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "limit": "25" - } -} ----- -==== post.transactions -Posts transactions to the network. - -No parameters. - -.Example Response -[source,json] ----- -{ - "message": "Transaction payload was successfully passed to the network node" - "transactionId": "123456789" -} ----- - -.Example: Posting a transaction -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "post.transactions", - "payload": {"transaction":"08021000180d2080c2d72f2a200fe9a3f1a21b5530f27f87a414b549e79a940bf24fdf2b2f05e7f22aeeecc86a32270880c2d72f12144fd8cc4e27a3489b57ed986efe3d327d3de40d921a0a73656e6420746f6b656e3a4069242925e0e377906364fe6c2eed67f419dfc1a757f73e848ff2f1ff97477f90263487d20aedf538edffe2ce5b3e7601a8528e5cd63845272e9d79c294a6590a"} -} ----- - -==== get.transactions.statistics -Retrieves daily network transactions statistics for time spans defined by params. - -Supports pagination. - -[cols=",,,,", options="header"] -.Parameters -|=== -|Parameter |Type |Validation |Default |Comment - -|`interval` -|String -|`["day", "month"]` -|(empty) -|Required field. - -|`limit` -|Number -|`<1;103>` -|10 -| - -|`offset` -|Number -|`<0;+Inf>` -|0 -| - -|=== - -.Response -[source,json] ----- -{ - "data": { - "timeline": [ - { - "timestamp": 1556100060, - "date": "2019-11-27", - "transactionCount": "14447177193385", - "volume": "14447177193385" - } - ], - "distributionByOperation": {}, - "distributionByAmount": {} - }, - "meta": { - "count": 100, - "offset": 25, - "total": 43749 - }, - "links": {} -} ----- - -.Example: Get transaction statistics for past 7 days -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.transactions.statistics", - "params": { - "interval": "day", - "limit": 7 - } -} ----- - -==== get.transactions.schemas -Retrieves transaction schema for certain transaction payloads. - -[cols=",,,,", options="header"] -.Parameters -|=== -|Parameter |Type |Validation |Default |Comment - -|`moduleAssetId` -|String -|`ModuleId:AssetId /[0-9]+:[0-9]+/` -|(empty) -|Transfer transaction: moduleID = 2,assetID = 0 - -|`moduleAssetName` -|String -|`ModuleName:AssetName /[a-z]+:[a-z]+/` -|(empty) -|Transfer transaction: moduleName = token, assetName = transfer - -|=== - -.Response -[source,json] ----- -{ - "data": [ - { - "moduleAssetId": "2:0", - "moduleAssetName": "token:transfer", - "schema": { - ... - } - }, - ], - "meta": { - "count": 10, - "offset": 0, - "total": 10 - }, - "links": {} -} ----- - -.Example: Get transaction schema for token transfer -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.transactions.schemas", - "params": { - "moduleAssetName": "token:transfer" - } -} ----- - -=== Fees -==== get.fees -Requests transaction fee estimates per byte. - -No parameters. - -.Response -[source,json] ----- -{ - "data": { - "feeEstimatePerByte": { - "low": 0, - "medium": 1000, - "high": 2000 - }, - "baseFeeById": { - "2:0": "1000000000" - }, - "baseFeeByName": { - "token:transfer": "1000000000" - }, - "minFeePerByte": 1000, - }, - "meta": { - "lastUpdate": 123456789, - "lastBlockHeight": 25, - "lastBlockId": 1354568 - }, - "links": {} -} ----- - -.Example: Get fees -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.fees", -} ----- -=== Peers -==== get.peers -Retrieves network peers with details based on criteria. - -Supports pagination. - -[cols=",,,,", options="header"] -.Parameters -|=== -|Parameter |Type |Validation |Default |Comment - -|`ip` -|String -|`/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/` -|(empty) -| - -|`networkVersion` -|String -|`/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/` -|(empty) -| - -|`state` -|Array of strings -|`["connected", "disconnected", "any"]` -|`connected` -| - -|`height` -|Number -|`<1;+Inf>` -|(empty) -| - -|`limit` -|Number -|`<1;100>` -|10 -| - -|`offset` -|Number -|`<0;+Inf>` -|0 -| - -|`sort` -|Array of strings -|`["height:asc", "height:desc", "networkVersion:asc", "networkVersion:desc"]` -|`height:desc` -| - -|=== - -.Response -[source,json] ----- -{ - "data": [ - { - "ip": "127.0.0.1", - "port": 4000, - "networkVersion": "2.0", - "state": "connected", - "height": 8350681, - "networkIdentifier": "258974416d58533227c6a3da1b6333f0541b06c65b41e45cf31926847a3db1ea", - "location": { - "countryCode": "DE", - "countryName": "Germany", - "hostname": "host.210.239.23.62.rev.coltfrance.com", - "ip": "210.239.23.62", - } - } - ], - "meta": { - "count": 100, - "offset": 25, - "total": 43749 - }, - "links": {} -} ----- -.Example: Get hosts with a specific IP address -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.peers", - "params": { - "ip": "210.239.23.62" - } -} ----- -=== Network -==== get.network.status -Retrieves network details and constants such as network height, broadhash, fees, reward amount, etc. - -No parameters. - -.Response -[source,json] ----- -{ - "data": { - "height": 27256, - "finalizedHeight": 27112, - "milestone": "0", - "networkVersion": "2.0", - "networkIdentifier": "08ec0e01794b57e5ceaf5203be8c1bda51bcdd39bb6fc516adbe93223f85d630", - "reward": "500000000", - "supply": "10094237000000000", - "registeredModules": ["token", "sequence", "keys", "dpos", "legacyAccount"], - "operations": [ - { "id": "2:0", "name": "token:transfer" } - ... - ], - "blockTime": 10, - "communityIdentifier": "Lisk", - "maxPayloadLength": 15360, - }, - "meta": { - "lastUpdate": 123456789, - "lastBlockHeight": 25, - "lastBlockId": 1354568 - }, - "links": {} -} ----- -.Example -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.network.status" -} ----- -==== get.network.statistics -Retrieves network statistics such as the number of peers, node versions, heights, etc. - -No parameters. - -.Response -[source,json] ----- -{ - "data": { - "basic": { - "connectedPeers": 134, - "disconnectedPeers": 48, - "totalPeers": 181 - }, - "height": { - "7982598": 24 - }, - "networkVersion": { - "2.0": 12, - "2.1": 41 - } - }, - "meta": {}, - "links": {} - } - ----- -.Example -[source,json] ----- -{ - "jsonrpc": "2.0", - "method": "get.network.statistics" -} ----- - -== Off-chain Features - -=== Market Prices - -Retrieves current market prices. - -==== Endpoints - -- HTTP `/api/v2/market/prices` -- RPC `get.market.prices` - -==== Request parameters - -*(no params)* - -==== Response example - -.200 OK -[source,json] ----- -{ - "data": [ - { - "code": "BTC_EUR", - "from": "BTC", - "rate": "53623.7800", - "sources": [ - "binance" - ], - "to": "EUR", - "updateTimestamp": 1634649300 - }, - ], - "meta": { - "count": 7 - } -} ----- - -.503 Service Unavailable -[source,json] ----- -{ - "error": true, - "message": "Service is not ready yet" -} ----- - -=== News Feed Aggregator - -Retrieves recent blogposts from Lisk Blog and Twitter. - -_Supports pagination._ - -==== Endpoints - -* HTTP: `/api/v2/newsfeed` -* RPC: `get.newsfeed` - -==== Request parameters - -[cols="1,1,2", options="header"] -.The Lisk Service microservices -|=== -|Parameter |Type |Validation - -|source -|String -|`/[A-z]+/` \| `*` - -Retrieves all sources by default. - -|limit -|Number -|`<1;100>` - -|offset -|Number -|`<0;+Inf>` - -|=== - -==== Response example - -.200 OK -[source,json] ----- -{ - "data": [ - { - "author": "Lisk", - "content": "On Wednesday, March 3rd, Max Kordek, CEO and Co-founder at Lisk, hosted a live\nmonthly AMA (Ask Max Anything) on Lisk.chat. He answered questions regarding the\nupcoming milestones for Lisk, Lisk.js 2021, marketing plans for this year, and\nmuch more.\n\nThis blog post includes a recap of the live AMA session and features the\nquestions asked by community members, as well as Max’s answers.", - "image_url": "https://lisk.com/sites/default/files/styles/blog_main_image_xl_retina/public/images/2021-04/montly-ama-ask-max-anything-recap-MAIN-V1%402x_0.png?itok=_0lipXxp", - "imageUrl": "https://lisk.com/sites/default/files/styles/blog_main_image_xl_retina/public/images/2021-04/montly-ama-ask-max-anything-recap-MAIN-V1%402x_0.png?itok=_0lipXxp", - "source": "drupal_lisk_general", - "sourceId": "1001", - "timestamp": 1614854580, - "createdAt": 1614854580, - "modifiedAt": 1614854580, - "title": "AMA Recap: Ask Max Anything in March 2021", - "url": "https://lisk.com/blog/events/ama-recap-ask-max-anything-march-2021" - } - ], - "meta": { - "count": 1, - "limit": 1, - "offset": 0 - } -} ----- - -400 Bad Request - -._Invalid parameter_ -[source,json] ----- -``` -{ - "error": true, - "message": "Unknown input parameter(s): " -} ----- - -._Invalid source name_ -[source,json] ----- -{ - "error": true, - "message": "Invalid input: The 'source' field fails to match the required pattern." -} ----- - -.503 Service Unavailable -[source,json] ----- -{ - "error": true, - "message": "Service is not ready yet" -} ----- diff --git a/docs/antora/modules/ROOT/pages/reference/subscribe-api.adoc b/docs/antora/modules/ROOT/pages/reference/subscribe-api.adoc deleted file mode 100644 index 4892ec441..000000000 --- a/docs/antora/modules/ROOT/pages/reference/subscribe-api.adoc +++ /dev/null @@ -1,225 +0,0 @@ -= Subscribe API -:toc: - -The Subscribe API is sometimes called the publish/subscribe or Event-Driven API. -The biggest difference between Event-Driven and regular REST API is not only technical. -In practice, a two-way streaming connection is used, which means that not only can the client request the server for a data update, (and also potential updates) but also the server can notify the client about new data instantly as it arrives. - -Lisk Service leverages the two-way communication approach by utilizing the WebSocket library responsible for updating users about changes in the blockchain network and markets. - -== Access paths and compatibility -The blockchain update API can be accessed by the following path `wss://service.lisk.com/blockchain`. - -If you are interested in accessing the testnet network, this can be accomplished by using the `wss://testnet-service.lisk.com/blockchain` endpoint. - -Important: The Lisk Service WebSocket API uses the `socket.io` library. -This implementation is compatible with the version 2.0 of the socket.io library. -Using the wrong major version might result in a broken connection and messages not being passed. - -The specification below contains numerous examples how to use the API in practice. - -== Endpoint logic -The logic of the endpoints is derived as follows: the method naming is always based on the following pattern: `.`, where the `action` is equivalent to method type performed on the server (ie. `update`) and `entity` is a part of the application logic, ex. `accounts`, `transactions`. - -== Responses -All responses are returned in the JSON format - `application/json`. - -Each API request has the following structure: - -[source,js] ----- -{ - "data": {}, // Contains the requested data - "meta": { - "count": , // number of items - "timestamp": , // timestamp in seconds - ... // other metadata - }, -} ----- - -== Date Format -On the contrary to the original Lisk Core API, all timestamps used by the Lisk Service are in the UNIX timestamp format. -The blockchain dates are always expressed as integers and the epoch date is equal to the number of seconds since `1970-01-01 00:00:00`. - -== Example of a client implementation - -.Node.js -[source,js] ----- -const io = require('socket.io-client'); -const connection = io.connect('wss://service.lisk.com/blockchain', { transports: ['websocket'] }); -connection.on('update.block', (block) => { (...) }); ----- - -== Available subscriptions - -=== update.block -Updates about a newly forged block with all its data. - -.Response -[source,json] ----- -{ - "data": [ - { - "id": "64829af74cdeaa696e4fdef3d7a498b816c8c2e088ecd6a4b59df1df8370c650", - "height": 12464, - "version": 2, - "timestamp": 1622816707, - "generatorAddress": "lskq847deet5ohzujm6s5t9adeotvmdo7pq4y36nz", - "generatorPublicKey": "09bafa700435af1b77ad1743e1e9df4157019dccca2fae0986e8e9431ed3e074", - "generatorUsername": "genesis_45", - "transactionRoot": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "signature": "db2331a34dc93ca87762732108c67d8fe3bf725cf6f5c73290495d5f3a73a80227df36f291e259b7ae720fc0c7d27a213c5faa7cb5524e2c77ee8881ffdb1309", - "previousBlockId": "940c71fed31d45e5087ad63d494224d3417e32f44ddef6c182dfd0258994e3ea", - "numberOfTransactions": 0, - "totalForged": "500000000", - "totalBurnt": "0", - "totalFee": "0", - "reward": "500000000", - "isFinal": false, - "maxHeightPreviouslyForged": 12458, - "maxHeightPrevoted": 12395, - "seedReveal": "de2646e55ae279b17980823c8917078d" - } - ], - "meta": { - "count": 1, - "offset": 0, - "total": 12464 - }, -} ----- - -=== update.round -Updates about the forging delegates for the next round. - -.Response -[source,json] ----- -{ - "data": [ - { - "username": "genesis_51", - "totalVotesReceived": "1006000000000", - "address": "c6d076ed541ca20869a1398a9d28c645ac8a8719", - "minActiveHeight": 27605, - "isConsensusParticipant": true, - "nextForgingTime": 1607521557 - }, - ], - "meta": { - "count": 10, - "offset": 20, - "total": 103 - }, -} ----- - -=== update.forgers -Updates the current forgers' list, so the current forger is in the first position. - - -.Response -[source,json] ----- -{ - "data": [ - { - "username": "genesis_45", - "totalVotesReceived": "1000000000000", - "address": "lskq847deet5ohzujm6s5t9adeotvmdo7pq4y36nz", - "minActiveHeight": 1, - "isConsensusParticipant": true, - "nextForgingTime": 1622816707 - }, - ], - "meta": { - "count": 25, - "offset": 0, - "total": 103 - } -} ----- - -=== update.transactions -Updates about transactions from the last block. - - -.Response -[source,js] ----- -{ - "data": [ - { - "id": "222675625422353767", - "moduleAssetId": "2:0", - "moduleAssetName": "token:transfer", - "fee": "1000000", - "nonce": "0", - "block": { // <1> - "id": "6258354802676165798", - "height": 8350681, - "timestamp": 28227090, - }, - "sender": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "publicKey": "2ca9a7...c23079", - "username": "genesis_51", - }, - "signatures": [ "72c9b2...36c60a" ], - "confirmations": 0, - "asset": { // <2> - "amount": "150000000", - "recipient": { - "address": "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu", - "publicKey": "2ca9a7...c23079", - "username": "genesis_49", - }, - "data": "message" - }, - "relays": 0, - "isPending": false - } - ], - "meta": { - "count": 100, - "offset": 25, - "total": 43749 - }, -} ----- - -<1> Optional. -<2> Asset depends on operation. - -=== update.fee_estimates - -Updates about recent fee estimates. - -.Response -[source,json] ----- -{ - "data": { - "feeEstimatePerByte": { - "low": 0, - "medium": 0, - "high": 0 - }, - "baseFeeById": { - "5:0": "1000000000" - }, - "baseFeeByName": { - "dpos:registerDelegate": "1000000000" - }, - "minFeePerByte": 1000 - }, - "meta": { - "lastUpdate": 1623755357, - "lastBlockHeight": 4996, - "lastBlockId": "03237f191c8acd0077fc897213973c25ed086c1b5e78dccb4cc1c4dd83a00e21" - } -} ----- diff --git a/docs/antora/modules/ROOT/pages/setup/docker.adoc b/docs/antora/modules/ROOT/pages/setup/docker.adoc index 8e52d6d41..72c50881b 100644 --- a/docs/antora/modules/ROOT/pages/setup/docker.adoc +++ b/docs/antora/modules/ROOT/pages/setup/docker.adoc @@ -20,11 +20,11 @@ Mona Bärenfänger Muhammad Talha :url_config: configuration/source.adoc :url_management_pm2: management/source.adoc :url_references_config: configuration/index.adoc - -TIP: Install from source code if you want to customize the codebase of Lisk Service, e.g. if you want to adjust the API to be fully compatible with your blockchain application. +:url_core_setup_npm: lisk-core::setup/npm.adoc As an alternative to the Docker image setup, it is also possible to install Lisk Service from source code. +TIP: Install from source code if you want to customize the codebase of Lisk Service, e.g. if you want to adjust the API to be fully compatible with your blockchain application. + This setup requires more steps than the Docker image installation, however this provides the developer with the possibility to customize the Lisk Service codebase. +[NOTE] +==== +*Pre-requisite* + +Lisk Service is a web application middleware that allows interaction with various blockchain networks based on the Lisk protocol. +It is recommended to set up a blockchain node first, before setting up Lisk Service. + +* To set up a Lisk-Core node, see any of our setup guides, such as xref:{url_core_setup_npm}[]. +* Alternatively, you can set up a sidechain node to connect to Lisk Service. +* Please make sure to set `system.keepEventsForHeights: -1` in the node config before synchronizing the node with the network. +==== + == Prerequisites The following dependencies are required to install and run Lisk Service from Source. @@ -51,9 +64,9 @@ Node.js:: The following system requirements are recommended: Memory:: -* Machines with a minimum of 8 GB RAM for the Mainnet. +* Machines with a minimum of 16 GB RAM for the Mainnet. -* Machines with a minimum of 8 GB RAM for the Testnet. +* Machines with a minimum of 16 GB RAM for the Testnet. Storage:: * Machines with a minimum of 40 GB HDD. @@ -263,12 +276,12 @@ Follow the steps described in the xref:{url_setup_docker_docker}[Prerequisites > .How to install and start Redis with Docker ---- -docker run --name redis_service --port 6379:6379 -d redis:5-alpine +docker run --name redis_service --port 6379:6379 -d redis:7-alpine ---- .How to use the custom redis.conf file ---- -docker run --name redis_service -v /path/to/custom_redis.conf:/usr/local/etc/redis/redis.conf --port 6379:6379 -d redis:5-alpine +docker run --name redis_service -v /path/to/custom_redis.conf:/usr/local/etc/redis/redis.conf --port 6379:6379 -d redis:7-alpine ---- The above commands should be enough to start Redis which is ready to use with Lisk Service. @@ -320,11 +333,6 @@ npm install -g pm2 == Installation -[IMPORTANT] -==== -It is strongly recommended that you synchronize your Lisk Core node with the network **before** starting the Lisk Service. -==== - If you have not already done so, clone the {url_github_service}[lisk-service^] GitHub repository and then navigate into the project folder and check out the latest release. .Clone Lisk Service repository diff --git a/docs/api/version3.md b/docs/api/version3.md index e19c8c286..8a6a6abf4 100644 --- a/docs/api/version3.md +++ b/docs/api/version3.md @@ -169,6 +169,7 @@ _Supports pagination._ "transactionRoot": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "assetsRoot": "6e904b2f678eb3b6c3042acb188a607d903d441d61508d047fe36b3c982995c8", "stateRoot": "95d9b1773b78034b8df9ac741c903b881da761d8ba002a939de28a4b86982c04", + "eventRoot": "7dee8ae1899582aabb0c4b967ceda6874329dba57b5eb23d7c62890917a55cbd", "maxHeightGenerated": 559421, "maxHeightPrevoted": 559434, "validatorsHash": "ad0076aa444f6cda608bb163c3bd77d9bf172f1d2803d53095bc0f277db6bcb3", @@ -336,6 +337,12 @@ _Supports pagination._ "fee": "5166000", "minFee": "165000", "size": 166, + "block": { + "id": "ebb1ba587a1e8385a2aac1317edcb872c05b2b07df6560fabd0f0d23d7d6a0df", + "height": 122721, + "timestamp": 1678989430, + "isFinal": true + }, "sender": { "address": "lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo", "publicKey": "475697e34ae02b394721020d38677a072dbd5c03d61c1c8fdd6563eb66160fa3", @@ -347,21 +354,18 @@ _Supports pagination._ "recipientAddress": "lskezo8pcrbsoceuuu64rpc8w2qkont2ec3n772yu", "data": "" }, - "block": { - "id": "ebb1ba587a1e8385a2aac1317edcb872c05b2b07df6560fabd0f0d23d7d6a0df", - "height": 122721, - "timestamp": 1678989430, - "isFinal": true - }, + "signatures": [ + "48425002226745847e155cf5480478c2336a43bb178439e9058cc2b50e26335cf7c8360b6c6a49793d7ae8d087bc746cab9618655e6a0adba4694cce2015b50f" + ], + "executionStatus": "successful", + "index": 0, "meta": { "recipient": { "address": "lskezo8pcrbsoceuuu64rpc8w2qkont2ec3n772yu", "publicKey": null, "name": null } - }, - "executionStatus": "successful", - "index": 0 + } }, ], "meta": { @@ -757,7 +761,7 @@ _Supports pagination._ | --------- | ---- | ---------- | ------- | ------- | | transactionID | String | `/^\b(?:[A-Fa-f0-9]){64}\b$/` | *(empty)* | | | senderAddress | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | | -| topic | String | `/^\b(?:[0-9a-fA-F]{2,64}\|lsk[a-hjkm-z2-9]{38})(?:,(?:[0-9a-fA-F]{2,64}\|lsk[a-hjkm-z2-9]{38}))*\b$/` | *(empty)* | Can be expressed as a CSV. | +| topic | String | `/^\b(?:(?:04\|05)?[0-9a-fA-F]{64}\|lsk[a-hjkm-z2-9]{38})(?:,(?:(?:04\|05)?[0-9a-fA-F]{64}\|lsk[a-hjkm-z2-9]{38}))*\b$/` | *(empty)* | Can be expressed as a CSV. For performance reasons, we do not allow users to query default topics such as `03`. | | blockID | String | `/^\b(?:[A-Fa-f0-9]){64}\b$/` | *(empty)* | | | height | String | `/^(?:(?:\d+)\|(?::(?:\d+))\|(?:(?:\d+):(?:\d+)?))$/` | *(empty)* | Query by height or a height range. Can be expressed as an interval i.e. `1:20` or `1:` or `:20`. Specified values are inclusive. | | timestamp | String | `/^(?:(?:\d+)\|(?::(?:\d+))\|(?:(?:\d+):(?:\d+)?))$/` | *(empty)* | Query by timestamp or a timestamp range. Can be expressed as an interval i.e. `1000000:2000000` or `1000000:` or `:2000000`. Specified values are inclusive. | @@ -898,7 +902,7 @@ Retrieves user-specific details from the Auth module. | --------- | ---- | ---------- | ------- | ------- | | address | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | Required. | - + #### Response example @@ -956,7 +960,7 @@ Retrieves user-specific details from the Validator module. | --------- | ---- | ---------- | ------- | ------- | | address | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | Required. | - + #### Response example @@ -1055,7 +1059,7 @@ Validates if an entry exists in the Token sub-store for the specified address. | tokenID | String | `/^\b[a-fA-F0-9]{16}\b$/` | *(empty)* | Required. | | address | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | One of address, publicKey or name required. | | publicKey | String | `/^\b(?:[A-Fa-f0-9]){64}\b$/` | *(empty)* | | -| name | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | | +| name | String | `/^[a-z0-9!@$&_.]{1,20}$/` | *(empty)* | | #### Response example @@ -1103,14 +1107,14 @@ Retrieves the balances from the Token sub-store for the specified address. | limit | Number | `[1,100]` | 10 | | | offset | Number | `[0,Inf)` | 0 | | - + #### Response example 200 OK ```jsonc -{ +{ "data": { "tokenID": "0000000000000000", "availableBalance": "1000000000", @@ -1444,7 +1448,7 @@ _Supports pagination._ | --------- | ---- | ---------- | ------- | ------- | | address | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | One of address, publicKey or name required. | | publicKey | String | `/^\b(?:[A-Fa-f0-9]){64}\b$/` | *(empty)* | | -| name | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | | +| name | String | `/^[a-z0-9!@$&_.]{1,20}$/` | *(empty)* | | | limit | Number | `[1,100]` | 10 | | | offset | Number | `[0,Inf)` | 0 | | @@ -1499,7 +1503,7 @@ _Supports pagination._ | --------- | ---- | ---------- | ------- | ------- | | address | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | One of address, publicKey or name required. | | publicKey | String | `/^\b(?:[A-Fa-f0-9]){64}\b$/` | *(empty)* | | -| name | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | | +| name | String | `/^[a-z0-9!@$&_.]{1,20}$/` | *(empty)* | | | limit | Number | `[1,100]` | 10 | | | offset | Number | `[0,Inf)` | 0 | | @@ -1618,7 +1622,7 @@ _Supports pagination._ | --------- | ---- | ---------- | ------- | ------- | | address | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | One of address, publicKey or name required. | | publicKey | String | `/^\b(?:[A-Fa-f0-9]){64}\b$/` | *(empty)* | | -| name | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | | +| name | String | `/^[a-z0-9!@$&_.]{1,20}$/` | *(empty)* | | | search | String | `/^[\w!@$&.]{1,64}$/` | *(empty)* | Case-insensitive search by name, address or publicKey. Supports both partial and full text search. | | limit | Number | `[1,100]` | 10 | | | offset | Number | `[0,Inf)` | 0 | | @@ -1680,7 +1684,7 @@ Retrieves the list of stakes sent by the specified user by their address, public | --------- | ---- | ---------- | ------- | ------- | | address | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | One of address, publicKey or name required. | | publicKey | String | `/^\b(?:[A-Fa-f0-9]){64}\b$/` | *(empty)* | | -| name | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | | +| name | String | `/^[a-z0-9!@$&_.]{1,20}$/` | *(empty)* | | | search | String | `/^[\w!@$&.]{1,64}$/` | *(empty)* | Case-insensitive search by name, address or publicKey. Supports both partial and full text search. | #### Response example @@ -1740,7 +1744,7 @@ _Supports pagination._ | --------- | ---- | ---------- | ------- | ------- | | address | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | One of address, publicKey or name required. | | publicKey | String | `/^\b(?:[A-Fa-f0-9]){64}\b$/` | *(empty)* | | -| name | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | | +| name | String | `/^[a-z0-9!@$&_.]{1,20}$/` | *(empty)* | | | isLocked | Boolean | `[true, false]` | *(empty)* | | | limit | Number | `[1,100]` | 10 | | | offset | Number | `[0,Inf)` | 0 | | @@ -1808,7 +1812,7 @@ _Supports pagination._ | --------- | ---- | ---------- | ------- | ------- | | address | String | `/^lsk[a-hjkm-z2-9]{38}$/` | *(empty)* | One of address, publicKey or name required. | | publicKey | String | `/^\b(?:[A-Fa-f0-9]){64}\b$/` | *(empty)* | | -| name | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | | +| name | String | `/^[a-z0-9!@$&_.]{1,20}$/` | *(empty)* | | | status | String | `/^\b(?:active\|standby\|banned\|punished\|ineligible\|,){0,9}\b$/` | *(empty)* | Can be expressed as a CSV. | | search | String | `/^[\w!@$&.]{1,64}$/` | *(empty)* | Case-insensitive search by name, address or publicKey. Supports both partial and full text search. | | limit | Number | `[1,100]` | 10 | | @@ -2107,8 +2111,7 @@ _Supports pagination._ "count": 100, "offset": 25, "total": 43749 - }, - "links": {} + } } ``` @@ -2268,8 +2271,7 @@ No parameters are required. "2.1": 41 } }, - "meta": {}, - "links": {} + "meta": {} } ``` @@ -5638,7 +5640,7 @@ _Supports pagination._ | Parameter | Type | Validation | Default | Comment | | --------- | ---- | ---------- | ------- | ------- | | chainID | String | `/^\b(?:[a-fA-F0-9]{8}\|,)+\b$/` | *(empty)* | Can be expressed as a CSV. | -| chainName | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | Supports case-insensitive chain name. | +| chainName | String | `/^[A-Za-z0-9!@$&_.]{1,32}$/` | *(empty)* | Supports case-insensitive chain name. | | status | String | `/^\b(?:registered\|activated\|terminated\|unregistered\|,){1,7}\b$/` | *(empty)* | Can be expressed as a CSV. | | search | String | `/^[\w!@$&.]{1,20}$/` | *(empty)* | Case-insensitive search by chain name. Supports both partial and full text search. | | limit | Number | `[1,100]` | 10 | | @@ -5826,6 +5828,7 @@ Proxy request to directly invoke application endpoint. Returns endpoint response "transactionRoot": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "assetsRoot": "6e904b2f678eb3b6c3042acb188a607d903d441d61508d047fe36b3c982995c8", "stateRoot": "95d9b1773b78034b8df9ac741c903b881da761d8ba002a939de28a4b86982c04", + "eventRoot": "7dee8ae1899582aabb0c4b967ceda6874329dba57b5eb23d7c62890917a55cbd", "maxHeightGenerated": 559421, "maxHeightPrevoted": 559434, "validatorsHash": "ad0076aa444f6cda608bb163c3bd77d9bf172f1d2803d53095bc0f277db6bcb3", @@ -5908,7 +5911,7 @@ _Supports pagination._ | Parameter | Type | Validation | Default | Comment | | --------- | ---- | ---------- | ------- | ------- | -| chainName | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | Supports case-insensitive chain name. | +| chainName | String | `/^[A-Za-z0-9!@$&_.]{1,32}$/` | *(empty)* | Supports case-insensitive chain name. | | network | String | `/^\b(?:mainnet\|testnet\|betanet\|devnet\|,){0,7}\b$/` | *(empty)* | Can be expressed as a CSV. | | search | String | `/^[\w!@$&.]{1,20}$/` | *(empty)* | Case-insensitive search by chain name. Supports both partial and full text search. | | limit | Number | `[1,100]` | 10 | | @@ -5965,8 +5968,8 @@ _Supports pagination._ | Parameter | Type | Validation | Default | Comment | | --------- | ---- | ---------- | ------- | ------- | -| chainName | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | Supports case-insensitive chain name. | -| displayName | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | Supports case-insensitive display name. | +| chainName | String | `/^[A-Za-z0-9!@$&_.]{1,32}$/` | *(empty)* | Supports case-insensitive chain name. | +| displayName | String | `/^[a-z0-9!@$&_.]{1,20}$/` | *(empty)* | Supports case-insensitive display name. | | chainID | String | `/^\b(?:[a-fA-F0-9]{8}\|,)+\b$/` | *(empty)* | Can be expressed as a CSV. | | isDefault | Boolean | `[true, false]` | *(empty)* | | | network | String | `/^\b(?:mainnet\|testnet\|betanet\|devnet\|,){0,7}\b$/` | *(empty)* | Can be expressed as a CSV. | @@ -6058,7 +6061,7 @@ _Supports pagination._ | Parameter | Type | Validation | Default | Comment | | --------- | ---- | ---------- | ------- | ------- | -| chainName | String | `/^[\w!@$&.]{3,20}$/` | *(empty)* | Supports case-insensitive chain name. | +| chainName | String | `/^[A-Za-z0-9!@$&_.]{1,32}$/` | *(empty)* | Supports case-insensitive chain name. | | chainID | String | `/^\b[a-fA-F0-9]{8}\b$/` | *(empty)* | | | tokenName | String | `/^[\w!@$&.,]{3,}$/` | *(empty)* | Supports case-insensitive token name. | | tokenID | String | `/^\b([a-fA-F0-9]{16})(,[a-fA-F0-9]{16})*\b$/` | *(empty)* | Can be expressed as a CSV. | diff --git a/docs/api/websocket_subscribe_api.md b/docs/api/websocket_subscribe_api.md index a4e89702c..be66a9b20 100644 --- a/docs/api/websocket_subscribe_api.md +++ b/docs/api/websocket_subscribe_api.md @@ -31,6 +31,8 @@ Lisk Service leverages the two-way communication approach by utilizing the WebSo - [Payload](#payload-6) - [`update.metadata`](#updatemetadata) - [Payload](#payload-7) + - [`update.index.status`](#updateindexstatus) + - [Payload](#payload-8) ## Access paths and compatibility @@ -96,6 +98,7 @@ Updates about a newly generated block. "transactionRoot": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "assetsRoot": "6e904b2f678eb3b6c3042acb188a607d903d441d61508d047fe36b3c982995c8", "stateRoot": "95d9b1773b78034b8df9ac741c903b881da761d8ba002a939de28a4b86982c04", + "eventRoot": "7dee8ae1899582aabb0c4b967ceda6874329dba57b5eb23d7c62890917a55cbd", "maxHeightGenerated": 559421, "maxHeightPrevoted": 559434, "validatorsHash": "ad0076aa444f6cda608bb163c3bd77d9bf172f1d2803d53095bc0f277db6bcb3", @@ -146,6 +149,7 @@ Updates about a deleted block. This usually happens when the chain switches fork "transactionRoot": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "assetsRoot": "6e904b2f678eb3b6c3042acb188a607d903d441d61508d047fe36b3c982995c8", "stateRoot": "95d9b1773b78034b8df9ac741c903b881da761d8ba002a939de28a4b86982c04", + "eventRoot": "7dee8ae1899582aabb0c4b967ceda6874329dba57b5eb23d7c62890917a55cbd", "maxHeightGenerated": 559421, "maxHeightPrevoted": 559434, "validatorsHash": "ad0076aa444f6cda608bb163c3bd77d9bf172f1d2803d53095bc0f277db6bcb3", @@ -366,3 +370,26 @@ Updates about recent metadata changes. "betanet": ["Lisk"], } ``` + +## `update.index.status` + +Updates about index status changes. + +### Payload + +```jsonc +{ + "data": { + "genesisHeight": 0, + "lastBlockHeight": 18779, + "lastIndexedBlockHeight": 13955, + "chainLength": 18780, + "numBlocksIndexed": 13956, + "percentageIndexed": 74.31, + "isIndexingInProgress": true + }, + "meta": { + "lastUpdate": 1700848735 + } +} +``` diff --git a/docs/build_from_source.md b/docs/build_from_source.md index a762f8f5b..040b37b5d 100644 --- a/docs/build_from_source.md +++ b/docs/build_from_source.md @@ -185,4 +185,4 @@ yarn run test It is now possible to use your preferred editor to make changes in the source files. Take a look at the [template](../services/template) project in order to find some suitable examples. -Once completed, it is also possible to build Docker images with `make build` and run them using the method from the main [README](../README.md). +Once completed, it is also possible to build Docker images with `make build-images` and run them using the method from the main [README](../README.md). diff --git a/docs/config_options.md b/docs/config_options.md index b1a1d35d3..b79d5b2ca 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -12,7 +12,7 @@ When using the Docker setup, the default values specified in the [`docker/exampl ```bash # Must be identical for all microservices # Make sure that all microservices are able to connect with the common Redis -SERVICE_BROKER=redis://127.0.0.1:6379/0 +SERVICE_BROKER=redis://lisk:password@127.0.0.1:6379/0 # Number of seconds to wait before returning a RequestTimeout error when it takes too long to return a value. To disable use 0. SERVICE_BROKER_TIMEOUT=10 diff --git a/docs/prerequisites_docker_debian.md b/docs/prerequisites_docker_debian.md index 4b474c48e..6ac08d458 100644 --- a/docs/prerequisites_docker_debian.md +++ b/docs/prerequisites_docker_debian.md @@ -34,6 +34,6 @@ Follow the official [documentation](https://docs.docker.com/compose/install/) to ## Next steps -If you have all dependencies installed properly, it is possible to run pre-build Docker images with Lisk Service. It is also possible to build those images locally by using the `make build` command. +If you have all dependencies installed properly, it is possible to run pre-build Docker images with Lisk Service. It is also possible to build those images locally by using the `make build-images` command. Refer to the main [README](../README.md) file regarding the next steps. diff --git a/docs/prerequisites_docker_macos.md b/docs/prerequisites_docker_macos.md index 800791f30..5e16db3cd 100644 --- a/docs/prerequisites_docker_macos.md +++ b/docs/prerequisites_docker_macos.md @@ -39,6 +39,6 @@ The most recent version of Docker Desktop already contains docker-compose tool. ## Next steps -If you have all dependencies installed properly, it is possible to run pre-build Docker images with Lisk Service. It is also possible to build those images locally by using the `make build` command. +If you have all dependencies installed properly, it is possible to run pre-build Docker images with Lisk Service. It is also possible to build those images locally by using the `make build-images` command. Refer to the main [README](../README.md) file regarding the next steps. diff --git a/docs/prerequisites_docker_ubuntu.md b/docs/prerequisites_docker_ubuntu.md index 158682a36..d555d0fc2 100644 --- a/docs/prerequisites_docker_ubuntu.md +++ b/docs/prerequisites_docker_ubuntu.md @@ -34,6 +34,6 @@ Please follow the official [documentation](https://docs.docker.com/compose/insta ## Next steps -When all of the dependencies are correctly installed, it will then be possible to run pre-build Docker images with Lisk Service. It is also possible to build those images locally by executing the `make build` command from within the `lisk-service` directory. +When all of the dependencies are correctly installed, it will then be possible to run pre-build Docker images with Lisk Service. It is also possible to build those images locally by executing the `make build-images` command from within the `lisk-service` directory. Refer to the main [README](../README.md) file regarding the next steps. diff --git a/docs/redis_authentication.md b/docs/redis_authentication.md new file mode 100644 index 000000000..e8d010671 --- /dev/null +++ b/docs/redis_authentication.md @@ -0,0 +1,74 @@ +# Redis Authentication + +To prevent unauthorized access to the Redis database and mitigate unintended behavior associated with the use of Redis' passwordless `default` user. + +With Lisk Service [v0.7.2](https://github.com/LiskHQ/lisk-service/tree/v0.7.2), similar to our MySQL setup, we now enforce our custom authentication on Redis, by default, with the following credentials: + +> **Username**: `lisk`
+> **Password**: `password` + +To programmatically connect to Redis, please specify the authentication details in the connection string in the following format: + +``` +redis://:@/ +``` +> **Example**: redis://lisk:password@127.0.0.1/0 + +## Setting up new authenticated Redis instances + +- Starting a dockerized Lisk Service instance from scratch should automatically take care of setting up proper authentication on Redis. + +- When self-hosting Redis instances (PM2 users) please look into our following Redis config files: + - [redis.persistent.conf](../docker/redis.persistent.conf) + - [redis.volatile.conf](../docker/redis.volatile.conf) + +When using a custom Redis config, please consider adding the following ACL configurations: + +``` +# ACL rule for a lisk user + +requirepass password +user lisk on allkeys allchannels allcommands >password +user default off +``` + +## Setting up auth on existing passwordless Redis instances + +To set up authentication on your current running Redis instance, execute the following commands after you log in to the Redis CLI: + +``` +CONFIG SET requirepass password +ACL SETUSER lisk on allkeys allchannels allcommands >password +ACL SETUSER default off +``` + +Verify that the changes are applied successfully with the following commands: + +**Executing a command without authentication**: +``` +/data # redis-cli info cpu +NOAUTH Authentication required. +``` + +**Executing a command with the authentication details**: +``` +/data # redis-cli --user lisk --pass password info cpu +Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. +# CPU +used_cpu_sys:1.359498 +used_cpu_user:1.334618 +used_cpu_sys_children:0.001210 +used_cpu_user_children:0.000709 +used_cpu_sys_main_thread:1.358968 +used_cpu_user_main_thread:1.334302 +``` + +> **NOTE**: To ensure smooth operation of Lisk Service post the current change, kindly restart the Redis server after authentication is set up. + +## Using Redis auth-free + +In case, you have an existing passwordless running instance of Redis and want to continue using it, please override all the Redis connection strings via the necessary environment variables either in the `.env` (Docker setup) or the `ecosystem.config.json` (PM2 setup) config files. + +To easily find the necessary environment variables, open the relevant config file, and replace all the instances of `redis://lisk:password@` with `redis://`. Please ensure that the updated environment variables are enabled. + +> **NOTE**: We _**highly recommend**_ using authentication on Redis. diff --git a/ecosystem.config.js b/ecosystem.config.js index 2c634a722..7262ff170 100644 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -26,12 +26,12 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_GATEWAY_REDIS_VOLATILE: 'redis://127.0.0.1:6379/5', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_GATEWAY_REDIS_VOLATILE: 'redis://lisk:password@127.0.0.1:6379/5', ENABLE_HTTP_API: 'http-status,http-version3,http-exports', ENABLE_WS_API: 'blockchain,rpc-v3', GATEWAY_DEPENDENCIES: 'indexer,connector', @@ -75,11 +75,11 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '150M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', SERVICE_APP_REGISTRY_MYSQL: 'mysql://lisk:password@127.0.0.1:3306/lisk', ENABLE_REBUILD_INDEX_AT_INIT: false, // SERVICE_BROKER_TIMEOUT: 10, @@ -107,17 +107,17 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '150M', + max_memory_restart: '1000M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - LISK_APP_WS: 'ws://127.0.0.1:7887', - GEOIP_JSON: 'https://geoip.lisk.com/json', - // ENABLE_BLOCK_CACHING: true, - // EXPIRY_IN_HOURS: 12, + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', // USE_LISK_IPC_CLIENT: true, // LISK_APP_DATA_PATH: '~/.lisk/lisk-core', + // LISK_APP_WS: 'ws://127.0.0.1:7887', + // GEOIP_JSON: 'https://geoip.lisk.com/json', + // ENABLE_BLOCK_CACHING: true, + // EXPIRY_IN_HOURS: 12, // ENABLE_TESTING_MODE: false, // SERVICE_BROKER_TIMEOUT: 10, // SERVICE_LOG_LEVEL: 'info', @@ -127,6 +127,13 @@ module.exports = { // SERVICE_LOG_FILE: false, // DOCKER_HOST: 'local', // GENESIS_BLOCK_URL: 'https://downloads.lisk.com/lisk/mainnet/genesis_block.json.tar.gz', + // CLIENT_INSTANTIATION_MAX_WAIT_TIME: 5000, + // CLIENT_INSTANTIATION_RETRY_INTERVAL: 1, + // CLIENT_ALIVE_ASSUMPTION_TIME: 5 * 1000, + // HEARTBEAT_ACK_MAX_WAIT_TIME: 1000, + // ENDPOINT_INVOKE_MAX_RETRIES: 3, + // ENDPOINT_INVOKE_RETRY_DELAY: 10, + // CONNECTOR_EXIT_DELAY_IN_HOURS: 0, // JOB_INTERVAL_CACHE_CLEANUP: 0, // JOB_SCHEDULE_CACHE_CLEANUP: '0 */12 * * *', // JOB_INTERVAL_REFRESH_PEERS: 60, @@ -147,15 +154,16 @@ module.exports = { autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_INDEXER_CACHE_REDIS: 'redis://127.0.0.1:6379/1', - SERVICE_INDEXER_REDIS_VOLATILE: 'redis://127.0.0.1:6379/2', - SERVICE_MESSAGE_QUEUE_REDIS: 'redis://127.0.0.1:6379/3', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_INDEXER_CACHE_REDIS: 'redis://lisk:password@127.0.0.1:6379/1', + SERVICE_INDEXER_REDIS_VOLATILE: 'redis://lisk:password@127.0.0.1:6379/2', + SERVICE_MESSAGE_QUEUE_REDIS: 'redis://lisk:password@127.0.0.1:6379/3', SERVICE_INDEXER_MYSQL: 'mysql://lisk:password@127.0.0.1:3306/lisk', - ENABLE_DATA_RETRIEVAL_MODE: true, - ENABLE_INDEXING_MODE: true, - ENABLE_PERSIST_EVENTS: false, + // ENABLE_DATA_RETRIEVAL_MODE: true, + // ENABLE_INDEXING_MODE: true, + // ENABLE_PERSIST_EVENTS: false, // ENABLE_APPLY_SNAPSHOT: false, + // DURABILITY_VERIFY_FREQUENCY: 1, // INDEX_SNAPSHOT_URL: '', // ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP: true, // SERVICE_INDEXER_MYSQL_READ_REPLICA: 'mysql://lisk:password@127.0.0.1:3306/lisk', @@ -170,6 +178,8 @@ module.exports = { // LISK_STATIC: 'https://static-data.lisk.com', // DEVNET_MAINCHAIN_URL: 'http://devnet-service.liskdev.net:9901', // ESTIMATES_BUFFER_BYTES_LENGTH: 0, + // ACCOUNT_BALANCE_UPDATE_BATCH_SIZE: 1000, + // INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT: 100000, // JOB_INTERVAL_DELETE_SERIALIZED_EVENTS: 0, // JOB_SCHEDULE_DELETE_SERIALIZED_EVENTS: '*/5 * * * *', // JOB_INTERVAL_REFRESH_VALIDATORS: 0, @@ -186,6 +196,7 @@ module.exports = { // JOB_SCHEDULE_DELETE_FINALIZED_CCU_METADATA: '0 2 * * *', // JOB_INTERVAL_TRIGGER_ACCOUNT_UPDATES: 0, // JOB_SCHEDULE_TRIGGER_ACCOUNT_UPDATES: '*/15 * * * *', + // INVOKE_ALLOWED_METHODS: 'dynamicReward_getExpectedValidatorRewards,token_hasUserAccount,token_getInitializationFees,interoperability_getMinimumMessageFee,txpool_getTransactionsFromPool', }, }, { @@ -198,12 +209,12 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_MESSAGE_QUEUE_REDIS: 'redis://127.0.0.1:6379/3', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_MESSAGE_QUEUE_REDIS: 'redis://lisk:password@127.0.0.1:6379/3', // SERVICE_BROKER_TIMEOUT: 10, // SERVICE_LOG_LEVEL: 'info', // SERVICE_LOG_CONSOLE: false, @@ -211,8 +222,10 @@ module.exports = { // SERVICE_LOG_GELF: false, // SERVICE_LOG_FILE: false, // DOCKER_HOST: 'local', + // INDEX_MISSING_BLOCKS_SKIP_THRESHOLD: 1000, + // INDEX_MISSING_BLOCKS_MAX_SCHEDULE: 25000, // JOB_INTERVAL_INDEX_MISSING_BLOCKS: 0, - // JOB_SCHEDULE_INDEX_MISSING_BLOCKS: '*/15 * * * *', + // JOB_SCHEDULE_INDEX_MISSING_BLOCKS: '*/5 * * * *', }, }, { @@ -225,14 +238,14 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_FEE_ESTIMATOR_CACHE: 'redis://127.0.0.1:6379/1', - ENABLE_FEE_ESTIMATOR_QUICK: true, - ENABLE_FEE_ESTIMATOR_FULL: false, + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_FEE_ESTIMATOR_CACHE: 'redis://lisk:password@127.0.0.1:6379/1', + // ENABLE_FEE_ESTIMATOR_QUICK: true, + // ENABLE_FEE_ESTIMATOR_FULL: false, // FEE_EST_COLD_START_BATCH_SIZE: 1, // FEE_EST_DEFAULT_START_BLOCK_HEIGHT: 1, // FEE_EST_EMA_BATCH_SIZE: 20, @@ -257,14 +270,14 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_STATISTICS_REDIS: 'redis://127.0.0.1:6379/1', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_STATISTICS_REDIS: 'redis://lisk:password@127.0.0.1:6379/1', SERVICE_STATISTICS_MYSQL: 'mysql://lisk:password@127.0.0.1:3306/lisk', - TRANSACTION_STATS_HISTORY_LENGTH_DAYS: 366, + // TRANSACTION_STATS_HISTORY_LENGTH_DAYS: 366, // SERVICE_STATISTICS_MYSQL_READ_REPLICA: 'mysql://reader:password@127.0.0.1:3307/lisk', // SERVICE_BROKER_TIMEOUT: 10, // SERVICE_LOG_LEVEL: 'info', @@ -289,15 +302,14 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_MARKET_REDIS: 'redis://127.0.0.1:6379/2', - SERVICE_MARKET_FIAT_CURRENCIES: 'EUR,USD,CHF,GBP,RUB,PLN,JPY,AUD,GBP,INR', - SERVICE_MARKET_TARGET_PAIRS: - 'LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,LSK_PLN,LSK_JPY,LSK_AUD,LSK_GBP,LSK_INR,BTC_EUR,BTC_USD,BTC_CHF', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_MARKET_REDIS: 'redis://lisk:password@127.0.0.1:6379/2', + // SERVICE_MARKET_FIAT_CURRENCIES: 'EUR,USD,CHF,GBP,RUB,PLN,JPY,AUD,GBP,INR', + // SERVICE_MARKET_TARGET_PAIRS: 'LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,LSK_PLN,LSK_JPY,LSK_AUD,LSK_GBP,LSK_INR,BTC_EUR,BTC_USD,BTC_CHF', // EXCHANGERATESAPI_IO_API_KEY: '' // SERVICE_BROKER_TIMEOUT: 10, // SERVICE_LOG_LEVEL: 'info', @@ -328,12 +340,12 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_EXPORT_REDIS: 'redis://127.0.0.1:6379/3', - SERVICE_EXPORT_REDIS_VOLATILE: 'redis://127.0.0.1:6379/4', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_EXPORT_REDIS: 'redis://lisk:password@127.0.0.1:6379/3', + SERVICE_EXPORT_REDIS_VOLATILE: 'redis://lisk:password@127.0.0.1:6379/4', // SERVICE_EXPORT_PARTIALS: './data/partials', // EXPORT_S3_BUCKET_NAME_PARTIALS: 'partials', // SERVICE_EXPORT_STATIC: './data/static', diff --git a/ecosystem.jenkins.config.js b/ecosystem.jenkins.config.js index a4a4344b8..cff901110 100644 --- a/ecosystem.jenkins.config.js +++ b/ecosystem.jenkins.config.js @@ -26,12 +26,12 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { PORT: 9901, - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_GATEWAY_REDIS_VOLATILE: 'redis://127.0.0.1:6379/3', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_GATEWAY_REDIS_VOLATILE: 'redis://lisk:password@127.0.0.1:6379/3', ENABLE_HTTP_API: 'http-status,http-version3,http-exports', ENABLE_WS_API: 'blockchain,rpc-v3', GATEWAY_DEPENDENCIES: 'indexer,connector', @@ -57,11 +57,11 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '150M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', SERVICE_APP_REGISTRY_MYSQL: 'mysql://lisk:password@127.0.0.1:3306/lisk', ENABLE_REBUILD_INDEX_AT_INIT: false, }, @@ -76,11 +76,11 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '150M', + max_memory_restart: '1000M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', LISK_APP_WS: 'ws://127.0.0.1:7887', GEOIP_JSON: 'https://geoip.lisk.com/json', // USE_LISK_IPC_CLIENT: true, @@ -102,14 +102,15 @@ module.exports = { autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_INDEXER_CACHE_REDIS: 'redis://127.0.0.1:6379/1', - SERVICE_INDEXER_REDIS_VOLATILE: 'redis://127.0.0.1:6379/2', - SERVICE_MESSAGE_QUEUE_REDIS: 'redis://127.0.0.1:6379/3', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_INDEXER_CACHE_REDIS: 'redis://lisk:password@127.0.0.1:6379/1', + SERVICE_INDEXER_REDIS_VOLATILE: 'redis://lisk:password@127.0.0.1:6379/2', + SERVICE_MESSAGE_QUEUE_REDIS: 'redis://lisk:password@127.0.0.1:6379/3', SERVICE_INDEXER_MYSQL: 'mysql://lisk:password@127.0.0.1:3306/lisk', ENABLE_DATA_RETRIEVAL_MODE: true, ENABLE_INDEXING_MODE: true, ENABLE_PERSIST_EVENTS: false, + // INVOKE_ALLOWED_METHODS: 'dynamicReward_getExpectedValidatorRewards,token_hasUserAccount,token_getInitializationFees,interoperability_getMinimumMessageFee,txpool_getTransactionsFromPool', }, }, { @@ -122,12 +123,12 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_MESSAGE_QUEUE_REDIS: 'redis://127.0.0.1:6379/3', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_MESSAGE_QUEUE_REDIS: 'redis://lisk:password@127.0.0.1:6379/3', }, }, { @@ -140,12 +141,12 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_FEE_ESTIMATOR_CACHE: 'redis://127.0.0.1:6379/1', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_FEE_ESTIMATOR_CACHE: 'redis://lisk:password@127.0.0.1:6379/1', ENABLE_FEE_ESTIMATOR_QUICK: true, ENABLE_FEE_ESTIMATOR_FULL: false, }, @@ -160,14 +161,14 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { // --- Remember to set the properties below - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_STATISTICS_REDIS: 'redis://127.0.0.1:6379/1', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_STATISTICS_REDIS: 'redis://lisk:password@127.0.0.1:6379/1', SERVICE_STATISTICS_MYSQL: 'mysql://lisk:password@127.0.0.1:3306/lisk', - TRANSACTION_STATS_HISTORY_LENGTH_DAYS: 366, + // TRANSACTION_STATS_HISTORY_LENGTH_DAYS: 366, }, }, { @@ -180,15 +181,52 @@ module.exports = { log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', watch: false, kill_timeout: 10000, - max_memory_restart: '300M', + max_memory_restart: '250M', autorestart: true, env: { - SERVICE_BROKER: 'redis://127.0.0.1:6379/0', - SERVICE_MARKET_REDIS: 'redis://127.0.0.1:6379/2', - SERVICE_MARKET_FIAT_CURRENCIES: 'EUR,USD,CHF,GBP,RUB', - SERVICE_MARKET_TARGET_PAIRS: 'LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,BTC_EUR,BTC_USD,BTC_CHF', + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_MARKET_REDIS: 'redis://lisk:password@127.0.0.1:6379/2', + // SERVICE_MARKET_FIAT_CURRENCIES: 'EUR,USD,CHF,GBP,RUB', + // SERVICE_MARKET_TARGET_PAIRS: 'LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,BTC_EUR,BTC_USD,BTC_CHF', // EXCHANGERATESAPI_IO_API_KEY: '' }, }, + { + name: 'lisk-service-export', + script: 'app.js', + cwd: './services/export', + pid_file: './pids/service_export.pid', + out_file: './logs/service_export.log', + error_file: './logs/service_export.err', + log_date_format: 'YYYY-MM-DD HH:mm:ss SSS', + watch: false, + kill_timeout: 10000, + max_memory_restart: '250M', + autorestart: true, + env: { + SERVICE_BROKER: 'redis://lisk:password@127.0.0.1:6379/0', + SERVICE_EXPORT_REDIS: 'redis://lisk:password@127.0.0.1:6379/3', + SERVICE_EXPORT_REDIS_VOLATILE: 'redis://lisk:password@127.0.0.1:6379/4', + // SERVICE_EXPORT_PARTIALS: './data/partials', + // EXPORT_S3_BUCKET_NAME_PARTIALS: 'partials', + // SERVICE_EXPORT_STATIC: './data/static', + // EXPORT_S3_BUCKET_NAME_EXPORTS: 'exports', + // SERVICE_BROKER_TIMEOUT: 10, + // SERVICE_LOG_LEVEL: 'info', + // SERVICE_LOG_CONSOLE: false, + // SERVICE_LOG_STDOUT: true, + // SERVICE_LOG_GELF: false, + // SERVICE_LOG_FILE: false, + // DOCKER_HOST: 'local', + // EXPORT_S3_ENDPOINT: 's3.amazonaws.com', + // EXPORT_S3_ACCESS_KEY: '', + // EXPORT_S3_SECRET_KEY: '', + // EXPORT_S3_SESSION_TOKEN: '', + // EXPORT_S3_REGION: 'eu-central-1', + // EXPORT_S3_BUCKET_NAME: 'export', + // JOB_INTERVAL_CACHE_PURGE: 0, + // JOB_SCHEDULE_CACHE_PURGE: '45 4 * * *', + }, + }, ], }; diff --git a/framework/.eslintrc b/framework/.eslintrc index 6f7b008ec..834b7d71c 100644 --- a/framework/.eslintrc +++ b/framework/.eslintrc @@ -20,6 +20,7 @@ "newIsCap": false, "capIsNew": false }], + "no-await-in-loop": "off", "no-loop-func": "off", "no-plusplus": "off", "no-restricted-properties": "off", diff --git a/framework/README.md b/framework/README.md index 5cfa44b9c..786ba2ebe 100644 --- a/framework/README.md +++ b/framework/README.md @@ -41,7 +41,7 @@ const logger = Logger('test-microservice'); // Initialize Microservice framework const app = Microservice({ name: 'test', - transporter: 'redis://127.0.0.1:6379', + transporter: 'redis://lisk:password@127.0.0.1:6379', logger: Logger('test-moleculer'), }); diff --git a/framework/bin/moleculer_client.js b/framework/bin/moleculer_client.js index 35945d8e7..d96391561 100755 --- a/framework/bin/moleculer_client.js +++ b/framework/bin/moleculer_client.js @@ -29,7 +29,7 @@ const cliParams = process.argv[3] ? JSON.parse(process.argv[3]) : undefined; const TIMEOUT = 15 * 1000; const broker = new ServiceBroker({ - transporter: 'redis://127.0.0.1:6379', + transporter: 'redis://lisk:password@127.0.0.1:6379', logLevel: 'info', requestTimeout: 15 * 1000, logger: console, diff --git a/framework/bin/moleculer_subscribe.js b/framework/bin/moleculer_subscribe.js index 496383503..d806bf84c 100644 --- a/framework/bin/moleculer_subscribe.js +++ b/framework/bin/moleculer_subscribe.js @@ -28,7 +28,7 @@ if (process.argv.length < 0) { // const TIMEOUT = 15 * 1000; const broker = new ServiceBroker({ - transporter: 'redis://127.0.0.1:6379', + transporter: 'redis://lisk:password@127.0.0.1:6379', logLevel: 'info', requestTimeout: 15 * 1000, logger: console, diff --git a/framework/bin/socket_io_subscribe_client.js b/framework/bin/socket_io_subscribe_client.js index bc5d3ca19..f565f4864 100644 --- a/framework/bin/socket_io_subscribe_client.js +++ b/framework/bin/socket_io_subscribe_client.js @@ -76,3 +76,4 @@ subscribe('update.round'); subscribe('update.generators'); subscribe('update.fee_estimates'); subscribe('update.metadata'); +subscribe('update.index.status'); diff --git a/framework/constants/ErrorCodes.js b/framework/constants/ErrorCodes.js index af52d6160..c4ca6086b 100644 --- a/framework/constants/ErrorCodes.js +++ b/framework/constants/ErrorCodes.js @@ -31,31 +31,31 @@ const errorCodes = [ ]; const HTTP = { - PARSE_ERROR: [400, 'Bad Request'], - INVALID_REQUEST: [400, 'Bad Request'], - METHOD_NOT_FOUND: [404, 'Not Found'], - INVALID_PARAMS: [400, 'Bad Request'], - SERVER_ERROR: [500, 'Internal Server Error'], - NOT_FOUND: [404, 'Not Found'], - UNAUTHORIZED: [401, 'Unauthorized'], - FORBIDDEN: [403, 'Forbidden'], - TOO_MANY_REQUESTS: [429, 'Too Many Requests'], - NOT_IMPLEMENTED: [501, 'Not Implemented'], - SERVICE_UNAVAILABLE: [503, 'Service Unavailable'], + PARSE_ERROR: [400, 'Bad Request'], + INVALID_REQUEST: [400, 'Bad Request'], + METHOD_NOT_FOUND: [404, 'Not Found'], + INVALID_PARAMS: [400, 'Bad Request'], + SERVER_ERROR: [500, 'Internal Server Error'], + NOT_FOUND: [404, 'Not Found'], + UNAUTHORIZED: [401, 'Unauthorized'], + FORBIDDEN: [403, 'Forbidden'], + TOO_MANY_REQUESTS: [429, 'Too Many Requests'], + NOT_IMPLEMENTED: [501, 'Not Implemented'], + SERVICE_UNAVAILABLE: [503, 'Service Unavailable'], }; const JSON_RPC = { - PARSE_ERROR: [-32700, 'Parse error'], - INVALID_REQUEST: [-32600, 'Invalid Request'], - METHOD_NOT_FOUND: [-32601, 'Method not found'], - INVALID_PARAMS: [-32602, 'Invalid params'], - SERVER_ERROR: [-32000, 'Server error'], - NOT_FOUND: [null, ''], // not defined, use {} response instead - UNAUTHORIZED: [-32600, 'Invalid Request'], - FORBIDDEN: [-32600, 'Invalid Request'], - TOO_MANY_REQUESTS: [-32001, 'Server error'], - NOT_IMPLEMENTED: [-32603, 'Internal error'], - SERVICE_UNAVAILABLE: [-32002, 'Server error'], + PARSE_ERROR: [-32700, 'Parse error'], + INVALID_REQUEST: [-32600, 'Invalid Request'], + METHOD_NOT_FOUND: [-32601, 'Method not found'], + INVALID_PARAMS: [-32602, 'Invalid params'], + SERVER_ERROR: [-32000, 'Server error'], + NOT_FOUND: [null, ''], // not defined, use {} response instead + UNAUTHORIZED: [-32600, 'Invalid Request'], + FORBIDDEN: [-32600, 'Invalid Request'], + TOO_MANY_REQUESTS: [-32001, 'Server error'], + NOT_IMPLEMENTED: [-32603, 'Internal error'], + SERVICE_UNAVAILABLE: [-32002, 'Server error'], }; module.exports = { diff --git a/framework/dist/lisk-service-framework-1.6.0.tgz b/framework/dist/lisk-service-framework-1.6.0.tgz new file mode 100644 index 000000000..156650d44 Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.0.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.1.tgz b/framework/dist/lisk-service-framework-1.6.1.tgz new file mode 100644 index 000000000..61bb776de Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.1.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.10.tgz b/framework/dist/lisk-service-framework-1.6.10.tgz new file mode 100644 index 000000000..4ea22f061 Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.10.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.11.tgz b/framework/dist/lisk-service-framework-1.6.11.tgz new file mode 100644 index 000000000..3713c8dc2 Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.11.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.2.tgz b/framework/dist/lisk-service-framework-1.6.2.tgz new file mode 100644 index 000000000..d9c9202fc Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.2.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.3.tgz b/framework/dist/lisk-service-framework-1.6.3.tgz new file mode 100644 index 000000000..c6184213d Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.3.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.4.tgz b/framework/dist/lisk-service-framework-1.6.4.tgz new file mode 100644 index 000000000..135b1511a Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.4.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.5.tgz b/framework/dist/lisk-service-framework-1.6.5.tgz new file mode 100644 index 000000000..cedef9152 Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.5.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.6.tgz b/framework/dist/lisk-service-framework-1.6.6.tgz new file mode 100644 index 000000000..5c043d72e Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.6.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.7.tgz b/framework/dist/lisk-service-framework-1.6.7.tgz new file mode 100644 index 000000000..d8a956906 Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.7.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.8.tgz b/framework/dist/lisk-service-framework-1.6.8.tgz new file mode 100644 index 000000000..feba812b7 Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.8.tgz differ diff --git a/framework/dist/lisk-service-framework-1.6.9.tgz b/framework/dist/lisk-service-framework-1.6.9.tgz new file mode 100644 index 000000000..a6cb95fa8 Binary files /dev/null and b/framework/dist/lisk-service-framework-1.6.9.tgz differ diff --git a/framework/index.js b/framework/index.js index d79d83617..67537afe5 100644 --- a/framework/index.js +++ b/framework/index.js @@ -33,10 +33,12 @@ module.exports = { sqlite3: require('./src/database/sqlite3'), }, Utils: { + delay: require('./src/delay'), requireAllJs: require('./src/requireAllJs'), + waitForIt: require('./src/waitForIt'), Data: require('./src/data'), fs: require('./src/fs'), - ...(require('./src/data')), + ...require('./src/data'), }, Constants: { ...require('./constants/ErrorCodes'), diff --git a/framework/jest.config.js b/framework/jest.config.js index 933b71ff5..ab0b9f8cb 100644 --- a/framework/jest.config.js +++ b/framework/jest.config.js @@ -2,12 +2,12 @@ // https://jestjs.io/docs/en/configuration.html module.exports = { - // Automatically clear mock calls and instances between every test - clearMocks: false, + // Automatically clear mock calls and instances between every test + clearMocks: false, - // The directory where Jest should output its coverage files - coverageDirectory: 'coverage', + // The directory where Jest should output its coverage files + coverageDirectory: 'coverage', - // The test environment that will be used for testing - testEnvironment: 'node', + // The test environment that will be used for testing + testEnvironment: 'node', }; diff --git a/framework/package.json b/framework/package.json index 98078137e..14b674844 100644 --- a/framework/package.json +++ b/framework/package.json @@ -1,65 +1,66 @@ { - "name": "lisk-service-framework", - "version": "1.5.1", - "description": "Lisk Service Framework", - "keywords": [ - "lisk", - "blockchain" - ], - "homepage": "https://github.com/LiskHQ/lisk-service", - "repository": { - "type": "git", - "url": "git@github.com:LiskHQ/lisk-service.git" - }, - "bugs": { - "url": "https://github.com/LiskHQ/lisk-service/issues" - }, - "author": "Lisk Foundation , lightcurve GmbH ", - "license": "Apache-2.0", - "private": true, - "main": "index.js", - "engines": { - "node": ">=18.16 <=18", - "npm": ">=8.5.0" - }, - "scripts": { - "release:github": "npm pack && mv lisk-service-framework-$npm_package_version.tgz ./dist/lisk-service-framework-$npm_package_version.tgz", - "test:unit": "./node_modules/.bin/jest --config=tests/unit.config.js --detectOpenHandles --forceExit", - "test:functional": "./node_modules/.bin/jest --config=tests/functional.config.js --detectOpenHandles --forceExit" - }, - "bin": { - "moleculer_client": "./bin/moleculer_client.js" - }, - "dependencies": { - "@keyv/redis": "^2.1.2", - "@log4js-node/gelf": "github:MichalTuleja/log4js-node-gelf#89d9933", - "axios": "^0.21.2", - "better-sqlite3": "^8.5.0", - "bull": "^3.29.3", - "debug": "^4.3.1", - "fastest-validator": "^1.10.1", - "http-status-codes": "^1.4.0", - "json-colorizer": "^2.2.2", - "keyv": "^4.0.3", - "keyv-lru": "^3.0.4", - "knex": "^2.5.1", - "log4js": "^6.5.2", - "moleculer": "^0.14.21", - "moleculer-web": "^0.10.4", - "moment": "^2.29.4", - "mysql2": "^3.5.2", - "nats": "^1.4.12", - "node-cron": "^2.0.3", - "prettyjson": "^1.2.1", - "require-all": "^3.0.0", - "signals": "^1.0.0", - "socket.io": "^4.4.1", - "socket.io-client": "^4.0.1", - "stack-trace": "0.0.10" - }, - "devDependencies": { - "jest": "^27.2.5", - "jest-extended": "^1.0.0", - "redis-mock": "^0.49.0" - } + "name": "lisk-service-framework", + "version": "1.6.11", + "description": "Lisk Service Framework", + "keywords": [ + "lisk", + "blockchain" + ], + "homepage": "https://github.com/LiskHQ/lisk-service", + "repository": { + "type": "git", + "url": "git@github.com:LiskHQ/lisk-service.git" + }, + "bugs": { + "url": "https://github.com/LiskHQ/lisk-service/issues" + }, + "author": "Lisk Foundation , lightcurve GmbH ", + "license": "Apache-2.0", + "private": true, + "main": "index.js", + "engines": { + "node": ">=18.16 <=18", + "npm": ">=8.5.0" + }, + "scripts": { + "release:github": "npm pack && mv lisk-service-framework-$npm_package_version.tgz ./dist/lisk-service-framework-$npm_package_version.tgz", + "test:unit": "./node_modules/.bin/jest --config=tests/unit.config.js --detectOpenHandles --forceExit", + "test:functional": "./node_modules/.bin/jest --config=tests/functional.config.js --detectOpenHandles --runInBand --forceExit" + }, + "bin": { + "moleculer_client": "./bin/moleculer_client.js" + }, + "dependencies": { + "@keyv/redis": "^2.1.2", + "@log4js-node/gelf": "github:MichalTuleja/log4js-node-gelf#89d9933", + "axios": "^1.6.0", + "better-sqlite3": "^8.5.0", + "bull": "^3.29.3", + "debug": "^4.3.1", + "fastest-validator": "^1.10.1", + "http-status-codes": "^1.4.0", + "ioredis": "^5.3.2", + "json-colorizer": "^2.2.2", + "keyv": "^4.0.3", + "keyv-lru": "^3.0.4", + "knex": "^2.5.1", + "log4js": "^6.5.2", + "moleculer": "^0.14.21", + "moleculer-web": "^0.10.4", + "moment": "^2.29.4", + "mysql2": "^3.5.2", + "nats": "^1.4.12", + "node-cron": "^2.0.3", + "prettyjson": "^1.2.1", + "require-all": "^3.0.0", + "signals": "^1.0.0", + "socket.io": "^4.4.1", + "socket.io-client": "^4.0.1", + "stack-trace": "0.0.10" + }, + "devDependencies": { + "jest": "^29.7.0", + "jest-extended": "^1.0.0", + "redis-mock": "^0.49.0" + } } diff --git a/framework/src/data.js b/framework/src/data.js index 903398750..77d9f8461 100644 --- a/framework/src/data.js +++ b/framework/src/data.js @@ -13,9 +13,11 @@ * Removal or modification of this copyright notice is prohibited. * */ +/* eslint-disable implicit-arrow-linebreak */ const isObject = item => !!(item !== null && typeof item === 'object'); -const isEmptyArray = array => !!(Array.isArray(array) && (array.length === 0)); -const isEmptyObject = obj => !!(obj !== null && typeof obj === 'object' && Object.keys(obj).length === 0); +const isEmptyArray = array => !!(Array.isArray(array) && array.length === 0); +const isEmptyObject = obj => + !!(obj !== null && typeof obj === 'object' && Object.keys(obj).length === 0); const isString = item => typeof item === 'string'; module.exports = { diff --git a/framework/src/database/mysql/index.js b/framework/src/database/mysql/index.js index f4440da55..567de1293 100644 --- a/framework/src/database/mysql/index.js +++ b/framework/src/database/mysql/index.js @@ -1,4 +1,4 @@ module.exports = { - ...require('./mysql'), - KVStore: { ...require('./kvStore') }, + ...require('./mysql'), + KVStore: { ...require('./kvStore') }, }; diff --git a/framework/src/database/mysql/kvStore.js b/framework/src/database/mysql/kvStore.js index a1390047c..c29a65224 100644 --- a/framework/src/database/mysql/kvStore.js +++ b/framework/src/database/mysql/kvStore.js @@ -40,7 +40,9 @@ const formatValue = (value, type) => { const getKeyValueTable = () => { const getKeyValueTableInstance = getTableInstance( - keyValueStoreSchema, kvStoreConfig.connEndpoint); + keyValueStoreSchema, + kvStoreConfig.connEndpoint, + ); const set = async (key, value, dbTrx) => { const keyValueTable = await getKeyValueTableInstance; @@ -51,7 +53,10 @@ const getKeyValueTable = () => { } const finalValue = value === undefined ? value : String(value); - await keyValueTable.upsert({ key: `${kvStoreConfig.prefix}_${key}`, value: finalValue, type }, dbTrx); + await keyValueTable.upsert( + { key: `${kvStoreConfig.prefix}_${key}`, value: finalValue, type }, + dbTrx, + ); }; const get = async (key, dbTrx) => { diff --git a/framework/src/database/mysql/mysql.js b/framework/src/database/mysql/mysql.js index fbc4e0289..35db79675 100644 --- a/framework/src/database/mysql/mysql.js +++ b/framework/src/database/mysql/mysql.js @@ -13,6 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ +/* eslint-disable operator-linebreak */ const Logger = require('../../logger').get; const logger = Logger(); @@ -35,14 +36,23 @@ const createDBConnection = async connEndpoint => { min: 2, }, log: { - warn(message) { logger.warn(message); }, - error(message) { logger.error(message); }, - deprecate(message) { logger.warn(message); }, - debug(message) { logger.debug(message); }, + warn(message) { + logger.warn(message); + }, + error(message) { + logger.error(message); + }, + deprecate(message) { + logger.warn(message); + }, + debug(message) { + logger.debug(message); + }, }, }); - knex.select(1) + knex + .select(1) .on('query-error', error => { logger.error(error.message); }) @@ -91,7 +101,6 @@ const createTableIfNotExists = async (tableConfig, connEndpoint = CONN_ENDPOINT_ const connPoolKeyTable = `${connPoolKey}/${tableName}`; if (!tablePool[connPoolKeyTable]) { - logger.info(`Creating schema for ${tableName}.`); const knex = await getDBConnection(connEndpoint); await util.loadSchema(knex, tableName, tableConfig); tablePool[connPoolKeyTable] = true; @@ -100,8 +109,12 @@ const createTableIfNotExists = async (tableConfig, connEndpoint = CONN_ENDPOINT_ const getTableInstance = async (...tableParams) => { const tableConfig = tableParams.find(item => typeof item === 'object'); - const connEndpoint = tableParams.find(item => typeof item === 'string' && item.startsWith('mysql:')) || CONN_ENDPOINT_DEFAULT; - const tableName = tableParams.find(item => typeof item === 'string' && !item.startsWith('mysql:')) || tableConfig.tableName; + const connEndpoint = + tableParams.find(item => typeof item === 'string' && item.startsWith('mysql:')) || + CONN_ENDPOINT_DEFAULT; + const tableName = + tableParams.find(item => typeof item === 'string' && !item.startsWith('mysql:')) || + tableConfig.tableName; tableConfig.tableName = tableName; const knex = await getDBConnection(connEndpoint); diff --git a/framework/src/database/sqlite3.js b/framework/src/database/sqlite3.js index 502a414f3..528ebd8bf 100644 --- a/framework/src/database/sqlite3.js +++ b/framework/src/database/sqlite3.js @@ -13,7 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ - +/* eslint-disable nonblock-statement-body-position */ const { mkdir, exists } = require('../fs'); const Logger = require('../logger').get; @@ -38,14 +38,23 @@ const createDBConnection = async (dbDataDir, tableName) => { min: 2, }, log: { - warn(message) { logger.warn(message); }, - error(message) { logger.error(message); }, - deprecate(message) { logger.warn(message); }, - debug(message) { logger.debug(message); }, + warn(message) { + logger.warn(message); + }, + error(message) { + logger.error(message); + }, + deprecate(message) { + logger.warn(message); + }, + debug(message) { + logger.debug(message); + }, }, }); - knex.select(1) + knex + .select(1) .on('query-error', error => { logger.error(error.message); }) @@ -77,7 +86,6 @@ const createTableIfNotExists = async tableConfig => { const { tableName } = tableConfig; if (!tablePool[tableName]) { - logger.info(`Creating schema for ${tableName}`); const knex = await getDBConnection(tableName); await util.loadSchema(knex, tableName, tableConfig); tablePool[tableName] = true; @@ -104,15 +112,17 @@ const getTableInstance = async (tableConfig, dbDataDir = DB_DATA_DIR) => { const query = trx.raw(queryStatement); - if (isDefaultTrx) return query - .then(async result => { - await trx.commit(); - return result; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + if (isDefaultTrx) + return query + .then(async result => { + await trx.commit(); + return result; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return query; }; diff --git a/framework/src/database/util.js b/framework/src/database/util.js index 223a5e749..2829355ad 100644 --- a/framework/src/database/util.js +++ b/framework/src/database/util.js @@ -13,6 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ +/* eslint-disable nonblock-statement-body-position */ const Logger = require('../logger').get; const logger = Logger(); @@ -28,7 +29,7 @@ const escapeUserInput = input => { }; const loadSchema = async (knex, tableName, tableConfig) => { - const { primaryKey, charset, schema, indexes } = tableConfig; + const { primaryKey, charset, schema, indexes, compositeIndexes } = tableConfig; if (await knex.schema.hasTable(tableName)) return knex; @@ -37,7 +38,7 @@ const loadSchema = async (knex, tableName, tableConfig) => { if (charset) table.charset(charset); Object.keys(schema).map(p => { - const kProp = (table[schema[p].type])(p); + const kProp = table[schema[p].type](p); if (schema[p].null === false) kProp.notNullable(); if ('defaultValue' in schema[p]) kProp.defaultTo(schema[p].defaultValue); if (indexes[p]) kProp.index(); @@ -45,11 +46,22 @@ const loadSchema = async (knex, tableName, tableConfig) => { }); table.primary(primaryKey); }) + .then(() => logger.info(`Successfully created table: ${tableName}.`)) .catch(err => { if (err.message.includes(`Table '${tableName}' already exists`)) return; throw err; }); + // eslint-disable-next-line no-restricted-syntax, guard-for-in + for (const key in compositeIndexes) { + const directions = compositeIndexes[key]; + const indexName = `${tableName}_index_${key}`; + const indexColumns = directions.map(dir => `\`${dir.key}\` ${dir.direction}`).join(', '); + + const sqlStatement = `ALTER TABLE ${tableName} ADD INDEX ${indexName} (${indexColumns})`; + await knex.raw(sqlStatement); + } + return knex; }; @@ -66,10 +78,32 @@ const cast = (val, type) => { const resolveQueryParams = params => { const KNOWN_QUERY_PARAMS = [ - 'sort', 'limit', 'offset', 'propBetweens', 'andWhere', 'orWhere', 'orWhereWith', - 'whereIn', 'orWhereIn', 'whereJsonSupersetOf', 'search', 'aggregate', 'distinct', - 'order', 'orSearch', 'whereNull', 'whereNotNull', 'leftOuterJoin', 'rightOuterJoin', + 'sort', + 'limit', + 'offset', + 'propBetweens', + 'andWhere', + 'orWhere', + 'orWhereWith', + 'whereNot', + 'whereIn', + 'whereNotIn', + 'orWhereIn', + 'whereBetween', + 'whereJsonSupersetOf', + 'search', + 'aggregate', + 'distinct', + 'order', + 'orSearch', + 'whereNull', + 'whereNotNull', + 'leftOuterJoin', + 'rightOuterJoin', 'innerJoin', + 'groupBy', + 'orderByRaw', + 'havingRaw', ]; const queryParams = Object.keys(params) .filter(key => !KNOWN_QUERY_PARAMS.includes(key)) @@ -123,23 +157,24 @@ const getTableInstance = (tableConfig, knex) => { const rows = await mapRowsBySchema(rawRows, schema); // Create all queries for `INSERT or UPDATE on Duplicate keys` - const queries = rows.map(row => knex(tableName) - .transacting(trx) - .insert(row) - .onConflict(primaryKey) - .merge(), + // eslint-disable-next-line max-len + const queries = rows.map(row => + // eslint-disable-next-line implicit-arrow-linebreak, newline-per-chained-call + knex(tableName).transacting(trx).insert(row).onConflict(primaryKey).merge(), ); // Perform all queries within a batch together - if (isDefaultTrx) return Promise.all(queries) - .then(async result => { - await trx.commit(); - return result; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + if (isDefaultTrx) + return Promise.all(queries) + .then(async result => { + await trx.commit(); + return result; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return Promise.all(queries); }; @@ -163,6 +198,10 @@ const getTableInstance = (tableConfig, knex) => { query.distinct(distinctParams); } + if (params.groupBy) { + query.groupBy(params.groupBy); + } + if (params.sort) { const [sortColumn, sortDirection] = params.sort.split(':'); query.whereNotNull(sortColumn); @@ -175,6 +214,17 @@ const getTableInstance = (tableConfig, knex) => { query.select(orderColumn).orderBy(orderColumn, orderDirection); } + if (params.orderByRaw) { + params.orderByRaw.forEach(orderBy => { + const [col] = orderBy.split(' '); + query.select(knex.raw(col)).orderByRaw(orderBy); + }); + } + + if (params.havingRaw) { + query.having(knex.raw(params.havingRaw)); + } + if (params.aggregate) { query.sum(`${params.aggregate} as total`); } @@ -196,15 +246,18 @@ const getTableInstance = (tableConfig, knex) => { if (params.propBetweens) { const { propBetweens } = params; - propBetweens.forEach( - propBetween => { - if ('from' in propBetween) query.where(propBetween.property, '>=', propBetween.from); - if ('to' in propBetween) query.where(propBetween.property, '<=', propBetween.to); - if ('greaterThanEqualTo' in propBetween) query.where(propBetween.property, '>=', propBetween.greaterThanEqualTo); - if ('lowerThanEqualTo' in propBetween) query.where(propBetween.property, '<=', propBetween.lowerThanEqualTo); - if ('greaterThan' in propBetween) query.where(propBetween.property, '>', propBetween.greaterThan); - if ('lowerThan' in propBetween) query.where(propBetween.property, '<', propBetween.lowerThan); - }); + propBetweens.forEach(propBetween => { + if ('from' in propBetween) query.where(propBetween.property, '>=', propBetween.from); + if ('to' in propBetween) query.where(propBetween.property, '<=', propBetween.to); + if ('greaterThanEqualTo' in propBetween) + query.where(propBetween.property, '>=', propBetween.greaterThanEqualTo); + if ('lowerThanEqualTo' in propBetween) + query.where(propBetween.property, '<=', propBetween.lowerThanEqualTo); + if ('greaterThan' in propBetween) + query.where(propBetween.property, '>', propBetween.greaterThan); + if ('lowerThan' in propBetween) + query.where(propBetween.property, '<', propBetween.lowerThan); + }); } if (params.whereIn) { @@ -222,12 +275,31 @@ const getTableInstance = (tableConfig, knex) => { query.where(function () { const [val0, ...remValues] = Array.isArray(values) ? values : [values]; this.whereJsonSupersetOf(property, [val0]); - remValues.forEach(value => this.orWhere(function () { - this.whereJsonSupersetOf(property, [value]); - })); + // eslint-disable-next-line implicit-arrow-linebreak + remValues.forEach(value => + // eslint-disable-next-line implicit-arrow-linebreak + this.orWhere(function () { + this.whereJsonSupersetOf(property, [value]); + }), + ); }); } + if (params.whereNotIn) { + const { column, values } = params.whereNotIn; + query.whereNotIn(column, values); + } + + if (params.whereNot) { + const { column, value } = params.whereNot; + query.whereNot(column, value); + } + + if (params.whereBetween) { + const { column, values } = params.whereBetween; + query.whereBetween(column, values); + } + if (params.andWhere) { const { andWhere } = params; query.where(function () { @@ -248,18 +320,34 @@ const getTableInstance = (tableConfig, knex) => { } if (params.leftOuterJoin) { - const { targetTable, leftColumn, rightColumn } = params.leftOuterJoin; - query.leftOuterJoin(targetTable, leftColumn, rightColumn); + params.leftOuterJoin = Array.isArray(params.leftOuterJoin) + ? params.leftOuterJoin + : [params.leftOuterJoin]; + + params.leftOuterJoin.forEach(join => { + const { targetTable, leftColumn, rightColumn } = join; + query.leftOuterJoin(targetTable, leftColumn, rightColumn); + }); } if (params.rightOuterJoin) { - const { targetTable, leftColumn, rightColumn } = params.rightOuterJoin; - query.rightOuterJoin(targetTable, leftColumn, rightColumn); + params.rightOuterJoin = Array.isArray(params.rightOuterJoin) + ? params.rightOuterJoin + : [params.rightOuterJoin]; + + params.rightOuterJoin.forEach(join => { + const { targetTable, leftColumn, rightColumn } = join; + query.rightOuterJoin(targetTable, leftColumn, rightColumn); + }); } if (params.innerJoin) { - const { targetTable, leftColumn, rightColumn } = params.innerJoin; - query.innerJoin(targetTable, leftColumn, rightColumn); + params.innerJoin = Array.isArray(params.innerJoin) ? params.innerJoin : [params.innerJoin]; + + params.innerJoin.forEach(join => { + const { targetTable, leftColumn, rightColumn } = join; + query.innerJoin(targetTable, leftColumn, rightColumn); + }); } if (params.search) { @@ -319,7 +407,8 @@ const getTableInstance = (tableConfig, knex) => { if (params.whereNotNull) { params.whereNotNull = Array.isArray(params.whereNotNull) - ? params.whereNotNull : [params.whereNotNull]; + ? params.whereNotNull + : [params.whereNotNull]; params.whereNotNull.forEach(whereNotNullProperty => { query.whereNotNull(whereNotNullProperty); @@ -337,15 +426,17 @@ const getTableInstance = (tableConfig, knex) => { } const query = queryBuilder(params, tableConfig.primaryKey, false, trx).del(); - if (isDefaultTrx) return query - .then(async result => { - await trx.commit(); - return result; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + if (isDefaultTrx) + return query + .then(async result => { + await trx.commit(); + return result; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return query; }; @@ -358,15 +449,17 @@ const getTableInstance = (tableConfig, knex) => { ids = Array.isArray(ids) ? ids : [ids]; const query = knex(tableName).transacting(trx).whereIn(primaryKey, ids).del(); - if (isDefaultTrx) return query - .then(async result => { - await trx.commit(); - return result; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + if (isDefaultTrx) + return query + .then(async result => { + await trx.commit(); + return result; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return query; }; @@ -378,18 +471,21 @@ const getTableInstance = (tableConfig, knex) => { } const { where, updates } = params; - const query = queryBuilder({ ...where }, tableConfig.primaryKey, false, trx) - .update({ ...updates }); - - if (isDefaultTrx) return query - .then(async result => { - await trx.commit(); - return result; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + const query = queryBuilder({ ...where }, tableConfig.primaryKey, false, trx).update({ + ...updates, + }); + + if (isDefaultTrx) + return query + .then(async result => { + await trx.commit(); + return result; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return query; }; @@ -401,23 +497,28 @@ const getTableInstance = (tableConfig, knex) => { } if (!columns) { - logger.trace(`No SELECT columns specified in the query, returning the '${tableName}' table primary key: '${tableConfig.primaryKey}.'`); + logger.trace( + `No SELECT columns specified in the query, returning the '${tableName}' table primary key: '${tableConfig.primaryKey}.'`, + ); columns = Array.isArray(tableConfig.primaryKey) - ? tableConfig.primaryKey : [tableConfig.primaryKey]; + ? tableConfig.primaryKey + : [tableConfig.primaryKey]; } const query = queryBuilder(params, columns, false, trx); const debugSql = query.toSQL().toNative(); logger.debug(`${debugSql.sql}; bindings: ${debugSql.bindings}.`); - if (isDefaultTrx) return query - .then(async response => { - await trx.commit(); - return response; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + if (isDefaultTrx) + return query + .then(async response => { + await trx.commit(); + return response; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return query; }; @@ -430,9 +531,12 @@ const getTableInstance = (tableConfig, knex) => { } if (!column) { - logger.trace(`No SELECT columns specified in the query, returning the '${tableName}' table primary key: '${tableConfig.primaryKey}.'`); + logger.trace( + `No SELECT columns specified in the query, returning the '${tableName}' table primary key: '${tableConfig.primaryKey}.'`, + ); column = Array.isArray(tableConfig.primaryKey) - ? [tableConfig.primaryKey[0]] : [tableConfig.primaryKey]; + ? [tableConfig.primaryKey[0]] + : [tableConfig.primaryKey]; } else { column = Array.isArray(column) ? [column[0]] : [column]; } @@ -441,16 +545,18 @@ const getTableInstance = (tableConfig, knex) => { const debugSql = query.toSQL().toNative(); logger.debug(`${debugSql.sql}; bindings: ${debugSql.bindings}.`); - if (isDefaultTrx) return query - .then(async result => { - await trx.commit(); - const [totalCount] = result; - return totalCount.count; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + if (isDefaultTrx) + return query + .then(async result => { + await trx.commit(); + const [totalCount] = result; + return totalCount.count; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return query; }; @@ -464,16 +570,18 @@ const getTableInstance = (tableConfig, knex) => { const query = trx.raw(queryStatement); - if (isDefaultTrx) return query - .then(async result => { - await trx.commit(); - const [resultSet] = result; - return resultSet; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + if (isDefaultTrx) + return query + .then(async result => { + await trx.commit(); + const [resultSet] = result; + return resultSet; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return query; }; @@ -487,15 +595,17 @@ const getTableInstance = (tableConfig, knex) => { const query = queryBuilder(params, false, false, trx).increment(params.increment); - if (isDefaultTrx) return query - .then(async result => { - await trx.commit(); - return result; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + if (isDefaultTrx) + return query + .then(async result => { + await trx.commit(); + return result; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return query; }; @@ -508,15 +618,17 @@ const getTableInstance = (tableConfig, knex) => { const query = queryBuilder(params, false, false, trx).decrement(params.decrement); - if (isDefaultTrx) return query - .then(async result => { - await trx.commit(); - return result; - }).catch(async err => { - await trx.rollback(); - logger.error(err.message); - throw err; - }); + if (isDefaultTrx) + return query + .then(async result => { + await trx.commit(); + return result; + }) + .catch(async err => { + await trx.rollback(); + logger.error(err.message); + throw err; + }); return query; }; diff --git a/framework/src/fs.js b/framework/src/fs.js index c7b5b5163..299576203 100644 --- a/framework/src/fs.js +++ b/framework/src/fs.js @@ -19,41 +19,44 @@ const Logger = require('./logger').get; const logger = Logger(); -const mkdir = (dirPath, options = { recursive: true }) => new Promise((resolve, reject) => { - logger.debug(`Creating directory: ${dirPath}`); - return fs.mkdir( - dirPath, - options, - err => { +const mkdir = (dirPath, options = { recursive: true }) => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise((resolve, reject) => { + logger.debug(`Creating directory: ${dirPath}`); + return fs.mkdir(dirPath, options, err => { if (err) { logger.error(`Error when creating directory: ${dirPath}\n`, err.message); return reject(err); } logger.debug(`Successfully created directory: ${dirPath}.`); return resolve(); - }, - ); -}); - -const read = filePath => new Promise((resolve, reject) => { - fs.promises.readFile(filePath, 'utf8') - .then(data => { - resolve(data); - }) - .catch(error => { - reject(error); }); -}); + }); -const write = (filePath, content) => new Promise((resolve, reject) => { - fs.writeFile(filePath, content, err => { - if (err) { - logger.error(err); - return reject(err); - } - return resolve(); +const read = filePath => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise((resolve, reject) => { + fs.promises + .readFile(filePath, 'utf8') + .then(data => { + resolve(data); + }) + .catch(error => { + reject(error); + }); + }); + +const write = (filePath, content) => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise((resolve, reject) => { + fs.writeFile(filePath, content, err => { + if (err) { + logger.error(err); + return reject(err); + } + return resolve(); + }); }); -}); const isFilePathInDirectory = (filePath, directory) => { const absoluteFilePath = path.resolve(filePath); @@ -67,12 +70,11 @@ const isFilePathInDirectory = (filePath, directory) => { return true; }; -const rm = async (deletePath, options) => new Promise(resolve => { - logger.trace(`Removing directory: ${deletePath}.`); - fs.rm( - deletePath, - options, - err => { +const rm = async (deletePath, options) => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise(resolve => { + logger.trace(`Removing directory: ${deletePath}.`); + fs.rm(deletePath, options, err => { if (err) { logger.error(`Error when removing file/directory: ${deletePath}.\n`, err); return resolve(false); @@ -80,34 +82,34 @@ const rm = async (deletePath, options) => new Promise(resolve => { logger.debug(`Successfully removed file/directory: ${deletePath}`); return resolve(true); - }, - ); -}); + }); + }); -const rmdir = async (directoryPath, options) => rm( - directoryPath, - { +const rmdir = async (directoryPath, options) => + // eslint-disable-next-line implicit-arrow-linebreak + rm(directoryPath, { ...options, force: true, maxRetries: 3, recursive: true, retryDelay: 50, - }, -); + }); const fileExists = async filePath => !!(await fs.promises.stat(filePath).catch(() => null)); // eslint-disable-next-line consistent-return -const exists = filePath => new Promise(resolve => { - if (typeof filePath !== 'string') return resolve(false); +const exists = filePath => + // eslint-disable-next-line implicit-arrow-linebreak, consistent-return + new Promise(resolve => { + if (typeof filePath !== 'string') return resolve(false); - fs.access(filePath, err => { - if (err) { - return resolve(false); - } - return resolve(true); + fs.access(filePath, err => { + if (err) { + return resolve(false); + } + return resolve(true); + }); }); -}); const isFile = async filePath => { const isExists = await exists(filePath); @@ -124,54 +126,49 @@ const isFile = async filePath => { return false; }; -const stats = async filePath => new Promise((resolve, reject) => { - fs.stat( - filePath, - (err, stat) => { +const stats = async filePath => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise((resolve, reject) => { + fs.stat(filePath, (err, stat) => { if (err) { logger.error(err); return reject(err); } return resolve(stat); - }, - ); -}); + }); + }); -const getDirectories = async (directoryPath, options = { withFileTypes: true }) => new Promise( - (resolve, reject) => { +// eslint-disable-next-line max-len +const getDirectories = async (directoryPath, options = { withFileTypes: true }) => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise((resolve, reject) => { logger.trace(`Reading sub-directories in: ${directoryPath}.`); - fs.readdir( - directoryPath, - options, - async (err, dirs) => { - if (err) { - logger.error(`Error when reading directory: ${directoryPath}.\n`, err); - return reject(err); - } - - const subDirsWithTime = []; - const subDirectories = dirs.filter(subDir => subDir.isDirectory()); - for (let i = 0; i < subDirectories.length; i++) { - const fullSubDirPath = path.join(directoryPath, subDirectories[i].name); - // eslint-disable-next-line no-await-in-loop - const stat = await stats(fullSubDirPath); - subDirsWithTime.push({ name: fullSubDirPath, time: stat.ctime.getTime() }); - } - - const sortedDirs = subDirsWithTime - .sort((a, b) => b.time - a.time) - .map(file => file.name); - - logger.trace(`Successfully read sub-directories in directory: ${directoryPath}.`); - return resolve(sortedDirs); - }, - ); - }, -); - -const getFiles = async (directoryPath, options = { withFileTypes: true }) => new Promise( - (resolve, reject) => { + fs.readdir(directoryPath, options, async (err, dirs) => { + if (err) { + logger.error(`Error when reading directory: ${directoryPath}.\n`, err); + return reject(err); + } + + const subDirsWithTime = []; + const subDirectories = dirs.filter(subDir => subDir.isDirectory()); + for (let i = 0; i < subDirectories.length; i++) { + const fullSubDirPath = path.join(directoryPath, subDirectories[i].name); + const stat = await stats(fullSubDirPath); + subDirsWithTime.push({ name: fullSubDirPath, time: stat.ctime.getTime() }); + } + + const sortedDirs = subDirsWithTime.sort((a, b) => b.time - a.time).map(file => file.name); + + logger.trace(`Successfully read sub-directories in directory: ${directoryPath}.`); + return resolve(sortedDirs); + }); + }); + +// eslint-disable-next-line max-len +const getFiles = async (directoryPath, options = { withFileTypes: true }) => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise((resolve, reject) => { logger.trace(`Reading files in directory: ${directoryPath}.`); fs.readdir(directoryPath, options, (err, files) => { if (err) { @@ -193,18 +190,20 @@ const getFilesAndDirs = async (directoryPath, options = { withFileTypes: true }) return [...subDirectories, ...filesInDirectory]; }; -const mv = async (oldName, newName) => new Promise((resolve, reject) => { - logger.trace(`Renaming resource: ${oldName} to ${newName}.`); - fs.rename(oldName, newName, err => { - if (err) { - logger.error(`Error while renaming resource: ${oldName} to ${newName}.\n`, err); - return reject(err); - } +const mv = async (oldName, newName) => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise((resolve, reject) => { + logger.trace(`Renaming resource: ${oldName} to ${newName}.`); + fs.rename(oldName, newName, err => { + if (err) { + logger.error(`Error while renaming resource: ${oldName} to ${newName}.\n`, err); + return reject(err); + } - logger.trace(`Successfully renamed resource: ${oldName} to ${newName}.`); - return resolve(); + logger.trace(`Successfully renamed resource: ${oldName} to ${newName}.`); + return resolve(); + }); }); -}); module.exports = { // Directory operations diff --git a/framework/src/http.js b/framework/src/http.js index f61e79bcd..e7541d936 100644 --- a/framework/src/http.js +++ b/framework/src/http.js @@ -59,7 +59,6 @@ const performRequestUntilSuccess = async (url, params) => { let response; do { - /* eslint-disable no-await-in-loop */ response = await performRequest(url, params); const firstErrorCoreDigit = response.status.toString()[0]; if (firstErrorCoreDigit === '1') return response; @@ -68,7 +67,6 @@ const performRequestUntilSuccess = async (url, params) => { --retries; await delay(params.retryDelay || 100); - /* eslint-enable no-await-in-loop */ } while (retries > 0); return response; diff --git a/framework/src/logger.js b/framework/src/logger.js index f6a265657..d90b7cb21 100644 --- a/framework/src/logger.js +++ b/framework/src/logger.js @@ -38,9 +38,13 @@ const configure = config => { categories: { default: { appenders: [], level: LOG_LEVEL } }, }; - const coverPasswords = input => `${input}`.replace( - /(\b(?!:\/\/\b)[^@/$]+(\b!?@)\b)/g, - `${Array(8).join('*')}:${Array(8).join('*')}@`); + /* eslint-disable implicit-arrow-linebreak */ + const coverPasswords = input => + `${input}`.replace( + /(\b(?!:\/\/\b)[^@/$]+(\b!?@)\b)/g, + `${Array(8).join('*')}:${Array(8).join('*')}@`, + ); + /* eslint-enable implicit-arrow-linebreak */ const textLayout = { type: 'pattern', @@ -153,11 +157,11 @@ const getLogger = configuration => { return { trace: debugInstance, debug: debugInstance, - info: () => { }, - warn: () => { }, - error: () => { }, - fatal: () => { }, - mark: () => { }, + info: () => {}, + warn: () => {}, + error: () => {}, + fatal: () => {}, + mark: () => {}, }; }; @@ -165,11 +169,10 @@ const getDebug = entityName => { if (!entityName) entityName = getFileNameWhichCalledGetLogger(); const debugInstance = debug(`${packageName}:${entityName}`); - return [ - 'trace', 'debug', 'info', - 'warn', 'error', 'fatal', - 'mark'] - .reduce((acc, item) => (acc[item] = debugInstance) && acc, {}); + return ['trace', 'debug', 'info', 'warn', 'error', 'fatal', 'mark'].reduce( + (acc, item) => (acc[item] = debugInstance) && acc, + {}, + ); }; // Set default logger config diff --git a/framework/src/mapper.js b/framework/src/mapper.js index 79c43534a..a409a2e4f 100644 --- a/framework/src/mapper.js +++ b/framework/src/mapper.js @@ -23,33 +23,36 @@ const validate = obj => !(isEmptyObj(obj) || isEmptyArr(obj)); const cast = { number: input => Number(input), string: input => String(input), - boolean: input => ((input === '0') ? false : !!input), - isodate: input => (new Date(input)).toISOString(), + boolean: input => (input === '0' ? false : !!input), + isodate: input => new Date(input).toISOString(), epoch: input => Date.parse(input) / 1000, datetime: input => moment(new Date(input)).utc().format('MM-DD-YYYY HH:mm:ss'), - hex: input => (input ? (Buffer.from(input)).toString('hex') : undefined), - base64: input => (input ? (Buffer.from(input)).toString('base64') : undefined), + hex: input => (input ? Buffer.from(input).toString('hex') : undefined), + base64: input => (input ? Buffer.from(input).toString('base64') : undefined), }; const resolvePath = (obj, path) => { try { - const test = (subObj, prop) => (subObj && subObj[prop] !== undefined); + const test = (subObj, prop) => subObj && subObj[prop] !== undefined; return path.split('.').reduce((xs, x) => (test(xs, x) ? xs[x] : undefined), obj); } catch (e) { return undefined; } }; -const mapObject = (rootObj, definition, subObj = rootObj) => Object.keys(definition) - .reduce((acc, key) => { +/* eslint-disable operator-linebreak,implicit-arrow-linebreak */ +// eslint-disable-next-line max-len +const mapObject = (rootObj, definition, subObj = rootObj) => + Object.keys(definition).reduce((acc, key) => { if (definition[key] !== null && typeof definition[key] === 'string') { const [path, type] = definition[key].split(','); - const val = (path === '=') ? subObj[key] : resolvePath(rootObj, path); + const val = path === '=' ? subObj[key] : resolvePath(rootObj, path); acc[key] = val !== undefined && type ? cast[type](val) : val; } else if (Array.isArray(definition[key])) { if (definition[key].length === 2) { const innerDef = definition[key][1]; - const dataSource = (definition[key][0] === '') ? rootObj : resolvePath(rootObj, definition[key][0]); + const dataSource = + definition[key][0] === '' ? rootObj : resolvePath(rootObj, definition[key][0]); if (Array.isArray(dataSource)) { const tempArr = []; dataSource.forEach(item => { @@ -69,14 +72,17 @@ const mapObject = (rootObj, definition, subObj = rootObj) => Object.keys(definit return acc; }, {}); -const mapArray = (rootObj, definition) => definition.reduce((acc, item, i) => { - if (i === 0 && !isObject(item)) acc.push(item); - if (i === 0 && isObject(item)) acc.push(mapObject(rootObj, item)); - if (i === 1 && isObject(item)) { - acc.push(mapObject(rootObj, { [acc[i - 1]]: Object.values(item)[0] })); - } - return acc; -}, []); +const mapArray = (rootObj, definition) => + definition.reduce((acc, item, i) => { + if (i === 0 && !isObject(item)) acc.push(item); + if (i === 0 && isObject(item)) acc.push(mapObject(rootObj, item)); + if (i === 1 && isObject(item)) { + acc.push(mapObject(rootObj, { [acc[i - 1]]: Object.values(item)[0] })); + } + return acc; + }, []); + +/* eslint-enable operator-linebreak,implicit-arrow-linebreak */ /* * The Mapper always follows definition, which means diff --git a/framework/src/microservice.js b/framework/src/microservice.js index de87fd396..2a34864d7 100644 --- a/framework/src/microservice.js +++ b/framework/src/microservice.js @@ -19,9 +19,7 @@ const { ServiceBroker } = require('moleculer'); const cron = require('node-cron'); const requireAllJs = require('./requireAllJs'); const loggerLib = require('./logger'); -const { - isProperObject, -} = require('./data'); +const { isProperObject } = require('./data'); const methodSchema = { name: { type: 'string' }, @@ -69,26 +67,29 @@ const Microservice = (config = {}) => { }); const getBroker = () => broker; - const nop = () => { }; + const nop = () => {}; const addMethod = item => { const validDefinition = validator.validate(item, methodSchema); if (validDefinition !== true) { - logger.warn([ - `Invalid method definition in ${moleculerConfig.name}:`, - `${util.inspect(item)}`, - `${util.inspect(validDefinition)}`, - ].join('\n')); + logger.warn( + [ + `Invalid method definition in ${moleculerConfig.name}:`, + `${util.inspect(item)}`, + `${util.inspect(validDefinition)}`, + ].join('\n'), + ); return false; } try { nop(isProperObject(item.params) ? validator.validate({}, item.params) : true); } catch (err) { - logger.warn([ - `Invalid parameter definition in ${moleculerConfig.name}:`, - `${util.inspect(item)}`, - ].join('\n')); + logger.warn( + [`Invalid parameter definition in ${moleculerConfig.name}:`, `${util.inspect(item)}`].join( + '\n', + ), + ); return false; } @@ -103,11 +104,13 @@ const Microservice = (config = {}) => { const addEvent = event => { const validDefinition = validator.validate(event, eventSchema); if (validDefinition !== true) { - logger.warn([ - `Invalid event definition in ${moleculerConfig.name}:`, - `${util.inspect(event)}`, - `${util.inspect(validDefinition)}`, - ].join('\n')); + logger.warn( + [ + `Invalid event definition in ${moleculerConfig.name}:`, + `${util.inspect(event)}`, + `${util.inspect(validDefinition)}`, + ].join('\n'), + ); return false; } @@ -130,35 +133,43 @@ const Microservice = (config = {}) => { const scheduleJob = async job => { const validDefinition = validator.validate(job, jobSchema); if (validDefinition !== true) { - logger.warn([ - `Invalid event definition in ${moleculerConfig.name}:`, - `${util.inspect(job)}`, - `${util.inspect(validDefinition)}`, - ].join('\n')); + logger.warn( + [ + `Invalid event definition in ${moleculerConfig.name}:`, + `${util.inspect(job)}`, + `${util.inspect(validDefinition)}`, + ].join('\n'), + ); return false; } if (!job.init && !job.controller) { - logger.warn([ - `Invalid event definition in ${moleculerConfig.name}, neither init, nor controller is defined for job:`, - `${util.inspect(job)}`, - `${util.inspect(validDefinition)}`, - ].join('\n')); + logger.warn( + [ + `Invalid event definition in ${moleculerConfig.name}, neither init, nor controller is defined for job:`, + `${util.inspect(job)}`, + `${util.inspect(validDefinition)}`, + ].join('\n'), + ); return false; } - if ((job.controller && !job.schedule && !job.interval)) { - logger.warn([ - `Invalid event definition in ${moleculerConfig.name}, neither schedule, nor interval set:`, - `${util.inspect(job)}`, - `${util.inspect(validDefinition)}`, - ].join('\n')); + if (job.controller && !job.schedule && !job.interval) { + logger.warn( + [ + `Invalid event definition in ${moleculerConfig.name}, neither schedule, nor interval set:`, + `${util.inspect(job)}`, + `${util.inspect(validDefinition)}`, + ].join('\n'), + ); return false; } if ((job.schedule || job.interval) && !job.controller) { - logger.warn([ - `Invalid event definition in ${moleculerConfig.name}, controller is required with schedule or interval:`, - `${util.inspect(job)}`, - `${util.inspect(validDefinition)}`, - ].join('\n')); + logger.warn( + [ + `Invalid event definition in ${moleculerConfig.name}, controller is required with schedule or interval:`, + `${util.inspect(job)}`, + `${util.inspect(validDefinition)}`, + ].join('\n'), + ); return false; } if (job.init) { @@ -189,9 +200,11 @@ const Microservice = (config = {}) => { job: addJob, }; - Object.keys(items) - .forEach(itemGroup => items[itemGroup] - .forEach(item => fnMap[type].call(this, item))); + // eslint-disable-next-line max-len + Object.keys(items).forEach(itemGroup => + // eslint-disable-next-line implicit-arrow-linebreak + items[itemGroup].forEach(item => fnMap[type].call(this, item)), + ); }; const addMethods = folderPath => { @@ -213,22 +226,22 @@ const Microservice = (config = {}) => { broker.createService(serviceConfig); // Start server - return broker - .start() - .then(() => { + return broker.start().then(() => { scheduleJobs(); }); }; - const requestRpc = (method, params) => new Promise((resolve, reject) => { - broker - .call(method, params) - .then(res => resolve(res)) - .catch(err => { - logger.error(`Error occurred! ${err.message}`); - reject(err); - }); - }); + const requestRpc = (method, params) => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise((resolve, reject) => { + broker + .call(method, params) + .then(res => resolve(res)) + .catch(err => { + logger.error(`Error occurred! ${err.message}`); + reject(err); + }); + }); return { addMethods, @@ -240,6 +253,7 @@ const Microservice = (config = {}) => { getBroker, run, requestRpc, + scheduleJob, }; }; diff --git a/framework/src/queue.js b/framework/src/queue.js index 678d90801..b8d241f05 100644 --- a/framework/src/queue.js +++ b/framework/src/queue.js @@ -13,6 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ +/* eslint-disable operator-linebreak */ const BullQueue = require('bull'); const loggerLib = require('./logger'); @@ -26,68 +27,81 @@ const queuePool = {}; const STATS_INTERVAL = 1 * 60 * 1000; // ms const defaultOptions = { - defaultJobOptions: { - attempts: 5, - timeout: 5 * 60 * 1000, // ms - removeOnComplete: true, - }, - settings: {}, + defaultJobOptions: { + attempts: 5, + timeout: 5 * 60 * 1000, // ms + removeOnComplete: true, + removeOnFail: true, + stackTraceLimit: 0, + }, + settings: {}, }; -const queueInstance = (redisEndpoint, jobName = 'defaultJob', jobFn, concurrency = 1, options = defaultOptions) => { - const queueName = 'defaultQueue'; - - if (!queuePool[queueName]) { - queuePool[queueName] = new BullQueue(queueName, - redisEndpoint, - { - prefix: `queue-${packageJson.name}`, - defaultJobOptions: options.defaultJobOptions, - settings: options.settings, - limiter: options.limiter, - }); - - const queue = queuePool[queueName]; - - logger.info(`Initialized queue ${queueName}`); - - queue.on('completed', job => { - logger.debug(`${jobName} job completed ${job.name}`); - job.remove(); - }); - - queue.on('error', err => { - logger.error(`${jobName} job error`, err); - }); - - queue.on('failed', (job, err) => { - logger.warn(`${jobName} job failed`, err.message); - logger.warn(`${jobName} job failed`, err.stack); - }); - - setInterval(async () => { - const jc = await queue.getJobCounts(); - if (Number(jc.waiting) > 0 || Number(jc.active) > 0 - || Number(jc.failed) > 0 || Number(jc.paused) > 0) { - logger.info(`Queue counters: waiting: ${jc.waiting}, active: ${jc.active}, failed: ${jc.failed}, paused: ${jc.paused}`); - } else { - logger.info('Queue counters: All scheduled jobs are done.'); - } - }, STATS_INTERVAL); - } - - const queue = queuePool[queueName]; - - queue.process(jobName, concurrency, jobFn); - - const add = params => queue.add(jobName, params); - - return { - add, - queue, - pause: queue.pause, - resume: queue.resume, - }; +const queueInstance = ( + redisEndpoint, + _queueName = 'defaultQueue', + jobFn, + concurrency = 1, + options = defaultOptions, +) => { + const queueName = _queueName || 'defaultQueue'; + + if (!queuePool[queueName]) { + queuePool[queueName] = new BullQueue(queueName, redisEndpoint, { + prefix: `queue-${packageJson.name}`, + defaultJobOptions: options.defaultJobOptions, + settings: options.settings, + limiter: options.limiter, + }); + + const queue = queuePool[queueName]; + + logger.info(`Initialized queue ${queueName}`); + + queue.on('completed', job => { + logger.debug(`${job.name} job completed.`); + job.remove(); + }); + + queue.on('error', err => { + logger.error(`${queue.name} job error:\n${JSON.stringify(err, null, '\t')}`); + }); + + queue.on('failed', (job, err) => { + logger.warn(`${job.name} job failed with error: ${err.message}`); + logger.debug(`${job.name} job failed with error:\n${err.stack}`); + }); + + setInterval(async () => { + const jc = await queue.getJobCounts(); + if ( + Number(jc.waiting) > 0 || + Number(jc.active) > 0 || + Number(jc.failed) > 0 || + Number(jc.paused) > 0 + ) { + logger.info( + `Queue counters (${queue.name}): waiting: ${jc.waiting}, active: ${jc.active}, failed: ${jc.failed}, paused: ${jc.paused}.`, + ); + } else { + logger.info(`Queue counters (${queue.name}): All scheduled jobs are done.`); + } + }, STATS_INTERVAL); + } + + const queue = queuePool[queueName]; + + const jobName = queueName; + queue.process(jobName, concurrency, jobFn); + + const add = params => queue.add(jobName, params); + + return { + add, + queue, + pause: queue.pause, + resume: queue.resume, + }; }; module.exports = queueInstance; diff --git a/framework/src/requireAllJs.js b/framework/src/requireAllJs.js index 17ecce86e..d6052960b 100644 --- a/framework/src/requireAllJs.js +++ b/framework/src/requireAllJs.js @@ -16,11 +16,13 @@ const path = require('path'); const requireAll = require('require-all'); -const requireAllJs = absolutePath => requireAll({ - filter: /(.+)\.js$/, - excludeDirs: /^\.(git|svn)$/, - recursive: false, - dirname: path.resolve(absolutePath), -}); +const requireAllJs = absolutePath => + // eslint-disable-next-line implicit-arrow-linebreak + requireAll({ + filter: /(.+)\.js$/, + excludeDirs: /^\.(git|svn)$/, + recursive: false, + dirname: path.resolve(absolutePath), + }); module.exports = requireAllJs; diff --git a/framework/src/socketClient.js b/framework/src/socketClient.js index b9faa117a..740882e1d 100644 --- a/framework/src/socketClient.js +++ b/framework/src/socketClient.js @@ -64,7 +64,9 @@ const SocketClient = endpoint => { debug('Reconnection failed'); }); - const emit = (event, data) => new Promise(resolve => { + const emit = (event, data) => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise(resolve => { socket.emit(event, data, answer => { debug( `Emitting socket event ${event} with data ${util.inspect(data)}: ${util.inspect(answer)}`, @@ -73,7 +75,9 @@ const SocketClient = endpoint => { }); }); - const requestRpc = params => new Promise(resolve => { + const requestRpc = params => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise(resolve => { debug(`Emitting RPC request ${params}`); socket.emit('request', params, answer => { debug( diff --git a/services/gateway/shared/waitForIt.js b/framework/src/waitForIt.js similarity index 51% rename from services/gateway/shared/waitForIt.js rename to framework/src/waitForIt.js index 12d2ecbe5..7b933f0d8 100644 --- a/services/gateway/shared/waitForIt.js +++ b/framework/src/waitForIt.js @@ -13,23 +13,25 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { Logger } = require('lisk-service-framework'); +const Logger = require('./logger').get; const logger = Logger(); -const waitForIt = (fn, intervalMs = 1000) => new Promise((resolve) => { - let hInterval; - const checkIfReady = async function () { - try { - const result = await fn(); - clearInterval(hInterval); - resolve(result); - } catch (err) { - logger.debug(`Waiting ${intervalMs}...`); - } - }; - hInterval = setInterval(checkIfReady, intervalMs); - checkIfReady(); -}); +const waitForIt = (fn, intervalMs = 1000, resolveUndefined = false) => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise(resolve => { + // eslint-disable-next-line consistent-return + const timeout = setInterval(async () => { + try { + const result = await fn(); + if (resolveUndefined || result !== undefined) { + clearInterval(timeout); + return resolve(result); + } + } catch (err) { + logger.debug(`Waiting ${intervalMs}...`); + } + }, intervalMs); + }); module.exports = waitForIt; diff --git a/framework/tests/constants/blocks.js b/framework/tests/constants/blocks.js index dd87bdefc..009a0e4ec 100644 --- a/framework/tests/constants/blocks.js +++ b/framework/tests/constants/blocks.js @@ -23,7 +23,8 @@ const emptyBlock = { generatorUsername: 'Donny', payloadLength: 0, payloadHash: '0f7223e4ecd83fc073769842411df416abc12b42b4250effd0eb08f2a7beb6c9', - blockSignature: '463a470819ab5b52bcd3c9b2f2ef20ec73dca067b864881b74fb7b48369b48c4af5cfeb670b16995c7548960451a7726aa1da69fefcdada56c1c782ee7c1742f', + blockSignature: + '463a470819ab5b52bcd3c9b2f2ef20ec73dca067b864881b74fb7b48369b48c4af5cfeb670b16995c7548960451a7726aa1da69fefcdada56c1c782ee7c1742f', confirmations: 0, previousBlockId: 5141834954599138000, numberOfTransactions: 0, @@ -44,7 +45,8 @@ const nonEmptyBlock = { generatorUsername: 'Cara', payloadLength: 15305, payloadHash: '9627009e95c973191ad3936822237cc03a657da7509bc04654abbc918db0942f', - blockSignature: 'bc362a7d7313cedb959220e4b66e76368a74f496eff4e7fb08482e1f279990ad610bdc1844e26f67ced0aba463ebfee7b2add1ac9bec91884989182b981991a2', + blockSignature: + 'bc362a7d7313cedb959220e4b66e76368a74f496eff4e7fb08482e1f279990ad610bdc1844e26f67ced0aba463ebfee7b2add1ac9bec91884989182b981991a2', confirmations: 2, previousBlockId: 903460792049175600, numberOfTransactions: 118, @@ -330,12 +332,8 @@ const nonEmptyBlock = { senderPublicKey: 'e6ed29c261106770f762d3b64182978b369b5a5ee92ac30cf37a009e2650095e', nonce: '577', asset: { - mandatoryKeys: [ - '+22c8b61d06b095f5807b31f3ca6ee6b3fcc3f08103c1d43d6c2f2e30c7075675', - ], - optionalKeys: [ - '+a68ff7efcb63f19d8e434b908ec4a9c3a2c5557ed0a10646f5cc1fe13998bf58', - ], + mandatoryKeys: ['+22c8b61d06b095f5807b31f3ca6ee6b3fcc3f08103c1d43d6c2f2e30c7075675'], + optionalKeys: ['+a68ff7efcb63f19d8e434b908ec4a9c3a2c5557ed0a10646f5cc1fe13998bf58'], numberOfSignatures: 1, }, signatures: [ @@ -738,12 +736,8 @@ const nonEmptyBlock = { senderPublicKey: 'cb70e531da420cde7a5fc29fef30d02fc9e0f08a6277d5da3e8e47f05e5a2667', nonce: '56', asset: { - mandatoryKeys: [ - '+9608291c9fc0226ce0809c6501bcd0c7b32df3f990d08070ca8b72e8d7652c94', - ], - optionalKeys: [ - '+baa6ba370e8f014f5347e4e498a9f519724ba343ae41236ce39f5c84e558d7d4', - ], + mandatoryKeys: ['+9608291c9fc0226ce0809c6501bcd0c7b32df3f990d08070ca8b72e8d7652c94'], + optionalKeys: ['+baa6ba370e8f014f5347e4e498a9f519724ba343ae41236ce39f5c84e558d7d4'], numberOfSignatures: 1, }, signatures: [ @@ -1930,9 +1924,7 @@ const nonEmptyBlock = { '+252afa5ba174ec71e5fa8ffddbf7d67729d3c8c5cb9971d27b850654a1cdefbe', '459eed08f40b1a1c8c61f3eec2df6cbab4ee7aca9d66f9ec7bc6a9a2a2fe4910173ca2e6cc0df2caad3309091be5235eaad6087392a5ebc528b0d05759f10789', ], - optionalKeys: [ - '+430073d7e8262272537f38352b0dd11fea72d4e5f9f70253f7a7ec5e087e8ea3', - ], + optionalKeys: ['+430073d7e8262272537f38352b0dd11fea72d4e5f9f70253f7a7ec5e087e8ea3'], numberOfSignatures: 2, }, signatures: [ @@ -2333,7 +2325,6 @@ const nonEmptyBlock = { confirmations: 2, }, ], - }; const blockWithTransaction = Object.freeze({ @@ -2356,14 +2347,16 @@ const blockWithTransaction = Object.freeze({ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', + signature: + '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', id: 'c1c7c28f5b123135cb5a25f210390f200cd0ed7cc901c0b5997f084e2998c9cc', }, transactions: [ { module: 'token', command: 'transfer', - params: '0a0804000000000000001080c8afa0251a1402604d9e57a39772fa12f2a860ecf6c1e9cae91122075465737420747828c096b102', + params: + '0a0804000000000000001080c8afa0251a1402604d9e57a39772fa12f2a860ecf6c1e9cae91122075465737420747828c096b102', nonce: '0', fee: '100000000', senderPublicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', @@ -2401,7 +2394,8 @@ const decodedBlockWithTransaction = Object.freeze({ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', + signature: + '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', id: 'c1c7c28f5b123135cb5a25f210390f200cd0ed7cc901c0b5997f084e2998c9cc', }, assets: [ @@ -2456,7 +2450,8 @@ const blockWithoutTransaction = Object.freeze({ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: '274585e5e93fefa239766d7ca2720fed9118c6c53e95d3ec8d47bbe6c3194d7fe86d6e2d3e8d440e5637da0d1212d6d58985cbc21eb3536e7e67f56bd0582e06', + signature: + '274585e5e93fefa239766d7ca2720fed9118c6c53e95d3ec8d47bbe6c3194d7fe86d6e2d3e8d440e5637da0d1212d6d58985cbc21eb3536e7e67f56bd0582e06', id: '1363799498535e4e565673855e1a740da99bf910fcaf7b9b9fdf3de7e14a836b', }, transactions: [], @@ -2488,7 +2483,8 @@ const decodedBlockWithoutTransaction = Object.freeze({ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: '274585e5e93fefa239766d7ca2720fed9118c6c53e95d3ec8d47bbe6c3194d7fe86d6e2d3e8d440e5637da0d1212d6d58985cbc21eb3536e7e67f56bd0582e06', + signature: + '274585e5e93fefa239766d7ca2720fed9118c6c53e95d3ec8d47bbe6c3194d7fe86d6e2d3e8d440e5637da0d1212d6d58985cbc21eb3536e7e67f56bd0582e06', id: '1363799498535e4e565673855e1a740da99bf910fcaf7b9b9fdf3de7e14a836b', }, assets: [ @@ -2530,7 +2526,9 @@ const invalidBlock = Object.freeze({ transactions: [], }); -const invalidEncodedBlock = '80210a197db9206180122202d7c1de74a7353a8bea6f1af1620e5bbb9f6170fa4b5376267f8fb3d0e314d322a141348bdced232cf3c74742d8f3d96f436de3220e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8553a20e626f31527f88edd955c3ce5b6eea63f8c1d2fb6ddd329eac0b81d9ab0919b77422041e6b1c0cd1eb398e64a0af03f1b6547096fb005669b35985776d8f1c2564107480050005a20f89987de86e18d8391339c3b92c796ae7d0f7a75f8d57b2392539cc3c39e5ffe6206080012001a006a40efb32235a979a770225cc996b8419c135d10c61a789b5672f9b943637eb735b46cd37b39bfa598831932f15ff7e52a955fbe4756c3e0a83e0da8dd54065e74041a16080f12120a10a21eee43f81c4bc447ee5f'; +// eslint-disable-next-line operator-linebreak +const invalidEncodedBlock = + '80210a197db9206180122202d7c1de74a7353a8bea6f1af1620e5bbb9f6170fa4b5376267f8fb3d0e314d322a141348bdced232cf3c74742d8f3d96f436de3220e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8553a20e626f31527f88edd955c3ce5b6eea63f8c1d2fb6ddd329eac0b81d9ab0919b77422041e6b1c0cd1eb398e64a0af03f1b6547096fb005669b35985776d8f1c2564107480050005a20f89987de86e18d8391339c3b92c796ae7d0f7a75f8d57b2392539cc3c39e5ffe6206080012001a006a40efb32235a979a770225cc996b8419c135d10c61a789b5672f9b943637eb735b46cd37b39bfa598831932f15ff7e52a955fbe4756c3e0a83e0da8dd54065e74041a16080f12120a10a21eee43f81c4bc447ee5f'; const genesisBlock = { header: { diff --git a/framework/tests/constants/transactions.js b/framework/tests/constants/transactions.js index 811445384..3723b3c24 100644 --- a/framework/tests/constants/transactions.js +++ b/framework/tests/constants/transactions.js @@ -15,34 +15,34 @@ */ const tokenTransferTransaction = { - id: 'a22d1d1959af42988746d350d4c21c3ffb81086e116de34d29148e6799bc2e8e', - moduleAssetId: '2:0', - moduleCommand: 'token:transfer', - fee: '143000', - height: 30428, - blockID: '894345162569656300', - timestamp: 1601455680, - nonce: '135', - senderId: 'lskdxc4ta5j43jp9ro3f8zqbxta9fn6jwzjucw7yt', - senderPublicKey: '0fe9a3f1a21b5530f27f87a414b549e79a940bf24fdf2b2f05e7f22aeeecc86a', - isPending: false, + id: 'a22d1d1959af42988746d350d4c21c3ffb81086e116de34d29148e6799bc2e8e', + moduleAssetId: '2:0', + moduleCommand: 'token:transfer', + fee: '143000', + height: 30428, + blockID: '894345162569656300', + timestamp: 1601455680, + nonce: '135', + senderId: 'lskdxc4ta5j43jp9ro3f8zqbxta9fn6jwzjucw7yt', + senderPublicKey: '0fe9a3f1a21b5530f27f87a414b549e79a940bf24fdf2b2f05e7f22aeeecc86a', + isPending: false, }; const registerValidatorTransaction = { - id: 'ffec1b886a46c2055a4ae29b23e2361179a32201556cfaaa66a9a9ae3a608c09', - moduleAssetId: '2:0', - moduleCommand: 'pos:registerValidator', - fee: '143000', - height: 36243, - blockID: '894345162569656300', - timestamp: 1601459680, - nonce: '135', - senderId: 'lskexc4ta5j13jp9ro3f8zqbxta9fn2jwzjucw7ym', - senderPublicKey: '0fa9a3f1a21b5830f27f87a414b549e79a940bf24fdf2b2f05e7a22aeeecc86d', - isPending: false, + id: 'ffec1b886a46c2055a4ae29b23e2361179a32201556cfaaa66a9a9ae3a608c09', + moduleAssetId: '2:0', + moduleCommand: 'pos:registerValidator', + fee: '143000', + height: 36243, + blockID: '894345162569656300', + timestamp: 1601459680, + nonce: '135', + senderId: 'lskexc4ta5j13jp9ro3f8zqbxta9fn2jwzjucw7ym', + senderPublicKey: '0fa9a3f1a21b5830f27f87a414b549e79a940bf24fdf2b2f05e7a22aeeecc86d', + isPending: false, }; module.exports = { - tokenTransferTransaction, - registerValidatorTransaction, + tokenTransferTransaction, + registerValidatorTransaction, }; diff --git a/framework/tests/constants/transactionsSchema.js b/framework/tests/constants/transactionsSchema.js index 405daa35c..68129b7ba 100644 --- a/framework/tests/constants/transactionsSchema.js +++ b/framework/tests/constants/transactionsSchema.js @@ -14,23 +14,21 @@ * */ module.exports = { - tableName: 'transactions', - primaryKey: 'id', - charset: 'utf8mb4', - schema: { - id: { type: 'string', null: false }, - height: { type: 'integer', null: false }, - moduleCommand: { type: 'string', null: false }, - nonce: { type: 'integer', null: false }, - blockID: { type: 'string', null: false }, - timestamp: { type: 'integer', null: false }, - tokenID: { type: 'string', null: true, default: null }, - amount: { type: 'bigInteger', null: true, default: null }, - messageFee: { type: 'bigInteger', null: true, default: null }, - data: { type: 'string', null: true, default: null }, - fee: { type: 'bigInteger', null: false }, - }, - indexes: { - }, - purge: {}, + tableName: 'transactions', + primaryKey: 'id', + schema: { + id: { type: 'string', null: false }, + height: { type: 'integer', null: false }, + moduleCommand: { type: 'string', null: false }, + nonce: { type: 'integer', null: false }, + blockID: { type: 'string', null: false }, + timestamp: { type: 'integer', null: false }, + tokenID: { type: 'string', null: true, default: null }, + amount: { type: 'bigInteger', null: true, default: null }, + messageFee: { type: 'bigInteger', null: true, default: null }, + data: { type: 'string', null: true, default: null }, + fee: { type: 'bigInteger', null: false }, + }, + indexes: {}, + purge: {}, }; diff --git a/framework/tests/functional.config.js b/framework/tests/functional.config.js index 93154d4e4..4cc5e8cd2 100644 --- a/framework/tests/functional.config.js +++ b/framework/tests/functional.config.js @@ -15,12 +15,8 @@ */ module.exports = { verbose: true, - testMatch: [ - '/functional/**/*.test.js', - ], + testMatch: ['/functional/**/*.test.js'], + testTimeout: 120000, testEnvironment: 'node', - setupFilesAfterEnv: [ - 'jest-extended', - '/helpers/setupCustomMatchers.js', - ], + setupFilesAfterEnv: ['jest-extended', '/helpers/setupCustomMatchers.js'], }; diff --git a/framework/tests/functional/database/mysql/mysql.test.js b/framework/tests/functional/database/mysql/mysql.test.js index 114bf03e6..819d78f9d 100644 --- a/framework/tests/functional/database/mysql/mysql.test.js +++ b/framework/tests/functional/database/mysql/mysql.test.js @@ -60,16 +60,24 @@ describe('Test MySQL', () => { describe('Generic MySQL validation', () => { it('should validate if primary key is set', async () => { - const result = await blocksTable.rawQuery(`SHOW KEYS FROM ${tableName} WHERE Key_name = 'PRIMARY'`); + const result = await blocksTable.rawQuery( + `SHOW KEYS FROM ${tableName} WHERE Key_name = 'PRIMARY'`, + ); expect(result.length).toBe(1); expect(result[0].Column_name).toBe(blocksTableSchema.primaryKey); }); it('should validate if composite primary key is set', async () => { - const result = await compositeKeyTable.rawQuery(`SHOW KEYS FROM ${compositeKeyTableName} WHERE Key_name = 'PRIMARY'`); + const result = await compositeKeyTable.rawQuery( + `SHOW KEYS FROM ${compositeKeyTableName} WHERE Key_name = 'PRIMARY'`, + ); expect(result.length).toBe(compositeKeySchema.primaryKey.length); - result - .forEach(res => expect(compositeKeySchema.primaryKey.includes(res.Column_name)).toBe(true)); + + // eslint-disable-next-line max-len + result.forEach(res => + // eslint-disable-next-line implicit-arrow-linebreak + expect(compositeKeySchema.primaryKey.includes(res.Column_name)).toBe(true), + ); }); it('should check if table exists', async () => { @@ -80,7 +88,9 @@ describe('Test MySQL', () => { }); describe('With IMPLICIT DB transaction (auto-commit mode)', () => { - afterAll(() => blocksTable.rawQuery(`TRUNCATE ${tableName}`)); + afterEach(async () => { + await blocksTable.rawQuery(`TRUNCATE ${tableName}`); + }); it('should insert row', async () => { await blocksTable.upsert([emptyBlock]); @@ -90,6 +100,7 @@ describe('Test MySQL', () => { }); it('should get rows', async () => { + await blocksTable.upsert([emptyBlock]); const result = await blocksTable.find({ id: emptyBlock.id }, ['id']); expect(result).toBeInstanceOf(Array); expect(result.length).toBe(1); @@ -111,14 +122,16 @@ describe('Test MySQL', () => { it('should get rows using whereIn', async () => { await blocksTable.upsert([emptyBlock, nonEmptyBlock]); const params = { - whereIn: [{ - property: 'height', - values: [emptyBlock.height, nonEmptyBlock.height], - }, - { - property: 'id', - values: [emptyBlock.id], - }], + whereIn: [ + { + property: 'height', + values: [emptyBlock.height, nonEmptyBlock.height], + }, + { + property: 'id', + values: [emptyBlock.id], + }, + ], }; const result = await blocksTable.find(params, ['id']); expect(result).toBeInstanceOf(Array); @@ -131,14 +144,16 @@ describe('Test MySQL', () => { it('should get rows using whereIn with composite table', async () => { await compositeKeyTable.upsert([emptyBlock, nonEmptyBlock]); const params = { - whereIn: [{ - property: 'height', - values: [emptyBlock.height, nonEmptyBlock.height], - }, - { - property: 'id', - values: [emptyBlock.id], - }], + whereIn: [ + { + property: 'height', + values: [emptyBlock.height, nonEmptyBlock.height], + }, + { + property: 'id', + values: [emptyBlock.id], + }, + ], }; const result = await compositeKeyTable.find(params); expect(result).toBeInstanceOf(Array); @@ -212,6 +227,7 @@ describe('Test MySQL', () => { }); it('should get row count', async () => { + await blocksTable.upsert([emptyBlock, nonEmptyBlock]); const count = await blocksTable.count(); expect(count).toBe(2); }); @@ -219,14 +235,16 @@ describe('Test MySQL', () => { it('should get row count using whereIn', async () => { await blocksTable.upsert([emptyBlock, nonEmptyBlock]); const params = { - whereIn: [{ - property: 'height', - values: [emptyBlock.height, nonEmptyBlock.height], - }, - { - property: 'id', - values: [emptyBlock.id], - }], + whereIn: [ + { + property: 'height', + values: [emptyBlock.height, nonEmptyBlock.height], + }, + { + property: 'id', + values: [emptyBlock.id], + }, + ], }; const result = await blocksTable.count(params); expect(result).toBe(1); @@ -292,14 +310,16 @@ describe('Test MySQL', () => { it('should get row count using whereIn and whereNull', async () => { await blocksTable.upsert([emptyBlock, nonEmptyBlock]); const params = { - whereIn: [{ - property: 'height', - values: [emptyBlock.height, nonEmptyBlock.height], - }, - { - property: 'id', - values: [emptyBlock.id], - }], + whereIn: [ + { + property: 'height', + values: [emptyBlock.height, nonEmptyBlock.height], + }, + { + property: 'id', + values: [emptyBlock.id], + }, + ], whereNull: ['isFinal'], }; const result = await blocksTable.count(params); @@ -312,6 +332,7 @@ describe('Test MySQL', () => { }); it('should increment column value', async () => { + await blocksTable.upsert([emptyBlock]); const [currentBlock] = await blocksTable.find({ id: emptyBlock.id }, ['timestamp']); const currentTimestamp = currentBlock.timestamp; @@ -326,6 +347,7 @@ describe('Test MySQL', () => { }); it('should decrement column value', async () => { + await blocksTable.upsert([emptyBlock]); const [currentBlock] = await blocksTable.find({ id: emptyBlock.id }, ['timestamp']); const currentTimestamp = currentBlock.timestamp; @@ -340,12 +362,16 @@ describe('Test MySQL', () => { }); it('should delete row by primary key', async () => { + await blocksTable.upsert([emptyBlock, nonEmptyBlock]); const [existingBlock] = await blocksTable.find(); const existingBlockId = existingBlock[`${blocksTableSchema.primaryKey}`]; const count = await blocksTable.deleteByPrimaryKey([existingBlockId]); expect(count).toEqual(1); - const result = await blocksTable.find({ [blocksTableSchema.primaryKey]: existingBlock[blocksTableSchema.primaryKey] }, ['id']); + const result = await blocksTable.find( + { [blocksTableSchema.primaryKey]: existingBlock[blocksTableSchema.primaryKey] }, + ['id'], + ); expect(result.length).toBe(0); expect(result.every(b => b.id !== existingBlock.id)).toBeTruthy(); }); @@ -356,7 +382,9 @@ describe('Test MySQL', () => { const existingBlockCount = await blocksTable.count(); const existingIds = existingBlock.map(block => block.id); - const numAffectedRows = await blocksTable.delete({ whereIn: { property: 'id', values: existingIds } }); + const numAffectedRows = await blocksTable.delete({ + whereIn: { property: 'id', values: existingIds }, + }); expect(numAffectedRows).toEqual(existingBlockCount); const count = await blocksTable.count({}); @@ -369,7 +397,9 @@ describe('Test MySQL', () => { const existingBlockCount = await blocksTable.count(); const existingId = existingBlock.map(block => block.id); - const numAffectedRows = await blocksTable.delete({ whereIn: { property: 'id', values: existingId } }); + const numAffectedRows = await blocksTable.delete({ + whereIn: { property: 'id', values: existingId }, + }); expect(numAffectedRows).toEqual(existingBlockCount); const count = await blocksTable.count({}); @@ -398,6 +428,7 @@ describe('Test MySQL', () => { }); it('should execute update method', async () => { + await blocksTable.upsert([emptyBlock]); const [retrievedBlock] = await blocksTable.find({ id: emptyBlock.id }, ['timestamp']); expect(retrievedBlock.timestamp).toBe(emptyBlock.timestamp); @@ -534,7 +565,10 @@ describe('Test MySQL', () => { }; // Perform the left outer join - const result = await blocksTable.find(params, [`${tableName}.height`, `${transactionsTableName}.id`]); + const result = await blocksTable.find(params, [ + `${tableName}.height`, + `${transactionsTableName}.id`, + ]); // Assert the result expect(result).toBeInstanceOf(Array); @@ -562,7 +596,10 @@ describe('Test MySQL', () => { }; // Perform the right outer join - const result = await transactionsTable.find(params, [`${tableName}.height`, `${transactionsTableName}.id`]); + const result = await transactionsTable.find(params, [ + `${tableName}.height`, + `${transactionsTableName}.id`, + ]); // Assert the result expect(result).toBeInstanceOf(Array); @@ -590,7 +627,10 @@ describe('Test MySQL', () => { }; // Perform the inner join - const result = await transactionsTable.find(params, [`${tableName}.height`, `${transactionsTableName}.id`]); + const result = await transactionsTable.find(params, [ + `${tableName}.height`, + `${transactionsTableName}.id`, + ]); // Assert the result expect(result).toBeInstanceOf(Array); @@ -639,7 +679,10 @@ describe('Test MySQL', () => { allowWildCards: true, }, }; - const result = await transactionsTable.find(params, [`${transactionsTableName}.id`, `${transactionsTableName}.moduleCommand`]); + const result = await transactionsTable.find(params, [ + `${transactionsTableName}.id`, + `${transactionsTableName}.moduleCommand`, + ]); expect(result).toBeInstanceOf(Array); expect(result.length).toBe(1); @@ -657,7 +700,10 @@ describe('Test MySQL', () => { allowWildCards: true, }, }; - const result = await transactionsTable.find(params, [`${transactionsTableName}.id`, `${transactionsTableName}.moduleCommand`]); + const result = await transactionsTable.find(params, [ + `${transactionsTableName}.id`, + `${transactionsTableName}.moduleCommand`, + ]); expect(result).toBeInstanceOf(Array); expect(result.length).toBe(1); @@ -675,7 +721,10 @@ describe('Test MySQL', () => { allowWildCards: true, }, }; - const result = await transactionsTable.find(params, [`${transactionsTableName}.id`, `${transactionsTableName}.moduleCommand`]); + const result = await transactionsTable.find(params, [ + `${transactionsTableName}.id`, + `${transactionsTableName}.moduleCommand`, + ]); expect(result).toBeInstanceOf(Array); expect(result.length).toBe(1); @@ -711,10 +760,38 @@ describe('Test MySQL', () => { expect(result).toBeInstanceOf(Array); expect(result.length).toBe(0); }); + + it('should apply HAVING clause with havingRaw', async () => { + await blocksTable.upsert([emptyBlock, nonEmptyBlock]); + + const params = { + groupBy: 'height', + havingRaw: `height < ${Math.max(emptyBlock.height, nonEmptyBlock.height)}`, + }; + + const result = await blocksTable.find(params, ['id', 'height']); + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(1); + }); + + it('should apply complex HAVING clause with havingRaw', async () => { + await blocksTable.upsert([emptyBlock, nonEmptyBlock]); + + const params = { + groupBy: 'height', + havingRaw: `SUM(height) < ${Math.max(emptyBlock.height, nonEmptyBlock.height)}`, + }; + + const result = await blocksTable.find(params, ['id', 'height']); + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(1); + }); }); describe('With EXPLICIT DB transaction (non-auto commit mode)', () => { - afterAll(() => blocksTable.rawQuery(`TRUNCATE ${tableName}`)); + afterEach(async () => { + await blocksTable.rawQuery(`TRUNCATE ${tableName}`); + }); it('should insert row', async () => { const connection = await getDBConnection(); @@ -727,6 +804,11 @@ describe('Test MySQL', () => { }); it('should get rows', async () => { + const connection = await getDBConnection(); + const trx = await startDBTransaction(connection); + await blocksTable.upsert([emptyBlock], trx); + await commitDBTransaction(trx); + const result = await blocksTable.find({ id: emptyBlock.id }, ['id']); expect(result).toBeInstanceOf(Array); expect(result.length).toBe(1); @@ -742,14 +824,16 @@ describe('Test MySQL', () => { await commitDBTransaction(trx); const params = { - whereIn: [{ - property: 'height', - values: [emptyBlock.height, nonEmptyBlock.height], - }, - { - property: 'id', - values: [emptyBlock.id], - }], + whereIn: [ + { + property: 'height', + values: [emptyBlock.height, nonEmptyBlock.height], + }, + { + property: 'id', + values: [emptyBlock.id], + }, + ], }; const result = await blocksTable.find(params, ['id']); expect(result).toBeInstanceOf(Array); @@ -782,14 +866,16 @@ describe('Test MySQL', () => { it('should get rows using whereNotNull and whereIn', async () => { await blocksTable.upsert([emptyBlock, nonEmptyBlock]); const params = { - whereIn: [{ - property: 'height', - values: [emptyBlock.height, nonEmptyBlock.height], - }, - { - property: 'id', - values: [emptyBlock.id], - }], + whereIn: [ + { + property: 'height', + values: [emptyBlock.height, nonEmptyBlock.height], + }, + { + property: 'id', + values: [emptyBlock.id], + }, + ], whereNotNull: ['generatorPublicKey'], }; const result = await blocksTable.find(params, ['id']); @@ -824,7 +910,7 @@ describe('Test MySQL', () => { it('should sort the rows in ascending order based on their height', async () => { const connection = await getDBConnection(); const trx = await startDBTransaction(connection); - await blocksTable.upsert([{ ...emptyBlock, size: 50 }], trx); + await blocksTable.upsert([{ ...emptyBlock, size: 50 }, nonEmptyBlock], trx); await commitDBTransaction(trx); const result = await blocksTable.find({ sort: 'height:asc' }); @@ -836,7 +922,7 @@ describe('Test MySQL', () => { it('should sort the rows in descending order based on their height', async () => { const connection = await getDBConnection(); const trx = await startDBTransaction(connection); - await blocksTable.upsert([{ ...emptyBlock, size: 50 }], trx); + await blocksTable.upsert([{ ...emptyBlock, size: 50 }, nonEmptyBlock], trx); await commitDBTransaction(trx); const result = await blocksTable.find({ sort: 'height:desc' }); @@ -848,7 +934,7 @@ describe('Test MySQL', () => { it('should order the rows in ascending order based on their height', async () => { const connection = await getDBConnection(); const trx = await startDBTransaction(connection); - await blocksTable.upsert([{ ...emptyBlock, size: 50 }], trx); + await blocksTable.upsert([{ ...emptyBlock, size: 50 }, nonEmptyBlock], trx); await commitDBTransaction(trx); const result = await blocksTable.find({ order: 'height:asc' }); @@ -860,7 +946,7 @@ describe('Test MySQL', () => { it('should order the rows in descending order based on their height', async () => { const connection = await getDBConnection(); const trx = await startDBTransaction(connection); - await blocksTable.upsert([{ ...emptyBlock, size: 50 }], trx); + await blocksTable.upsert([{ ...emptyBlock, size: 50 }, nonEmptyBlock], trx); await commitDBTransaction(trx); const result = await blocksTable.find({ order: 'height:desc' }); @@ -872,7 +958,7 @@ describe('Test MySQL', () => { it('should order the rows in ascending order based on their height using orderByRaw query', async () => { const connection = await getDBConnection(); const trx = await startDBTransaction(connection); - await blocksTable.upsert([{ ...emptyBlock, size: 50 }], trx); + await blocksTable.upsert([{ ...emptyBlock, size: 50 }, nonEmptyBlock], trx); await commitDBTransaction(trx); const result = await blocksTable.find({ orderByRaw: ['height asc'] }); @@ -884,7 +970,7 @@ describe('Test MySQL', () => { it('should order the rows in descending order based on their height', async () => { const connection = await getDBConnection(); const trx = await startDBTransaction(connection); - await blocksTable.upsert([{ ...emptyBlock, size: 50 }], trx); + await blocksTable.upsert([{ ...emptyBlock, size: 50 }, nonEmptyBlock], trx); await commitDBTransaction(trx); const result = await blocksTable.find({ orderByRaw: ['height desc'] }); @@ -894,6 +980,11 @@ describe('Test MySQL', () => { }); it('should get row count', async () => { + const connection = await getDBConnection(); + const trx = await startDBTransaction(connection); + await blocksTable.upsert([emptyBlock, nonEmptyBlock], trx); + await commitDBTransaction(trx); + const count = await blocksTable.count(); expect(count).toBe(2); }); @@ -905,14 +996,16 @@ describe('Test MySQL', () => { await commitDBTransaction(trx); const params = { - whereIn: [{ - property: 'height', - values: [emptyBlock.height, nonEmptyBlock.height], - }, - { - property: 'id', - values: [emptyBlock.id], - }], + whereIn: [ + { + property: 'height', + values: [emptyBlock.height, nonEmptyBlock.height], + }, + { + property: 'id', + values: [emptyBlock.id], + }, + ], }; const result = await blocksTable.count(params); expect(result).toBe(1); @@ -925,14 +1018,16 @@ describe('Test MySQL', () => { await commitDBTransaction(trx); const params = { - whereIn: [{ - property: 'height', - values: [emptyBlock.height, nonEmptyBlock.height], - }, - { - property: 'id', - values: [emptyBlock.id], - }], + whereIn: [ + { + property: 'height', + values: [emptyBlock.height, nonEmptyBlock.height], + }, + { + property: 'id', + values: [emptyBlock.id], + }, + ], }; const result = await blocksTable.count(params, 'height'); expect(result).toBe(1); @@ -944,12 +1039,16 @@ describe('Test MySQL', () => { }); it('should increment column value', async () => { + await blocksTable.upsert([emptyBlock, nonEmptyBlock]); const connection = await getDBConnection(); const trx = await startDBTransaction(connection); - await blocksTable.increment({ - increment: { timestamp: 5 }, - where: { id: emptyBlock.id }, - }, trx); + await blocksTable.increment( + { + increment: { timestamp: 5 }, + where: { id: emptyBlock.id }, + }, + trx, + ); await commitDBTransaction(trx); const [retrievedBlock] = await blocksTable.find({ id: emptyBlock.id }, ['timestamp']); expect(retrievedBlock).toBeTruthy(); @@ -957,6 +1056,7 @@ describe('Test MySQL', () => { }); it('should decrement row by primary key', async () => { + await blocksTable.upsert([emptyBlock, nonEmptyBlock]); const connection = await getDBConnection(); const trx = await startDBTransaction(connection); const [existingBlock] = await blocksTable.find(); @@ -965,8 +1065,9 @@ describe('Test MySQL', () => { await commitDBTransaction(trx); expect(numAffectedRows).toEqual(1); - const count = await blocksTable - .count({ [blocksTableSchema.primaryKey]: existingBlock[blocksTableSchema.primaryKey] }); + const count = await blocksTable.count({ + [blocksTableSchema.primaryKey]: existingBlock[blocksTableSchema.primaryKey], + }); expect(count).toBe(0); }); @@ -979,7 +1080,10 @@ describe('Test MySQL', () => { const existingBlockCount = await blocksTable.count(); const existingIds = existingBlock.map(block => block.id); - const numAffectedRows = await blocksTable.delete({ whereIn: { property: 'id', values: existingIds } }, trx); + const numAffectedRows = await blocksTable.delete( + { whereIn: { property: 'id', values: existingIds } }, + trx, + ); await commitDBTransaction(trx); expect(numAffectedRows).toEqual(existingBlockCount); @@ -997,7 +1101,10 @@ describe('Test MySQL', () => { const existingBlockCount = await blocksTable.count(); const existingId = existingBlock.map(block => block.id); - const numAffectedRows = await blocksTable.delete({ whereIn: { property: 'id', values: existingId } }, trx); + const numAffectedRows = await blocksTable.delete( + { whereIn: { property: 'id', values: existingId } }, + trx, + ); await commitDBTransaction(trx); expect(numAffectedRows).toEqual(existingBlockCount); @@ -1065,6 +1172,7 @@ describe('Test MySQL', () => { }); it('should perform update method', async () => { + await blocksTable.upsert([emptyBlock, nonEmptyBlock]); const [retrievedBlock] = await blocksTable.find({ id: emptyBlock.id }, ['timestamp']); expect(retrievedBlock.timestamp).toBe(emptyBlock.timestamp); @@ -1090,14 +1198,16 @@ describe('Test MySQL', () => { await commitDBTransaction(trx); const params = { - whereIn: [{ - property: 'height', - values: [emptyBlock.height, nonEmptyBlock.height], - }, - { - property: 'id', - values: [emptyBlock.id], - }], + whereIn: [ + { + property: 'height', + values: [emptyBlock.height, nonEmptyBlock.height], + }, + { + property: 'id', + values: [emptyBlock.id], + }, + ], }; const result = await blocksTable.find(params, ['id']); expect(result).toBeInstanceOf(Array); @@ -1247,7 +1357,10 @@ describe('Test MySQL', () => { }; // Perform the left join - const result = await blocksTable.find(params, [`${tableName}.height`, `${transactionsTableName}.id`]); + const result = await blocksTable.find(params, [ + `${tableName}.height`, + `${transactionsTableName}.id`, + ]); // Assert the result expect(result).toBeInstanceOf(Array); @@ -1278,7 +1391,10 @@ describe('Test MySQL', () => { }; // Perform the right outer join - const result = await transactionsTable.find(params, [`${tableName}.height`, `${transactionsTableName}.id`]); + const result = await transactionsTable.find(params, [ + `${tableName}.height`, + `${transactionsTableName}.id`, + ]); // Assert the result expect(result).toBeInstanceOf(Array); @@ -1309,7 +1425,10 @@ describe('Test MySQL', () => { }; // Perform the inner join - const result = await transactionsTable.find(params, [`${tableName}.height`, `${transactionsTableName}.id`]); + const result = await transactionsTable.find(params, [ + `${tableName}.height`, + `${transactionsTableName}.id`, + ]); // Assert the result expect(result).toBeInstanceOf(Array); @@ -1319,9 +1438,49 @@ describe('Test MySQL', () => { expect(firstRow.height).toBe(nonEmptyBlock.height); expect(firstRow.id).toBe(tokenTransferTransaction.id); }); + + it('should apply HAVING clause with havingRaw', async () => { + // Insert a test record. + const connection = await getDBConnection(); + const trx = await startDBTransaction(connection); + await blocksTable.upsert([emptyBlock, nonEmptyBlock], trx); + await transactionsTable.upsert([tokenTransferTransaction], trx); + + const params = { + groupBy: 'height', + havingRaw: `height < ${Math.max(emptyBlock.height, nonEmptyBlock.height)}`, + }; + + const result = await blocksTable.find(params, ['id', 'height'], trx); + await commitDBTransaction(trx); + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(1); + }); + + it('should apply complex HAVING clause with havingRaw', async () => { + // Insert a test record. + const connection = await getDBConnection(); + const trx = await startDBTransaction(connection); + await blocksTable.upsert([emptyBlock, nonEmptyBlock], trx); + await transactionsTable.upsert([tokenTransferTransaction], trx); + + const params = { + groupBy: 'height', + havingRaw: `SUM(height) < ${Math.max(emptyBlock.height, nonEmptyBlock.height)}`, + }; + + const result = await blocksTable.find(params, ['id', 'height'], trx); + await commitDBTransaction(trx); + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(1); + }); }); describe('Transactional atomicity guarantees (non-auto commit mode)', () => { + afterEach(async () => { + await blocksTable.rawQuery(`TRUNCATE ${tableName}`); + }); + it('should perform a successful transaction commit', async () => { const connection = await getDBConnection(); const trx = await startDBTransaction(connection); @@ -1367,10 +1526,13 @@ describe('Test MySQL', () => { const connection = await getDBConnection(); const trx = await startDBTransaction(connection); await blocksTable.upsert([{ ...emptyBlock, id: 'rollback' }], trx); - await blocksTable.increment({ - increment: { size: 100 }, - where: { id: 'rollback' }, - }, trx); + await blocksTable.increment( + { + increment: { size: 100 }, + where: { id: 'rollback' }, + }, + trx, + ); // Assume failure occurred, rollback the transaction await rollbackDBTransaction(trx); @@ -1389,8 +1551,10 @@ describe('Test MySQL', () => { await commitDBTransaction(trx1); // Start a new transaction, perform upsert/delete and rollback - await blocksTable - .upsert([{ ...emptyBlock, height, timestamp: emptyBlock.timestamp + 100 }], trx2); + await blocksTable.upsert( + [{ ...emptyBlock, height, timestamp: emptyBlock.timestamp + 100 }], + trx2, + ); const numRowsAffected = await blocksTable.deleteByPrimaryKey([height], trx2); expect(numRowsAffected).toEqual(1); @@ -1412,7 +1576,9 @@ describe('Test MySQL', () => { await commitDBTransaction(trx); // Perform upsert using committed transaction - expect(blocksTable.upsert([{ ...emptyBlock, id: 'same transaction' }], trx)).rejects.toThrow(); + expect( + blocksTable.upsert([{ ...emptyBlock, id: 'same transaction' }], trx), + ).rejects.toThrow(); }); it('should throw an error when performing additional operations on a rollback transaction', async () => { @@ -1425,7 +1591,9 @@ describe('Test MySQL', () => { await rollbackDBTransaction(trx); // Perform upsert using rollback transaction - expect(blocksTable.upsert([{ ...emptyBlock, id: 'same transaction' }], trx)).rejects.toThrow(); + expect( + blocksTable.upsert([{ ...emptyBlock, id: 'same transaction' }], trx), + ).rejects.toThrow(); }); it('should have no effect when rolling back a committed transaction', async () => { diff --git a/framework/tests/functional/database/sqlite3.test.js b/framework/tests/functional/database/sqlite3.test.js index 04a53fe03..bd163d389 100644 --- a/framework/tests/functional/database/sqlite3.test.js +++ b/framework/tests/functional/database/sqlite3.test.js @@ -110,7 +110,10 @@ describe('Test sqlite3 implementation', () => { const count = await testTable.deleteByPrimaryKey([existingBlockId]); expect(count).toEqual(1); - const result = await testTable.find({ [schema.primaryKey]: existingBlock[schema.primaryKey] }, ['id']); + const result = await testTable.find( + { [schema.primaryKey]: existingBlock[schema.primaryKey] }, + ['id'], + ); expect(result.length).toBe(0); expect(result.every(b => b.id !== existingBlock.id)).toBeTruthy(); }); @@ -121,7 +124,9 @@ describe('Test sqlite3 implementation', () => { const existingBlockCount = await testTable.count(); const existingIds = existingBlock.map(e => e.id); - const numAffectedRows = await testTable.delete({ whereIn: { property: 'id', values: existingIds } }); + const numAffectedRows = await testTable.delete({ + whereIn: { property: 'id', values: existingIds }, + }); expect(numAffectedRows).toEqual(existingBlockCount); const count = await testTable.count({}); @@ -134,7 +139,9 @@ describe('Test sqlite3 implementation', () => { const existingBlockCount = await testTable.count(); const existingId = existingBlock.map(e => e.id); - const numAffectedRows = await testTable.delete({ whereIn: { property: 'id', values: existingId } }); + const numAffectedRows = await testTable.delete({ + whereIn: { property: 'id', values: existingId }, + }); expect(numAffectedRows).toEqual(existingBlockCount); const count = await testTable.count({}); @@ -313,10 +320,13 @@ describe('Test sqlite3 implementation', () => { const connection = await getDBConnection(tableName); const trx = await startDBTransaction(connection); const { id } = blockWithoutTransaction.header; - await testTable.increment({ - increment: { timestamp: 5 }, - where: { id }, - }, trx); + await testTable.increment( + { + increment: { timestamp: 5 }, + where: { id }, + }, + trx, + ); await commitDBTransaction(trx); const [retrievedBlock] = await testTable.find({ id }, ['timestamp']); expect(retrievedBlock).toBeTruthy(); @@ -347,7 +357,10 @@ describe('Test sqlite3 implementation', () => { const existingBlockCount = await testTable.count(); const existingIds = existingBlock.map(e => e.id); - const numAffectedRows = await testTable.delete({ whereIn: { property: 'id', values: existingIds } }, trx); + const numAffectedRows = await testTable.delete( + { whereIn: { property: 'id', values: existingIds } }, + trx, + ); await commitDBTransaction(trx); expect(numAffectedRows).toEqual(existingBlockCount); @@ -365,7 +378,10 @@ describe('Test sqlite3 implementation', () => { const existingBlockCount = await testTable.count(); const existingId = existingBlock.map(e => e.id); - const numAffectedRows = await testTable.delete({ whereIn: { property: 'id', values: existingId } }, trx); + const numAffectedRows = await testTable.delete( + { whereIn: { property: 'id', values: existingId } }, + trx, + ); await commitDBTransaction(trx); expect(numAffectedRows).toEqual(existingBlockCount); diff --git a/framework/tests/functional/http.test.js b/framework/tests/functional/http.test.js index d3dcf6297..0079c693c 100644 --- a/framework/tests/functional/http.test.js +++ b/framework/tests/functional/http.test.js @@ -15,21 +15,23 @@ */ const http = require('../../src/http'); -const getTimestamp = () => (new Date().getTime()); - -const waitMs = n => new Promise(resolve => { - setTimeout(() => { - resolve(); - }, n); -}); +const getTimestamp = () => new Date().getTime(); + +const waitMs = n => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise(resolve => { + setTimeout(() => { + resolve(); + }, n); + }); -beforeEach(() => { -}); +beforeEach(() => {}); -const url = 'https://service.lisk.com/api/v3/blocks'; +// TODO: Update to mainnet url after production +const url = 'https://testnet-service.lisk.com/api/v3/blocks'; describe('HTTP library is able to send GET request', () => { - test('with default parameters', async () => { + it('should have default parameters', async () => { const response = await http.request(url); expect(response).toHaveProperty('data'); expect(response.data).toHaveProperty('data'); @@ -37,7 +39,7 @@ describe('HTTP library is able to send GET request', () => { // expect(response.data).toHaveProperty('links'); }); - test('by explicitly defining get', async () => { + it('should be able to send GET request by explicitly defining get', async () => { const response = await http.get(url); expect(response).toHaveProperty('data'); expect(response.data).toHaveProperty('data'); @@ -47,7 +49,7 @@ describe('HTTP library is able to send GET request', () => { }); describe('HTTP library with caching enabled', () => { - test('supports plain GET request cache', async () => { + it('should support plain GET request cache', async () => { const ttl = 50000; const timestamps = []; @@ -66,8 +68,7 @@ describe('HTTP library with caching enabled', () => { expect(timestamps[2] - timestamps[1]).toBeLessThanOrEqual(7); }); - xtest('handles expire time properly', async () => { - const FIXED_DATA = 'fixed'; + it('should handle expire time properly', async () => { const ttl = 50; const timestamps = []; @@ -85,13 +86,15 @@ describe('HTTP library with caching enabled', () => { }); timestamps.push(getTimestamp()); - // console.log(timestamps.map(t => t - timestamps[0])); + // Remove 'x-request-id' field + delete originalResponse.headers['x-request-id']; + delete secondResponse.headers['x-request-id']; - originalResponse.headers.date = FIXED_DATA; - secondResponse.headers.date = FIXED_DATA; + delete originalResponse.headers.date; + delete secondResponse.headers.date; - expect(timestamps[1] - timestamps[0]).toBeGreaterThanOrEqual(50); - expect(timestamps[3] - timestamps[2]).toBeGreaterThanOrEqual(50); + expect(timestamps[1] - timestamps[0]).toBeGreaterThanOrEqual(ttl); + expect(timestamps[3] - timestamps[2]).toBeGreaterThanOrEqual(ttl); expect(secondResponse).toEqual(originalResponse); }); }); diff --git a/framework/tests/functional/microservice.test.js b/framework/tests/functional/microservice.test.js index 1d2fa0bd8..86446fefc 100644 --- a/framework/tests/functional/microservice.test.js +++ b/framework/tests/functional/microservice.test.js @@ -26,24 +26,24 @@ LoggerConfig(loggerConf); const app = Microservice({ name: 'test-service', - transporter: 'redis://127.0.0.1:6379/0', + transporter: process.env.REDIS_URL || 'redis://lisk:password@127.0.0.1:6379/0', logger: loggerConf, }); const testJob = () => true; describe('Test microservice', () => { - describe('addJobs()', () => { - it('Job occurs only during start', async () => { + describe('scheduleJob()', () => { + it('should occur only during start', async () => { const job = { name: 'test.job.start', description: 'Return true', init: () => testJob(), }; - expect(app.addJob(job)).toBe(true); + expect(app.scheduleJob(job)).resolves.toBe(true); }); - it('Job occurs based on interval', async () => { + it('should occur based on interval', async () => { const job = { name: 'test.job.start', description: 'Return true', @@ -51,10 +51,10 @@ describe('Test microservice', () => { init: () => testJob(), controller: () => testJob(), }; - expect(app.addJob(job)).toBe(true); + expect(app.scheduleJob(job)).resolves.toBe(true); }); - it('Job occurs based on cron', async () => { + it('should occur based on cron', async () => { const job = { name: 'test.job.start', description: 'Return true', @@ -62,41 +62,41 @@ describe('Test microservice', () => { init: () => testJob(), controller: () => testJob(), }; - expect(app.addJob(job)).toBe(true); + expect(app.scheduleJob(job)).resolves.toBe(true); }); - it('Return false when no init or controller defined', async () => { + it('should return false when no init or controller defined', async () => { const job = { name: 'test.job.start', description: 'Return true', schedule: '* * * * *', }; - expect(app.addJob(job)).toBe(false); + expect(app.scheduleJob(job)).resolves.toBe(false); }); - it('Return false when no schedule or interval defined with controller', async () => { + it('should return false when no schedule or interval defined with controller', async () => { const job = { name: 'test.job.start', description: 'Return true', init: () => testJob(), controller: () => testJob(), }; - expect(app.addJob(job)).toBe(false); + expect(app.scheduleJob(job)).resolves.toBe(false); }); - it('Return false when no controller defined with interval/schedule', async () => { + it('should return false when no controller defined with interval/schedule', async () => { const job = { name: 'test.job.start', description: 'Return true', interval: 5, // seconds init: () => testJob(), }; - expect(app.addJob(job)).toBe(false); + expect(app.scheduleJob(job)).resolves.toBe(false); }); }); describe('addMethods()', () => { - it('Return true when method is registered', async () => { + it('should return true when method is registered', async () => { const testMethod = { name: 'test.method', description: 'Return true', @@ -105,7 +105,7 @@ describe('Test microservice', () => { expect(app.addMethod(testMethod)).toBe(true); }); - it('Return false when when no controller defined', async () => { + it('should return false when no controller defined', async () => { const testMethod = { name: 'test.method', description: 'Return false', @@ -115,7 +115,7 @@ describe('Test microservice', () => { }); describe('addEvents()', () => { - it('Return true when event is registered', async () => { + it('should return true when event is registered', async () => { const testEvent = { name: 'test.event', description: 'Return true', @@ -124,7 +124,7 @@ describe('Test microservice', () => { expect(app.addEvent(testEvent)).toBe(true); }); - it('Return false when when no controller defined', async () => { + it('should return false when no controller defined', async () => { const testEvent = { name: 'test.event', description: 'Return false', @@ -134,7 +134,7 @@ describe('Test microservice', () => { }); describe('requestRpc()', () => { - it('Return result when call with registered method name', async () => { + it('should return result when called with registered method name', async () => { const testData = { address: 'lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99', balance: '95589969000000', @@ -155,8 +155,8 @@ describe('Test microservice', () => { expect(result).toMatchObject(testData); }); - it('Throw error when method is not registered', async () => { - expect(app.requestRpc('test-service.unregistered.method', {})).rejects.toThrow(); + it('should throw an error when method is not registered', async () => { + expect(() => app.requestRpc('test-service.unregistered.method', {})).rejects.toThrow(); }); }); }); diff --git a/framework/tests/functional/queue.test.js b/framework/tests/functional/queue.test.js index 64429638f..25896008b 100644 --- a/framework/tests/functional/queue.test.js +++ b/framework/tests/functional/queue.test.js @@ -17,9 +17,9 @@ const Queue = require('../../src/queue'); describe('Test queue', () => { let queue; - const redisEndpoint = process.env.REDIS_URL || 'redis://127.0.0.1:6379/0'; + const redisEndpoint = process.env.REDIS_URL || 'redis://lisk:password@127.0.0.1:6379/0'; - it('Should create a queue with a given redis instance', async () => { + it('should create a queue with a given redis instance', async () => { const testFunc = async (a, b) => a + b; queue = Queue(redisEndpoint, 'testQueue', testFunc, 1); @@ -37,7 +37,7 @@ describe('Test queue', () => { expect(queue.queue.client.options.port).toEqual(port); }); - it('Add job to the queue', async () => { + it('should add a job to the queue', async () => { const data = { a: 1, b: 2 }; await queue.add(data).then(job => { expect(job.id).not.toBe(undefined); diff --git a/framework/tests/helpers/setupCustomMatchers.js b/framework/tests/helpers/setupCustomMatchers.js index a2d8481b6..c356dbecc 100644 --- a/framework/tests/helpers/setupCustomMatchers.js +++ b/framework/tests/helpers/setupCustomMatchers.js @@ -18,9 +18,18 @@ const mapRequiredSchema = (response, schema) => { Object.keys(schema).forEach(key => { if (!Object.prototype.hasOwnProperty.call(response, key)) { errors += `${key} is not present in response \n`; - } else if (!['array', 'number', 'boolean', 'object', 'string', 'null'].some(type => type === schema[key])) { - if (response[key] !== schema[key]) errors += `${key}: ${response[key]} is not equal ${schema[key]}\n`; - } else if (schema[key] === 'array' ? !Array.isArray(response[key]) : (!typeof response[key] === schema[key])) { + } else if ( + !['array', 'number', 'boolean', 'object', 'string', 'null'].some(type => type === schema[key]) + ) { + if (response[key] !== schema[key]) { + // eslint-disable-next-line implicit-arrow-linebreak + errors += `${key}: ${response[key]} is not equal ${schema[key]}\n`; + } + } else if ( + schema[key] === 'array' + ? !Array.isArray(response[key]) + : !typeof response[key] === schema[key] + ) { errors += `${key}: ${response[key]} is not ${schema[key]}\n`; } }); diff --git a/framework/tests/unit.config.js b/framework/tests/unit.config.js index 214897f2d..590d5be0a 100644 --- a/framework/tests/unit.config.js +++ b/framework/tests/unit.config.js @@ -15,12 +15,7 @@ */ module.exports = { verbose: true, - testMatch: [ - '/unit/**/*.spec.js', - ], + testMatch: ['/unit/**/*.spec.js'], testEnvironment: 'node', - setupFilesAfterEnv: [ - 'jest-extended', - '/helpers/setupCustomMatchers.js', - ], + setupFilesAfterEnv: ['jest-extended', '/helpers/setupCustomMatchers.js'], }; diff --git a/framework/tests/unit/cacheLru.spec.js b/framework/tests/unit/cacheLru.spec.js index c3a4b24fb..561314dad 100644 --- a/framework/tests/unit/cacheLru.spec.js +++ b/framework/tests/unit/cacheLru.spec.js @@ -16,16 +16,15 @@ const Cache = require('../../src/cacheLru'); const customMemoryBank = 'memBank'; -const testData = [ - { test: 'test_value' }, - { test: 'another_test_value' }, -]; +const testData = [{ test: 'test_value' }, { test: 'another_test_value' }]; -const waitMs = n => new Promise(resolve => { - setTimeout(() => { - resolve(); - }, n); -}); +const waitMs = n => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise(resolve => { + setTimeout(() => { + resolve(); + }, n); + }); test('store value in default memory bank', async () => { const cache = Cache(); diff --git a/framework/tests/unit/cacheMemory.spec.js b/framework/tests/unit/cacheMemory.spec.js index 9f2cd9e0f..55292bd7b 100644 --- a/framework/tests/unit/cacheMemory.spec.js +++ b/framework/tests/unit/cacheMemory.spec.js @@ -16,16 +16,15 @@ const Cache = require('../../src/cacheMemory'); const customMemoryBank = 'memBank'; -const testData = [ - { test: 'test_value' }, - { test: 'another_test_value' }, -]; +const testData = [{ test: 'test_value' }, { test: 'another_test_value' }]; -const waitMs = n => new Promise(resolve => { - setTimeout(() => { - resolve(); - }, n); -}); +const waitMs = n => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise(resolve => { + setTimeout(() => { + resolve(); + }, n); + }); test('store value in default memory bank', async () => { const key = 'key'; diff --git a/framework/tests/unit/cacheRedis.spec.js b/framework/tests/unit/cacheRedis.spec.js index 0d71ba5b5..a4276a23e 100644 --- a/framework/tests/unit/cacheRedis.spec.js +++ b/framework/tests/unit/cacheRedis.spec.js @@ -13,23 +13,18 @@ * Removal or modification of this copyright notice is prohibited. * */ -// TODO: mock Redis -// const { redis } = require('redis-mock'); -// jest.doMock('redis', () => redis); - const Cache = require('../../src/cacheRedis'); const customMemoryBank = 'memBank'; -const testData = [ - { test: 'test_value' }, - { test: 'another_test_value' }, -]; - -const waitMs = n => new Promise(resolve => { - setTimeout(() => { - resolve(); - }, n); -}); +const testData = [{ test: 'test_value' }, { test: 'another_test_value' }]; + +const waitMs = n => + // eslint-disable-next-line implicit-arrow-linebreak + new Promise(resolve => { + setTimeout(() => { + resolve(); + }, n); + }); test('store value in default memory bank', async () => { const cache = Cache(); diff --git a/framework/tests/unit/data.spec.js b/framework/tests/unit/data.spec.js index 7065e9aa8..61145ed49 100644 --- a/framework/tests/unit/data.spec.js +++ b/framework/tests/unit/data.spec.js @@ -13,12 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - isProperObject, - isEmptyArray, - isEmptyObject, - isString, -} = require('../../src/data'); +const { isProperObject, isEmptyArray, isEmptyObject, isString } = require('../../src/data'); describe('isProperObject()', () => { test('returns true on plain objects', async () => { diff --git a/framework/tests/unit/database/sqlite3.spec.js b/framework/tests/unit/database/sqlite3.spec.js index 04a53fe03..ac0031c78 100644 --- a/framework/tests/unit/database/sqlite3.spec.js +++ b/framework/tests/unit/database/sqlite3.spec.js @@ -25,7 +25,9 @@ const { const schema = require('../../constants/blocksSchema'); const tableName = 'functional_test'; + const testDir = 'testDir'; + schema.tableName = tableName; const getTable = () => getTableInstance(schema, testDir); @@ -110,7 +112,10 @@ describe('Test sqlite3 implementation', () => { const count = await testTable.deleteByPrimaryKey([existingBlockId]); expect(count).toEqual(1); - const result = await testTable.find({ [schema.primaryKey]: existingBlock[schema.primaryKey] }, ['id']); + const result = await testTable.find( + { [schema.primaryKey]: existingBlock[schema.primaryKey] }, + ['id'], + ); expect(result.length).toBe(0); expect(result.every(b => b.id !== existingBlock.id)).toBeTruthy(); }); @@ -121,7 +126,9 @@ describe('Test sqlite3 implementation', () => { const existingBlockCount = await testTable.count(); const existingIds = existingBlock.map(e => e.id); - const numAffectedRows = await testTable.delete({ whereIn: { property: 'id', values: existingIds } }); + const numAffectedRows = await testTable.delete({ + whereIn: { property: 'id', values: existingIds }, + }); expect(numAffectedRows).toEqual(existingBlockCount); const count = await testTable.count({}); @@ -134,7 +141,9 @@ describe('Test sqlite3 implementation', () => { const existingBlockCount = await testTable.count(); const existingId = existingBlock.map(e => e.id); - const numAffectedRows = await testTable.delete({ whereIn: { property: 'id', values: existingId } }); + const numAffectedRows = await testTable.delete({ + whereIn: { property: 'id', values: existingId }, + }); expect(numAffectedRows).toEqual(existingBlockCount); const count = await testTable.count({}); @@ -313,10 +322,13 @@ describe('Test sqlite3 implementation', () => { const connection = await getDBConnection(tableName); const trx = await startDBTransaction(connection); const { id } = blockWithoutTransaction.header; - await testTable.increment({ - increment: { timestamp: 5 }, - where: { id }, - }, trx); + await testTable.increment( + { + increment: { timestamp: 5 }, + where: { id }, + }, + trx, + ); await commitDBTransaction(trx); const [retrievedBlock] = await testTable.find({ id }, ['timestamp']); expect(retrievedBlock).toBeTruthy(); @@ -347,7 +359,10 @@ describe('Test sqlite3 implementation', () => { const existingBlockCount = await testTable.count(); const existingIds = existingBlock.map(e => e.id); - const numAffectedRows = await testTable.delete({ whereIn: { property: 'id', values: existingIds } }, trx); + const numAffectedRows = await testTable.delete( + { whereIn: { property: 'id', values: existingIds } }, + trx, + ); await commitDBTransaction(trx); expect(numAffectedRows).toEqual(existingBlockCount); @@ -365,7 +380,10 @@ describe('Test sqlite3 implementation', () => { const existingBlockCount = await testTable.count(); const existingId = existingBlock.map(e => e.id); - const numAffectedRows = await testTable.delete({ whereIn: { property: 'id', values: existingId } }, trx); + const numAffectedRows = await testTable.delete( + { whereIn: { property: 'id', values: existingId } }, + trx, + ); await commitDBTransaction(trx); expect(numAffectedRows).toEqual(existingBlockCount); diff --git a/framework/tests/unit/database/util.spec.js b/framework/tests/unit/database/util.spec.js index 0ce2c5f1c..2c9665307 100644 --- a/framework/tests/unit/database/util.spec.js +++ b/framework/tests/unit/database/util.spec.js @@ -16,16 +16,16 @@ const { escapeUserInput } = require('../../../src/database/util'); describe('Test escapeUserInput method', () => { - it('should return string with escaped character when called with valid input', async () => { - const validInput = '%test%string_'; - const result = escapeUserInput(validInput); - const expectedResult = '\\%test\\%string\\_'; - expect(result).toEqual(expectedResult); - }); + it('should return string with escaped character when called with valid input', async () => { + const validInput = '%test%string_'; + const result = escapeUserInput(validInput); + const expectedResult = '\\%test\\%string\\_'; + expect(result).toEqual(expectedResult); + }); - it('should return empty string when called with empty string', async () => { - const emptyString = ''; - const result = escapeUserInput(emptyString); - expect(result).toEqual(emptyString); - }); + it('should return empty string when called with empty string', async () => { + const emptyString = ''; + const result = escapeUserInput(emptyString); + expect(result).toEqual(emptyString); + }); }); diff --git a/framework/tests/unit/logger.spec.js b/framework/tests/unit/logger.spec.js index e33ffe8dc..fabab782b 100644 --- a/framework/tests/unit/logger.spec.js +++ b/framework/tests/unit/logger.spec.js @@ -14,7 +14,5 @@ * */ xdescribe('Logger', () => { - xtest('exists', async () => { - - }); + xtest('exists', async () => {}); }); diff --git a/framework/tests/unit/mapper.spec.js b/framework/tests/unit/mapper.spec.js index d5e447ea0..283985630 100644 --- a/framework/tests/unit/mapper.spec.js +++ b/framework/tests/unit/mapper.spec.js @@ -62,8 +62,10 @@ describe('Object mapper: ', () => { }); it('Object with multiple key-val pairs -> ok', () => { - const result = mapperService({ value: 16009998, number: '100', addr: '16009998050678037905L' }, - { value: '=,string', number: '=,number', address: 'addr,string' }); + const result = mapperService( + { value: 16009998, number: '100', addr: '16009998050678037905L' }, + { value: '=,string', number: '=,number', address: 'addr,string' }, + ); expect(result).toMatchObject({ value: '16009998', number: 100, @@ -74,7 +76,8 @@ describe('Object mapper: ', () => { it('Multiple key-val pairs in the input will be mapped only if the definition has the key-val -> ok', () => { const result = mapperService( { value: 16009998, number: '100', addr: '16009998050678037905L' }, - { value: '=,string', address: 'addr,string' }); + { value: '=,string', address: 'addr,string' }, + ); expect(result).toMatchObject({ value: '16009998', @@ -97,7 +100,10 @@ describe('Object mapper: ', () => { }); it('Map an array inside a plain object -> ok', () => { - const result = mapperService({ data: [{ address: '16009998050678037905L' }] }, ['data', { address: '=' }]); + const result = mapperService({ data: [{ address: '16009998050678037905L' }] }, [ + 'data', + { address: '=' }, + ]); expect(result).toBeInstanceOf(Array); expect(result).toHaveLength(2); expect(result).toEqual(['data', { data: [{ address: '16009998050678037905L' }] }]); @@ -114,12 +120,12 @@ describe('Object mapper: ', () => { }); it('Plain object with empty array maps to an object with empty array -> ok', () => { - const result = mapperService({ address: [] }, { address: '=' }); + const result = mapperService({ address: [] }, { address: '=' }); expect(result).toEqual({ address: [] }); }); it('Plain object with empty array maps to an object with empty array -> ok', () => { - const result = mapperService({ addr: [] }, { address: 'addr' }); + const result = mapperService({ addr: [] }, { address: 'addr' }); expect(result).toEqual({ address: [] }); }); @@ -144,7 +150,10 @@ describe('Object mapper: ', () => { }); it('Nested object with empty object maps to a plain object -> ok', () => { - const result = mapperService({ addr: { name: { addres: 'address' } } }, { address: 'addr.name' }); + const result = mapperService( + { addr: { name: { addres: 'address' } } }, + { address: 'addr.name' }, + ); expect(result).toEqual({ address: { addres: 'address' } }); }); @@ -202,16 +211,18 @@ describe('Object mapper: ', () => { }); it('Multi-level array mapping', () => { - const input = { data: [ - { - address: '16009998050678037905L', - asset: { - amount: { - average: '1000', + const input = { + data: [ + { + address: '16009998050678037905L', + asset: { + amount: { + average: '1000', + }, }, }, - }, - ] }; + ], + }; const def = { data: ['data', { address: '=', avg: 'asset.amount.average' }] }; const result = { data: [{ address: '16009998050678037905L', avg: '1000' }] }; const response = mapperService(input, def); diff --git a/framework/tests/unit/signals.spec.js b/framework/tests/unit/signals.spec.js index bd0afe973..29b624b8f 100644 --- a/framework/tests/unit/signals.spec.js +++ b/framework/tests/unit/signals.spec.js @@ -28,7 +28,7 @@ describe('Signals tests', () => { describe('signal.add()', () => { const signal = signals.get('addEvent'); - const testFunc = () => { }; + const testFunc = () => {}; it('Add valid listener to signal.add()', async () => { // initially 0 listeners expect(signal.getNumListeners()).toBe(0); @@ -53,14 +53,14 @@ describe('Signals tests', () => { signal.dispose(); expect(() => signal.getNumListeners()).toThrow(); - expect(() => signal.add(() => { })).toThrow(); + expect(() => signal.add(() => {})).toThrow(); expect(() => signal.dispatch()).toThrow(); }); }); describe('signal.remove()', () => { const signal = signals.get('removeEvent'); - const testFunc = () => { }; + const testFunc = () => {}; it('Remove valid listener', async () => { signal.add(testFunc); @@ -74,7 +74,7 @@ describe('Signals tests', () => { signal.add(testFunc); expect(signal.getNumListeners()).toBe(1); - signal.add(() => { }); + signal.add(() => {}); expect(signal.getNumListeners()).toBe(2); signal.removeAll(); diff --git a/services/gateway/tests/unit/shared/waitForIt.test.js b/framework/tests/unit/waitForIt.spec.js similarity index 78% rename from services/gateway/tests/unit/shared/waitForIt.test.js rename to framework/tests/unit/waitForIt.spec.js index 518ae031e..82f9668bf 100644 --- a/services/gateway/tests/unit/shared/waitForIt.test.js +++ b/framework/tests/unit/waitForIt.spec.js @@ -14,14 +14,13 @@ * */ -const waitForIt = require('../../../shared/waitForIt'); - -const delay = (ms = 100, val) => new Promise(resolve => setTimeout(resolve, ms, val)); +const waitForIt = require('../../src/waitForIt'); +const delay = require('../../src/delay'); describe('Test waitForIt method', () => { it('should wait for the function to return response', async () => { let testValue = false; - const testFn = () => testValue = true; + const testFn = () => (testValue = true); expect(testValue).toBe(false); await waitForIt(testFn); @@ -37,8 +36,8 @@ describe('Test waitForIt method', () => { const startTime = Date.now(); await waitForIt(testFn); const endTime = Date.now(); - const millisDifference = endTime - startTime; - expect(millisDifference).toBeGreaterThanOrEqual(delayMs); + const waitTimeInMillisecs = endTime - startTime; + expect(waitTimeInMillisecs).toBeGreaterThanOrEqual(delayMs - 1); }); it('should wait for the mocked function to return response', async () => { @@ -67,4 +66,9 @@ describe('Test waitForIt method', () => { it('should throw error when passing function as empty string', async () => { expect(waitForIt('')).rejects.toThrow(); }); + + // Unable to add test for 'resolveUndefined = false' as jest complaints of long running test + it('should resolve undefined with resolveUndefined = true', async () => { + expect(waitForIt(() => undefined, 1000, true)).resolves.toBe(undefined); + }); }); diff --git a/framework/yarn.lock b/framework/yarn.lock index b146fee0e..1650b98c2 100644 --- a/framework/yarn.lock +++ b/framework/yarn.lock @@ -10,46 +10,46 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7" + integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.5" + "@babel/parser" "^7.23.5" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.5" + "@babel/types" "^7.23.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.5", "@babel/generator@^7.7.2": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755" + integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.5" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -92,10 +92,10 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -122,10 +122,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" @@ -133,32 +133,32 @@ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== "@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e" + integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.5" + "@babel/types" "^7.23.5" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" + integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -195,6 +195,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -245,9 +252,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -260,28 +267,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec" + integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/parser" "^7.23.5" + "@babel/types" "^7.23.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.5", "@babel/types@^7.3.3": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" + integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -318,163 +325,185 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" "@jest/types@^26.6.2": version "26.6.2" @@ -487,15 +516,16 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^16.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": @@ -522,18 +552,18 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.0" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.0.tgz#e0b8348a5b1bc0765ab2d085cfe6651670987c40" + integrity sha512-6k7wG/KKSIGpruKlsEB4sFjECJEyQsuJbWoWdoq9Uv2L6Mm/SEqEidekRZI/QljE1A4WQkFsIE8hHl1Oc3UNGg== dependencies: ioredis "^5.3.2" @@ -543,34 +573,34 @@ dependencies: debug "^3.1.0" -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -579,24 +609,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" @@ -606,77 +636,69 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== - -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + version "20.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.1.tgz#d2c96f356c3125fedc983d74c424910c3767141c" + integrity sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg== + dependencies: + undici-types "~5.26.4" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^15.0.0": - version "15.0.16" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.16.tgz#258009dc52907e8f03041eb64ffdac297ba4b208" - integrity sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg== + version "15.0.19" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" + integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== dependencies: "@types/yargs-parser" "*" -"@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -685,36 +707,6 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -813,23 +805,24 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -845,14 +838,14 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: @@ -873,12 +866,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^27.5.1" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -897,9 +890,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -953,18 +946,13 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== + version "4.22.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" + integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" + caniuse-lite "^1.0.30001541" + electron-to-chromium "^1.4.535" node-releases "^2.0.13" update-browserslist-db "^1.0.13" @@ -1009,13 +997,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1037,10 +1026,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001541: + version "1.0.30001565" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz#a528b253c8a2d95d2b415e11d8b9942acc100c4f" + integrity sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w== chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -1070,22 +1059,22 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: @@ -1159,10 +1148,10 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== convert-source-map@^2.0.0: version "2.0.0" @@ -1182,6 +1171,19 @@ cors@~2.8.5: object-assign "^4" vary "^1" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" @@ -1199,32 +1201,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -1237,7 +1213,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1256,11 +1232,6 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -1268,10 +1239,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -1283,10 +1254,10 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" @@ -1346,27 +1317,25 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.535: + version "1.4.597" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.597.tgz#9848b9aa52749bf35be88013bab52be232889d94" + integrity sha512-0XOQNqHhg2YgRVRUrS4M4vWjFCFIP2ETXcXe/0KIQBjXE9Cpy+tgzzYfuq6HGai3hWq0YywtG+5XK8fyG08EjA== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -1386,9 +1355,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -1402,9 +1371,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -1425,25 +1394,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -1453,7 +1422,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -1467,7 +1436,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -1475,13 +1444,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -1517,37 +1486,16 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -1595,17 +1543,18 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -1647,7 +1596,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -1659,10 +1608,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -1697,10 +1646,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -1734,15 +1683,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -1777,7 +1726,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1829,11 +1778,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -1852,19 +1801,12 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" @@ -1882,28 +1824,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -1960,12 +1885,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -2045,11 +1970,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2093,11 +2018,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2144,11 +2064,6 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: dependencies: which-typed-array "^1.1.11" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -2172,11 +2087,11 @@ isstream@^0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -2187,6 +2102,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -2213,85 +2139,83 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -2315,48 +2239,45 @@ jest-diff@^27.2.5, jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== - dependencies: - detect-newline "^3.0.0" - -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" + detect-newline "^3.0.0" -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" jest-extended@^1.0.0: version "1.2.1" @@ -2378,56 +2299,37 @@ jest-get-type@^27.0.6, jest-get-type@^27.5.1: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.6.3" + "@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 "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" jest-matcher-utils@^26.6.2: version "26.6.2" @@ -2439,7 +2341,7 @@ jest-matcher-utils@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-matcher-utils@^27.2.4, jest-matcher-utils@^27.5.1: +jest-matcher-utils@^27.2.4: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== @@ -2449,6 +2351,16 @@ jest-matcher-utils@^27.2.4, jest-matcher-utils@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + jest-message-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" @@ -2464,28 +2376,29 @@ jest-message-util@^26.6.2: slash "^3.0.0" stack-utils "^2.0.2" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -2497,181 +2410,172 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.2.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -2686,39 +2590,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2762,9 +2633,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -2840,7 +2711,7 @@ lodash.isarguments@^3.1.0: resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2962,9 +2833,9 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -2979,9 +2850,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.21: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -3027,9 +2898,9 @@ ms@2.1.3, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -3071,9 +2942,9 @@ negotiator@0.6.3: integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.51.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.51.0.tgz#970bf595ef5a26a271307f8a4befa02823d4e87d" + integrity sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA== dependencies: semver "^7.3.5" @@ -3119,20 +2990,15 @@ nuid@^1.1.4: resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -3198,6 +3064,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -3232,11 +3105,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -3331,6 +3199,15 @@ pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + prettyjson@^1.2.1: version "1.2.5" resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.5.tgz#ef3cfffcc70505c032abc59785884b4027031835" @@ -3358,10 +3235,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -3371,10 +3248,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" @@ -3390,11 +3267,6 @@ qs@^6.11.0: dependencies: side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -3425,6 +3297,11 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -3489,11 +3366,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -3506,15 +3378,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -3525,13 +3397,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" @@ -3561,19 +3426,12 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.5.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -3614,6 +3472,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -3649,7 +3517,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -3721,24 +3589,19 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -3788,7 +3651,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3865,7 +3728,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -3879,24 +3742,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -3923,14 +3773,6 @@ tarn@^3.0.2: resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -3945,11 +3787,6 @@ text-decoding@^1.0.0: resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - tildify@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" @@ -3982,23 +3819,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4085,13 +3905,6 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - tz-offset@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tz-offset/-/tz-offset-0.0.1.tgz#fef920257024d3583ed9072a767721a18bdb8a76" @@ -4107,16 +3920,16 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4130,14 +3943,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4161,35 +3966,21 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" vary@^1: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -4201,28 +3992,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -4231,15 +4000,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -4251,13 +4011,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -4283,36 +4043,19 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + signal-exit "^3.0.7" ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest-ssl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" @@ -4333,20 +4076,25 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/jenkins/Jenkinsfile b/jenkins/Jenkinsfile index d3766dc23..97567b140 100644 --- a/jenkins/Jenkinsfile +++ b/jenkins/Jenkinsfile @@ -35,7 +35,22 @@ pipeline { steps { script { echoBanner(STAGE_NAME) } nvm(readFile('.nvmrc').trim()) { - sh 'yarn run eslint' + sh 'yarn lint' + } + } + } + stage('Format Service') { + steps { + nvm(readFile(".nvmrc").trim()) { + sh ''' + npm run format + if [ -z "$(git status --untracked-files=no --porcelain)" ]; then + echo "All files formatted" + else + echo "Running format is required" + exit 1 + fi + ''' } } } diff --git a/jenkins/Jenkinsfile.nightly b/jenkins/Jenkinsfile.nightly index 3326c800c..d8db3902d 100644 --- a/jenkins/Jenkinsfile.nightly +++ b/jenkins/Jenkinsfile.nightly @@ -1,21 +1,23 @@ -MYSQL_PORT = 3306 +MYSQL_PORT = 3306; +REDIS_PORT = 6381; LISK_CORE_WS_PORT = 7887; +SERVICE_BROKER_PORT = 4222; def checkOpenPort(nPort) { def result = sh script: "nc -z 127.0.0.1 ${nPort}", returnStatus: true return (result == 0) } -def runServiceIfMissing(svcName, path, nPort) { - if (checkOpenPort(nPort) == false) { - echo "${svcName} is not running, starting a new instance on port ${nPort}" - dir(path) { sh 'make up' } - if (checkOpenPort(nPort) == false) { - dir(path) { sh 'make logs' } - currentBuild.result = 'FAILURE' - throw new Exception("Failed to run ${svcName} instance") - } - } +def runServiceIfMissing(svcName, path, nPort, startCommand = 'make up', logsCommand= 'make logs') { + if (checkOpenPort(nPort) == false) { + echo "${svcName} is not running, starting a new instance on port ${nPort}" + dir(path) { sh startCommand } + if (checkOpenPort(nPort) == false) { + dir(path) { sh logsCommand } + currentBuild.result = 'FAILURE' + throw new Exception("Failed to run ${svcName} instance") + } + } } def checkHttp(url) { @@ -39,16 +41,16 @@ pipeline { cron('0 23 * * *') } options { - timeout(time: 10, unit: 'MINUTES') + timeout(time: 45, unit: 'MINUTES') } environment { - ENABLE_HTTP_API='http-version3,http-status' - ENABLE_WS_API='rpc-v3,blockchain' + ENABLE_HTTP_API='http-status,http-version3,http-exports' + ENABLE_WS_API='rpc-v3,rpc-test,blockchain' LISK_APP_WS='ws://host.docker.internal:7887' ENABLE_TESTING_MODE='true' } stages { - stage('Checkout SCM') { + stage('Checkout SCM') { when { anyOf { branch 'development' @@ -64,18 +66,56 @@ pipeline { } } } - stage ('Build dependencies') { + stage('Start Lisk Service') { + when { + anyOf { + branch 'development' + branch 'release/**' + branch 'feature/**' + } + } steps { script { echoBanner(STAGE_NAME) } dir('lisk-service') { nvm(readFile('.nvmrc').trim()) { - dir('./') { sh 'npm i -g yarn' } - dir('./') { sh 'make build-local' } + sh ''' + make build + docker-compose -f jenkins/docker-compose.nightly.yml down --volumes --remove-orphans + docker-compose -f jenkins/docker-compose.nightly.yml --env-file .env up -d + ''' } } } } - stage('Run required services') { + stage('Start Lisk Core') { + when { + anyOf { + branch 'development' + branch 'release/**' + branch 'feature/**' + } + } + steps { + script { echoBanner(STAGE_NAME) } + dir('lisk-service') { + nvm(readFile('.nvmrc').trim()) { + sh ''' + # lisk-core + npm i -g lisk-core@^4.0.0-rc.6 + npm i -g pm2 + pm2 stop jenkins/lisk-core/pm2.config.json + pm2 delete jenkins/lisk-core/pm2.config.json + pm2 flush + rm -rf ~/.lisk/ + lisk-core blockchain:import jenkins/lisk-core/snapshots/blockchain.tar.gz + LISK_CONFIG_FILE=$PWD/jenkins/lisk-core/config/config.json pm2 start jenkins/lisk-core/pm2.config.json + ''' + } + sleep(5) + } + } + } + stage('Start external services') { when { anyOf { branch 'development' @@ -87,12 +127,13 @@ pipeline { dir('lisk-service') { script { runServiceIfMissing('MySQL', './jenkins/mysql', MYSQL_PORT) - runServiceIfMissing('Lisk Core', './jenkins/lisk-core', LISK_CORE_WS_PORT) + runServiceIfMissing('Redis', './jenkins/redis', REDIS_PORT) } + sleep(5) } } } - stage('Run microservices') { + stage('Wait till indexing is complete') { when { anyOf { branch 'development' @@ -101,22 +142,26 @@ pipeline { } } steps { - script { echoBanner(STAGE_NAME) } - dir('lisk-service') { - ansiColor('xterm') { - dir('./') { + script { + def apiUrl = 'http://127.0.0.1:9901/api/v3/index/status' + def percentageIndexed = "0" + while (percentageIndexed != "100") { + def response = sh(script: "curl -s $apiUrl", returnStatus: true, returnStdout: true) + if (response == 0) { + def jsonString = sh(script: "curl -s $apiUrl | jq -r '.data.percentageIndexed'", returnStdout: true).trim() + percentageIndexed = jsonString + } + else { sh ''' - make build - ENABLE_HTTP_API=${ENABLE_HTTP_API} ENABLE_WS_API=${ENABLE_WS_API} LISK_APP_WS=${LISK_APP_WS} ENABLE_TESTING_MODE=${ENABLE_TESTING_MODE} make up + echo "Failed to fetch status" ''' } + sleep(30) } - sleep(120) - waitForHttp('http://127.0.0.1:9901/api/ready') } } } - stage('Run Tests') { + stage('Run tests') { when { anyOf { branch 'development' @@ -130,7 +175,7 @@ pipeline { script { echoBanner(STAGE_NAME) } dir('lisk-service') { nvm(readFile('.nvmrc').trim()) { - sh 'yarn run eslint' + sh 'yarn lint' } } } @@ -140,14 +185,17 @@ pipeline { script { echoBanner(STAGE_NAME) } dir('lisk-service') { nvm(readFile('.nvmrc').trim()) { - dir('./framework') { sh "yarn run test:functional" } - dir('./services/blockchain-app-registry') { sh "yarn run test:functional" } - dir('./services/blockchain-connector') { sh "yarn run test:functional" } - dir('./services/blockchain-indexer') { sh "yarn run test:functional" } - dir('./services/fee-estimator') { sh "yarn run test:functional" } - dir('./services/market') { sh "yarn run test:functional" } - dir('./services/transaction-statistics') { sh "yarn run test:functional" } - dir('./tests') { sh "yarn run test:functional" } + dir('./services/blockchain-app-registry') { sh "npm run test:functional" } + dir('./services/blockchain-indexer') { + sh "SERVICE_BROKER='nats://127.0.0.1:${SERVICE_BROKER_PORT}' SERVICE_INDEXER_CACHE_REDIS='redis://lisk:password@127.0.0.1:${REDIS_PORT}/2' SERVICE_INDEXER_REDIS_VOLATILE='redis://lisk:password@127.0.0.1:${REDIS_PORT}/3' SERVICE_MESSAGE_QUEUE_REDIS='redis://lisk:password@127.0.0.1:${REDIS_PORT}/4' npm run test:functional" + } + dir('./services/fee-estimator') { sh "npm run test:functional" } + dir('./services/market') { + sh "SERVICE_BROKER='nats://127.0.0.1:${SERVICE_BROKER_PORT}' SERVICE_MARKET_REDIS='redis://lisk:password@127.0.0.1:${REDIS_PORT}/10' npm run test:functional" + } + dir('./services/transaction-statistics') { sh "SERVICE_BROKER='nats://127.0.0.1:${SERVICE_BROKER_PORT}' npm run test:functional" } + dir('./framework') { sh "REDIS_URL='redis://lisk:password@127.0.0.1:${REDIS_PORT}/0' npm run test:functional" } + dir('./services/blockchain-connector') { sh "SERVICE_BROKER='nats://127.0.0.1:${SERVICE_BROKER_PORT}' npm run test:functional" } } } } @@ -157,7 +205,7 @@ pipeline { script { echoBanner(STAGE_NAME) } dir('lisk-service') { nvm(readFile('.nvmrc').trim()) { - dir('./tests') { sh 'yarn run test:integration:APIv3:SDKv6' } + dir('./tests') { sh "node runIntegrationTestsWithRetry.js" } } } } @@ -193,20 +241,20 @@ pipeline { } cleanup { script { - echoBanner('Cleaning up...') dir('lisk-service') { nvm(readFile('.nvmrc').trim()) { - echoBanner('Stopping MySQL') - dir('./jenkins/mysql') { sh "make down" } - echoBanner('Stopping Lisk Core') - dir('./jenkins/lisk-core') { sh "make down" } - echoBanner('Stopping all microservices and removing dependencies') sh ''' - make down + docker-compose -f jenkins/docker-compose.nightly.yml down --volumes --remove-orphans + pm2 stop jenkins/lisk-core/pm2.config.json + pm2 delete jenkins/lisk-core/pm2.config.json + pm2 flush make clean ''' + dir('./jenkins/mysql') { sh "make down" } + dir('./jenkins/redis') { sh "make down" } } } + cleanWs() } } } diff --git a/jenkins/docker-compose.nightly.yml b/jenkins/docker-compose.nightly.yml new file mode 100644 index 000000000..11f8cddb3 --- /dev/null +++ b/jenkins/docker-compose.nightly.yml @@ -0,0 +1,469 @@ +version: '3.3' +services: + nats: + image: nats:2.6-alpine + ports: + - '4222:4222' + volumes: + - ../docker/nats-server.conf:/etc/nats/nats-server.conf:ro + command: nats-server --config /etc/nats/nats-server.conf + networks: + - services_network + restart: always + healthcheck: + test: echo $$(wget --server-response http://nats:8222/varz 2>&1 | grep '200 OK') | grep '200' || exit 1 + + redis_persistent: + image: redis:7-alpine + volumes: + - ../docker/redis.persistent.conf:/etc/redis/redis.conf:ro + - redis-data:/data + networks: + - services_network + restart: always + command: redis-server /etc/redis/redis.conf + healthcheck: + test: redis-cli ping + + redis_volatile: + image: redis:7-alpine + volumes: + - ../docker/redis.volatile.conf:/etc/redis/redis.conf:ro + networks: + - services_network + restart: always + command: redis-server /etc/redis/redis.conf + healthcheck: + test: redis-cli ping + + mysql-primary: + image: mysql:8 + platform: linux/amd64 + command: mysqld --max_connections=500 + volumes: + - ../docker/mysql/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf + - mysql-primary-data:/var/lib/mysql + - ../docker/mysql/primary/init:/docker-entrypoint-initdb.d + - ../docker/mysql/mysql-healthcheck.sh:/healthcheck.sh + restart: always + networks: + - services_network + environment: + - MYSQL_ROOT_PASSWORD=password + - MYSQL_USER=lisk + - MYSQL_PASSWORD=password + - MYSQL_DATABASE=lisk + healthcheck: + test: ['CMD', 'bash', '/healthcheck.sh'] + + mysql-read-replica: + image: mysql:8 + depends_on: + mysql-primary: + condition: service_healthy + platform: linux/amd64 + command: mysqld --max_connections=500 + volumes: + - ../docker/mysql/read/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf + - ../docker/mysql/read/init:/docker-entrypoint-initdb.d + restart: always + expose: + - '3306' + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + endpoint_mode: vip + environment: + - MYSQL_ROOT_PASSWORD=password + healthcheck: + test: ['CMD', 'mysqladmin', 'ping', '-hlocalhost', '-ppassword'] + + mysql-read-replica-haproxy: + image: nginx:latest + restart: always + expose: + - '3307' + depends_on: + mysql-read-replica: + condition: service_healthy + volumes: + - ../docker/nginx.conf:/etc/nginx/nginx.conf:ro + networks: + - services_network + healthcheck: + test: ['CMD', 'service', 'nginx', 'status'] + + blockchain-app-registry: + image: lisk/service_blockchain_app_registry + depends_on: + nats: + condition: service_healthy + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + environment: + - SERVICE_BROKER=nats://nats:4222 + - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} + - SERVICE_APP_REGISTRY_MYSQL=mysql://lisk:password@mysql-primary:3306/lisk + - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} + - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} + - SERVICE_LOG_STDOUT=${SERVICE_LOG_STDOUT} + - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} + - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} + - DOCKER_HOST=${DOCKER_HOST} + - ENABLE_REBUILD_INDEX_AT_INIT=${ENABLE_REBUILD_INDEX_AT_INIT} + - GITHUB_ACCESS_TOKEN=${GITHUB_ACCESS_TOKEN} + - GITHUB_APP_REGISTRY_REPO=${GITHUB_APP_REGISTRY_REPO} + - GITHUB_APP_REGISTRY_REPO_BRANCH=${GITHUB_APP_REGISTRY_REPO_BRANCH} + - DEFAULT_APPS=${DEFAULT_APPS} + - JOB_INTERVAL_DELETE_NON_METADATA_FILES=${JOB_INTERVAL_DELETE_NON_METADATA_FILES} + - JOB_SCHEDULE_DELETE_NON_METADATA_FILES=${JOB_SCHEDULE_DELETE_NON_METADATA_FILES} + - JOB_INTERVAL_UPDATE_METADATA=${JOB_INTERVAL_UPDATE_METADATA} + - JOB_SCHEDULE_UPDATE_METADATA=${JOB_SCHEDULE_UPDATE_METADATA} + restart: always + + blockchain-connector: + image: lisk/service_blockchain_connector + depends_on: + nats: + condition: service_healthy + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + environment: + - SERVICE_BROKER=nats://nats:4222 + - GEOIP_JSON=${GEOIP_JSON} + - LISK_APP_WS=${LISK_APP_WS} + - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} + - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} + - SERVICE_LOG_STDOUT=${SERVICE_LOG_STDOUT} + - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} + - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} + - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} + - DOCKER_HOST=${DOCKER_HOST} + - USE_LISK_IPC_CLIENT=${USE_LISK_IPC_CLIENT} + - LISK_APP_DATA_PATH=${LISK_APP_DATA_PATH} + - GENESIS_BLOCK_URL=${GENESIS_BLOCK_URL} + - ENABLE_TESTING_MODE=${ENABLE_TESTING_MODE} + - ENABLE_BLOCK_CACHING=${ENABLE_BLOCK_CACHING} + - EXPIRY_IN_HOURS=${EXPIRY_IN_HOURS} + - CLIENT_INSTANTIATION_MAX_WAIT_TIME=${CLIENT_INSTANTIATION_MAX_WAIT_TIME} + - CLIENT_INSTANTIATION_RETRY_INTERVAL=${CLIENT_INSTANTIATION_RETRY_INTERVAL} + - CLIENT_ALIVE_ASSUMPTION_TIME=${CLIENT_ALIVE_ASSUMPTION_TIME} + - ENDPOINT_INVOKE_MAX_RETRIES=${ENDPOINT_INVOKE_MAX_RETRIES} + - ENDPOINT_INVOKE_RETRY_DELAY=${ENDPOINT_INVOKE_RETRY_DELAY} + - CONNECTOR_EXIT_DELAY_IN_HOURS=${CONNECTOR_EXIT_DELAY_IN_HOURS} + - JOB_INTERVAL_CACHE_CLEANUP=${JOB_INTERVAL_CACHE_CLEANUP} + - JOB_SCHEDULE_CACHE_CLEANUP=${JOB_SCHEDULE_CACHE_CLEANUP} + - JOB_INTERVAL_REFRESH_PEERS=${JOB_INTERVAL_REFRESH_PEERS} + - JOB_SCHEDULE_REFRESH_PEERS=${JOB_SCHEDULE_REFRESH_PEERS} + restart: always + extra_hosts: + - 'host.docker.internal:host-gateway' + + blockchain-indexer: + image: lisk/service_blockchain_indexer + depends_on: + nats: + condition: service_healthy + redis_persistent: + condition: service_healthy + redis_volatile: + condition: service_healthy + mysql-primary: + condition: service_healthy + mysql-read-replica-haproxy: + condition: service_healthy + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + environment: + - SERVICE_BROKER=nats://nats:4222 + - SERVICE_INDEXER_CACHE_REDIS=redis://redis_persistent:6379/0 + - SERVICE_INDEXER_REDIS_VOLATILE=redis://redis_volatile:6379/0 + - SERVICE_MESSAGE_QUEUE_REDIS=redis://redis_persistent:6379/8 + - SERVICE_INDEXER_MYSQL=mysql://lisk:password@mysql-primary:3306/lisk + - SERVICE_INDEXER_MYSQL_READ_REPLICA=mysql://reader:password@mysql-read-replica-haproxy:3307/lisk + - ENABLE_DATA_RETRIEVAL_MODE=${ENABLE_DATA_RETRIEVAL_MODE} + - ENABLE_INDEXING_MODE=${ENABLE_INDEXING_MODE} + - ENABLE_PERSIST_EVENTS=${ENABLE_PERSIST_EVENTS} + - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} + - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} + - SERVICE_LOG_STDOUT=${SERVICE_LOG_STDOUT} + - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} + - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} + - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} + - ENABLE_APPLY_SNAPSHOT=${ENABLE_APPLY_SNAPSHOT} + - DURABILITY_VERIFY_FREQUENCY=${DURABILITY_VERIFY_FREQUENCY} + - INDEX_SNAPSHOT_URL=${INDEX_SNAPSHOT_URL} + - ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP=${ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP} + - DOCKER_HOST=${DOCKER_HOST} + - MAINCHAIN_SERVICE_URL=${MAINCHAIN_SERVICE_URL} + - LISK_STATIC=${LISK_STATIC} + - DEVNET_MAINCHAIN_URL=${DEVNET_MAINCHAIN_URL} + - ACCOUNT_BALANCE_UPDATE_BATCH_SIZE=${ACCOUNT_BALANCE_UPDATE_BATCH_SIZE} + - INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT=${INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT} + - JOB_INTERVAL_DELETE_SERIALIZED_EVENTS=${JOB_INTERVAL_DELETE_SERIALIZED_EVENTS} + - JOB_SCHEDULE_DELETE_SERIALIZED_EVENTS=${JOB_SCHEDULE_DELETE_SERIALIZED_EVENTS} + - JOB_INTERVAL_REFRESH_VALIDATORS=${JOB_INTERVAL_REFRESH_VALIDATORS} + - JOB_SCHEDULE_REFRESH_VALIDATORS=${JOB_SCHEDULE_REFRESH_VALIDATORS} + - JOB_INTERVAL_VALIDATE_VALIDATORS_RANK=${JOB_INTERVAL_VALIDATE_VALIDATORS_RANK} + - JOB_SCHEDULE_VALIDATE_VALIDATORS_RANK=${JOB_SCHEDULE_VALIDATE_VALIDATORS_RANK} + - JOB_INTERVAL_REFRESH_INDEX_STATUS=${JOB_INTERVAL_REFRESH_INDEX_STATUS} + - JOB_SCHEDULE_REFRESH_INDEX_STATUS=${JOB_SCHEDULE_REFRESH_INDEX_STATUS} + - JOB_INTERVAL_REFRESH_BLOCKCHAIN_APPS_STATS=${JOB_INTERVAL_REFRESH_BLOCKCHAIN_APPS_STATS} + - JOB_SCHEDULE_REFRESH_BLOCKCHAIN_APPS_STATS=${JOB_SCHEDULE_REFRESH_BLOCKCHAIN_APPS_STATS} + - JOB_INTERVAL_REFRESH_ACCOUNT_KNOWLEDGE=${JOB_INTERVAL_REFRESH_ACCOUNT_KNOWLEDGE} + - JOB_SCHEDULE_REFRESH_ACCOUNT_KNOWLEDGE=${JOB_SCHEDULE_REFRESH_ACCOUNT_KNOWLEDGE} + - JOB_INTERVAL_DELETE_FINALIZED_CCU_METADATA=${JOB_INTERVAL_DELETE_FINALIZED_CCU_METADATA} + - JOB_SCHEDULE_DELETE_FINALIZED_CCU_METADATA=${JOB_SCHEDULE_DELETE_FINALIZED_CCU_METADATA} + - JOB_INTERVAL_TRIGGER_ACCOUNT_UPDATES=${JOB_INTERVAL_TRIGGER_ACCOUNT_UPDATES} + - JOB_SCHEDULE_TRIGGER_ACCOUNT_UPDATES=${JOB_SCHEDULE_TRIGGER_ACCOUNT_UPDATES} + - ESTIMATES_BUFFER_BYTES_LENGTH=${ESTIMATES_BUFFER_BYTES_LENGTH} + restart: always + + blockchain-coordinator: + image: lisk/service_blockchain_coordinator + depends_on: + nats: + condition: service_healthy + redis_persistent: + condition: service_healthy + blockchain-indexer: + condition: service_started + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + environment: + - SERVICE_BROKER=nats://nats:4222 + - SERVICE_MESSAGE_QUEUE_REDIS=redis://redis_persistent:6379/8 + - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} + - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} + - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} + - SERVICE_LOG_STDOUT=${SERVICE_LOG_STDOUT} + - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} + - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} + - DOCKER_HOST=${DOCKER_HOST} + - INDEX_MISSING_BLOCKS_SKIP_THRESHOLD=${INDEX_MISSING_BLOCKS_SKIP_THRESHOLD} + - INDEX_MISSING_BLOCKS_MAX_SCHEDULE=${INDEX_MISSING_BLOCKS_MAX_SCHEDULE} + - JOB_INTERVAL_INDEX_MISSING_BLOCKS=${JOB_INTERVAL_INDEX_MISSING_BLOCKS} + - JOB_SCHEDULE_INDEX_MISSING_BLOCKS=${JOB_SCHEDULE_INDEX_MISSING_BLOCKS} + restart: always + + transaction-statistics: + image: lisk/service_transaction_statistics + depends_on: + nats: + condition: service_healthy + redis_persistent: + condition: service_healthy + mysql-primary: + condition: service_healthy + mysql-read-replica-haproxy: + condition: service_healthy + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + environment: + - SERVICE_BROKER=nats://nats:4222 + - SERVICE_STATISTICS_REDIS=redis://redis_persistent:6379/5 + - SERVICE_STATISTICS_MYSQL=mysql://lisk:password@mysql-primary:3306/lisk + - SERVICE_STATISTICS_MYSQL_READ_REPLICA=mysql://reader:password@mysql-read-replica-haproxy:3307/lisk + - TRANSACTION_STATS_HISTORY_LENGTH_DAYS=${TRANSACTION_STATS_HISTORY_LENGTH_DAYS} + - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} + - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} + - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} + - SERVICE_LOG_STDOUT=${SERVICE_LOG_STDOUT} + - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} + - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} + - DOCKER_HOST=${DOCKER_HOST} + - JOB_INTERVAL_REFRESH_TRANSACTION_STATS=${JOB_INTERVAL_REFRESH_TRANSACTION_STATS} + - JOB_SCHEDULE_REFRESH_TRANSACTION_STATS=${JOB_SCHEDULE_REFRESH_TRANSACTION_STATS} + - JOB_INTERVAL_VERIFY_TRANSACTION_STATS=${JOB_INTERVAL_VERIFY_TRANSACTION_STATS} + - JOB_SCHEDULE_VERIFY_TRANSACTION_STATS=${JOB_SCHEDULE_VERIFY_TRANSACTION_STATS} + restart: always + + fee-estimator: + image: lisk/service_fee_estimator + depends_on: + nats: + condition: service_healthy + redis_persistent: + condition: service_healthy + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + environment: + - SERVICE_BROKER=nats://nats:4222 + - SERVICE_FEE_ESTIMATOR_CACHE=redis://redis_persistent:6379/6 + - ENABLE_FEE_ESTIMATOR_QUICK=${ENABLE_FEE_ESTIMATOR_QUICK} + - ENABLE_FEE_ESTIMATOR_FULL=${ENABLE_FEE_ESTIMATOR_FULL} + - FEE_EST_COLD_START_BATCH_SIZE=${FEE_EST_COLD_START_BATCH_SIZE} + - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} + - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} + - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} + - SERVICE_LOG_STDOUT=${SERVICE_LOG_STDOUT} + - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} + - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} + - DOCKER_HOST=${DOCKER_HOST} + - FEE_EST_DEFAULT_START_BLOCK_HEIGHT=${FEE_EST_DEFAULT_START_BLOCK_HEIGHT} + - FEE_EST_EMA_BATCH_SIZE=${FEE_EST_EMA_BATCH_SIZE} + - FEE_EST_EMA_DECAY_RATE=${FEE_EST_EMA_DECAY_RATE} + - FEE_EST_WAVG_DECAY_PERCENTAGE=${FEE_EST_WAVG_DECAY_PERCENTAGE} + + restart: always + + gateway: + image: lisk/service_gateway + depends_on: + nats: + condition: service_healthy + redis_volatile: + condition: service_healthy + blockchain-connector: + condition: service_started + blockchain-indexer: + condition: service_started + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + environment: + - SERVICE_BROKER=nats://nats:4222 + - PORT=${PORT} + - HOST=${HOST} + - SERVICE_GATEWAY_REDIS_VOLATILE=redis://redis_volatile:6379/1 + - ENABLE_HTTP_API=${ENABLE_HTTP_API} + - ENABLE_WS_API=${ENABLE_WS_API} + - HTTP_CACHE_CONTROL_DIRECTIVES=${HTTP_CACHE_CONTROL_DIRECTIVES} + - ENABLE_HTTP_CACHE_CONTROL=${ENABLE_HTTP_CACHE_CONTROL} + - ENABLE_REVERSE_PROXY_TIMEOUT_SETTINGS=${ENABLE_REVERSE_PROXY_TIMEOUT_SETTINGS} + - HTTP_KEEP_ALIVE_TIMEOUT=${HTTP_KEEP_ALIVE_TIMEOUT} + - HTTP_HEADERS_TIMEOUT=${HTTP_HEADERS_TIMEOUT} + - HTTP_RATE_LIMIT_ENABLE=${HTTP_RATE_LIMIT_ENABLE} + - HTTP_RATE_LIMIT_CONNECTIONS=${HTTP_RATE_LIMIT_CONNECTIONS} + - HTTP_RATE_LIMIT_WINDOW=${HTTP_RATE_LIMIT_WINDOW} + - HTTP_RATE_LIMIT_ENABLE_X_FORWARDED_FOR=${HTTP_RATE_LIMIT_ENABLE_X_FORWARDED_FOR} + - HTTP_RATE_LIMIT_NUM_KNOWN_PROXIES=${HTTP_RATE_LIMIT_NUM_KNOWN_PROXIES} + - WS_RATE_LIMIT_ENABLE=${WS_RATE_LIMIT_ENABLE} + - WS_RATE_LIMIT_CONNECTIONS=${WS_RATE_LIMIT_CONNECTIONS} + - WS_RATE_LIMIT_DURATION=${WS_RATE_LIMIT_DURATION} + - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} + - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} + - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} + - SERVICE_LOG_STDOUT=${SERVICE_LOG_STDOUT} + - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} + - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} + - DOCKER_HOST=${DOCKER_HOST} + - JSON_RPC_STRICT_MODE=${JSON_RPC_STRICT_MODE} + - ENABLE_REQUEST_CACHING=${ENABLE_REQUEST_CACHING} + - GATEWAY_DEPENDENCIES=${GATEWAY_DEPENDENCIES} + - CORS_ALLOWED_ORIGIN=${CORS_ALLOWED_ORIGIN} + - JOB_INTERVAL_UPDATE_READINESS_STATUS=${JOB_INTERVAL_UPDATE_READINESS_STATUS} + - JOB_SCHEDULE_UPDATE_READINESS_STATUS=${JOB_SCHEDULE_UPDATE_READINESS_STATUS} + restart: always + ports: + - ${HOST:-0.0.0.0}:${PORT:-9901}:${PORT:-9901} + healthcheck: + test: curl --fail http://gateway:${PORT:-9901}/api/v3/blocks + + market: + image: lisk/service_market + depends_on: + nats: + condition: service_healthy + redis_persistent: + condition: service_healthy + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + environment: + - SERVICE_BROKER=nats://nats:4222 + - SERVICE_MARKET_REDIS=redis://redis_persistent:6379/2 + - EXCHANGERATESAPI_IO_API_KEY=${EXCHANGERATESAPI_IO_API_KEY} + - SERVICE_MARKET_FIAT_CURRENCIES=${SERVICE_MARKET_FIAT_CURRENCIES} + - SERVICE_MARKET_TARGET_PAIRS=${SERVICE_MARKET_TARGET_PAIRS} + - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} + - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} + - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} + - SERVICE_LOG_STDOUT=${SERVICE_LOG_STDOUT} + - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} + - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} + - DOCKER_HOST=${DOCKER_HOST} + - JOB_INTERVAL_REFRESH_PRICES_BINANCE=${JOB_INTERVAL_REFRESH_PRICES_BINANCE} + - JOB_SCHEDULE_REFRESH_PRICES_BINANCE=${JOB_SCHEDULE_REFRESH_PRICES_BINANCE} + - JOB_INTERVAL_REFRESH_PRICES_BITTREX=${JOB_INTERVAL_REFRESH_PRICES_BITTREX} + - JOB_SCHEDULE_REFRESH_PRICES_BITTREX=${JOB_SCHEDULE_REFRESH_PRICES_BITTREX} + - JOB_INTERVAL_REFRESH_PRICES_EXCHANGERATESAPI=${JOB_INTERVAL_REFRESH_PRICES_EXCHANGERATESAPI} + - JOB_SCHEDULE_REFRESH_PRICES_EXCHANGERATESAPI=${JOB_SCHEDULE_REFRESH_PRICES_EXCHANGERATESAPI} + - JOB_INTERVAL_REFRESH_PRICES_KRAKEN=${JOB_INTERVAL_REFRESH_PRICES_KRAKEN} + - JOB_SCHEDULE_REFRESH_PRICES_KRAKEN=${JOB_SCHEDULE_REFRESH_PRICES_KRAKEN} + - JOB_INTERVAL_UPDATE_PRICES=${JOB_INTERVAL_UPDATE_PRICES} + - JOB_SCHEDULE_UPDATE_PRICES=${JOB_SCHEDULE_UPDATE_PRICES} + restart: always + + export: + image: lisk/service_export + depends_on: + nats: + condition: service_healthy + redis_persistent: + condition: service_healthy + redis_volatile: + condition: service_healthy + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + environment: + - SERVICE_BROKER=nats://nats:4222 + - SERVICE_EXPORT_REDIS=redis://redis_persistent:6379/3 + - SERVICE_EXPORT_REDIS_VOLATILE=redis://redis_volatile:6379/3 + - SERVICE_EXPORT_PARTIALS=/home/lisk/lisk-service/export/data/partials + - EXPORT_S3_BUCKET_NAME_PARTIALS=${EXPORT_S3_BUCKET_NAME_PARTIALS} + - SERVICE_EXPORT_STATIC=/home/lisk/lisk-service/export/data/static + - EXPORT_S3_BUCKET_NAME_EXPORTS=${EXPORT_S3_BUCKET_NAME_EXPORTS} + - SERVICE_BROKER_TIMEOUT=${SERVICE_BROKER_TIMEOUT} + - SERVICE_LOG_LEVEL=${SERVICE_LOG_LEVEL} + - SERVICE_LOG_CONSOLE=${SERVICE_LOG_CONSOLE} + - SERVICE_LOG_STDOUT=${SERVICE_LOG_STDOUT} + - SERVICE_LOG_GELF=${SERVICE_LOG_GELF} + - SERVICE_LOG_FILE=${SERVICE_LOG_FILE} + - DOCKER_HOST=${DOCKER_HOST} + - EXPORT_S3_ENDPOINT=${EXPORT_S3_ENDPOINT} + - EXPORT_S3_ACCESS_KEY=${EXPORT_S3_ACCESS_KEY} + - EXPORT_S3_SECRET_KEY=${EXPORT_S3_SECRET_KEY} + - EXPORT_S3_SESSION_TOKEN=${EXPORT_S3_SESSION_TOKEN} + - EXPORT_S3_REGION=${EXPORT_S3_REGION} + - EXPORT_S3_BUCKET_NAME=${EXPORT_S3_BUCKET_NAME} + - JOB_INTERVAL_CACHE_PURGE=${JOB_INTERVAL_CACHE_PURGE} + - JOB_SCHEDULE_CACHE_PURGE=${JOB_SCHEDULE_CACHE_PURGE} + volumes: + - export-data:/home/lisk/lisk-service/export/data + restart: always + +networks: + services_network: + +volumes: + mysql-primary-data: + redis-data: + export-data: diff --git a/jenkins/lisk-core/config/config.json b/jenkins/lisk-core/config/config.json new file mode 100644 index 000000000..b52ca389f --- /dev/null +++ b/jenkins/lisk-core/config/config.json @@ -0,0 +1,8 @@ +{ + "rpc": { + "modes": ["ws"], + "port": 7887, + "host": "0.0.0.0", + "allowedMethods": ["*"] + } +} diff --git a/jenkins/lisk-core/config/genesis_block.json b/jenkins/lisk-core/config/genesis_block.json index 436378d85..fd56ed088 100644 --- a/jenkins/lisk-core/config/genesis_block.json +++ b/jenkins/lisk-core/config/genesis_block.json @@ -4380,4 +4380,4 @@ } }, "payload": [] -} \ No newline at end of file +} diff --git a/jenkins/lisk-core/docker-compose.yml b/jenkins/lisk-core/docker-compose.yml index ab02e655d..da6e9a257 100644 --- a/jenkins/lisk-core/docker-compose.yml +++ b/jenkins/lisk-core/docker-compose.yml @@ -1,13 +1,13 @@ version: '3' services: lisk-core: - image: lisk/core:4.0.0-beta.0 + image: lisk/core:4.0.0-rc.7 platform: linux/amd64 volumes: - ./snapshots/:/tmp/snapshots - ./entrypoint.sh:/entrypoint.sh ports: - - "7887:7887" + - '7887:7887' restart: always entrypoint: ['sh', '/entrypoint.sh'] environment: diff --git a/jenkins/lisk-core/pm2.config.json b/jenkins/lisk-core/pm2.config.json new file mode 100644 index 000000000..443ce5789 --- /dev/null +++ b/jenkins/lisk-core/pm2.config.json @@ -0,0 +1,7 @@ +{ + "name": "lisk-core", + "script": "lisk-core start", + "env": { + "LISK_NETWORK": "devnet" + } +} diff --git a/jenkins/lisk-core/snapshots/blockchain.tar.gz b/jenkins/lisk-core/snapshots/blockchain.tar.gz index 949f06208..1aad88723 100644 Binary files a/jenkins/lisk-core/snapshots/blockchain.tar.gz and b/jenkins/lisk-core/snapshots/blockchain.tar.gz differ diff --git a/jenkins/mariadb-with-replication/Makefile b/jenkins/mariadb-with-replication/Makefile new file mode 100644 index 000000000..e8d0d1048 --- /dev/null +++ b/jenkins/mariadb-with-replication/Makefile @@ -0,0 +1,21 @@ +.PHONY: clean up down +all: up + +compose := docker-compose -f docker-compose.yml + +up: + $(compose) up --detach + +down: + $(compose) down --volumes --remove-orphans + +logs: + $(compose) logs + +clean: down + +cli-primary: + $(compose) exec mysql-primary mysql -u root -ppassword lisk + +cli-replica: + $(compose) exec mysql-read-replica mysql -u root -ppassword lisk diff --git a/jenkins/mariadb-with-replication/docker-compose.yml b/jenkins/mariadb-with-replication/docker-compose.yml new file mode 100644 index 000000000..55ee25559 --- /dev/null +++ b/jenkins/mariadb-with-replication/docker-compose.yml @@ -0,0 +1,64 @@ +version: '3.3' +services: + mysql-primary: + image: mariadb:10 + container_name: mysql-primary + command: mysqld + volumes: + - ../../docker/mariadb/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf + - mysql-primary-data:/var/lib/mysql + - ../../docker/mariadb/primary/init:/docker-entrypoint-initdb.d + restart: always + networks: + - services_network + environment: + - MYSQL_ROOT_PASSWORD=password + - MYSQL_USER=lisk + - MYSQL_PASSWORD=password + ports: + - '127.0.0.1:3306:3306' + healthcheck: + test: ['CMD', 'mysqladmin', 'ping', '-hlocalhost', '-ppassword'] + + mysql-read-replica: + image: mariadb:10 + depends_on: + mysql-primary: + condition: service_healthy + command: mysqld + volumes: + - ../../docker/mariadb/read/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf + - ../../docker/mariadb/read/init:/docker-entrypoint-initdb.d + restart: always + expose: + - '3306' + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + endpoint_mode: vip + environment: + - MYSQL_ROOT_PASSWORD=password + healthcheck: + test: ['CMD', 'mysqladmin', 'ping', '-hlocalhost', '-ppassword'] + + mysql-read-replica-haproxy: + image: nginx:latest + depends_on: + mysql-read-replica: + condition: service_healthy + volumes: + - ../../docker/nginx.conf:/etc/nginx/nginx.conf:ro + ports: + - '127.0.0.1:3307:3307' + networks: + - services_network + healthcheck: + test: ['CMD', 'service', 'nginx', 'status'] + +networks: + services_network: + +volumes: + mysql-primary-data: diff --git a/jenkins/mariadb-with-replication/mysql-healthcheck.sh b/jenkins/mariadb-with-replication/mysql-healthcheck.sh new file mode 100644 index 000000000..7b5781e33 --- /dev/null +++ b/jenkins/mariadb-with-replication/mysql-healthcheck.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +mysql -h"$HOSTNAME" -u"$MARIADB_USER" -p"$MARIADB_PASSWORD" --silent -e"use $MARIADB_DATABASE" diff --git a/jenkins/mariadb/docker-compose.yml b/jenkins/mariadb/docker-compose.yml index 671e45fa9..2585d8549 100644 --- a/jenkins/mariadb/docker-compose.yml +++ b/jenkins/mariadb/docker-compose.yml @@ -3,11 +3,11 @@ # See https://docs.docker.com/compose/extends/#example-use-case version: '3.3' services: - mariadb: - image: mariadb:10.7 - command: mysqld --default-authentication-plugin=mysql_native_password + image: mariadb:10 + command: mysqld --max_connections=500 volumes: + - ../../docker/mariadb/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - db-data:/var/lib/mysql - ./mysql-healthcheck.sh:/healthcheck.sh restart: always @@ -17,7 +17,7 @@ services: MARIADB_USER: lisk MARIADB_PASSWORD: password ports: - - "127.0.0.1:3306:3306" + - '127.0.0.1:3306:3306' healthcheck: test: ['CMD', 'bash', '/healthcheck.sh'] diff --git a/jenkins/mysql-with-replication/docker-compose.yml b/jenkins/mysql-with-replication/docker-compose.yml index d62a0b986..88a429a44 100644 --- a/jenkins/mysql-with-replication/docker-compose.yml +++ b/jenkins/mysql-with-replication/docker-compose.yml @@ -1,11 +1,10 @@ version: '3.3' services: - mysql-primary: image: mysql:8 container_name: mysql-primary platform: linux/amd64 - command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max_connections=500 + command: mysqld volumes: - ../../docker/mysql/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - mysql-primary-data:/var/lib/mysql @@ -18,16 +17,9 @@ services: - MYSQL_USER=lisk - MYSQL_PASSWORD=password ports: - - "127.0.0.1:3306:3306" + - '127.0.0.1:3306:3306' healthcheck: - test: - [ - "CMD", - "mysqladmin", - "ping", - "-hlocalhost", - "-ppassword" - ] + test: ['CMD', 'mysqladmin', 'ping', '-hlocalhost', '-ppassword'] mysql-read-replica: image: mysql:8 @@ -35,13 +27,13 @@ services: mysql-primary: condition: service_healthy platform: linux/amd64 - command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max_connections=500 + command: mysqld volumes: - ../../docker/mysql/read/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - ../../docker/mysql/read/init:/docker-entrypoint-initdb.d restart: always expose: - - "3306" + - '3306' networks: - services_network deploy: @@ -51,14 +43,7 @@ services: environment: - MYSQL_ROOT_PASSWORD=password healthcheck: - test: - [ - "CMD", - "mysqladmin", - "ping", - "-hlocalhost", - "-ppassword" - ] + test: ['CMD', 'mysqladmin', 'ping', '-hlocalhost', '-ppassword'] mysql-read-replica-haproxy: image: nginx:latest @@ -68,11 +53,11 @@ services: volumes: - ../../docker/nginx.conf:/etc/nginx/nginx.conf:ro ports: - - "127.0.0.1:3307:3307" + - '127.0.0.1:3307:3307' networks: - services_network healthcheck: - test: [ "CMD", "service", "nginx", "status" ] + test: ['CMD', 'service', 'nginx', 'status'] networks: services_network: diff --git a/jenkins/mysql/docker-compose.yml b/jenkins/mysql/docker-compose.yml index 637d95929..1ab81aa5b 100644 --- a/jenkins/mysql/docker-compose.yml +++ b/jenkins/mysql/docker-compose.yml @@ -3,12 +3,12 @@ # See https://docs.docker.com/compose/extends/#example-use-case version: '3.3' services: - mysql: image: mysql:8 platform: linux/amd64 - command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max_connections=500 + command: mysqld --max_connections=500 volumes: + - ../../docker/mysql/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - db-data:/var/lib/mysql - ./mysql-healthcheck.sh:/healthcheck.sh restart: always @@ -18,9 +18,9 @@ services: MYSQL_USER: lisk MYSQL_PASSWORD: password ports: - - "127.0.0.1:3306:3306" + - '127.0.0.1:3306:3306' healthcheck: - test: [ 'CMD', 'bash', '/healthcheck.sh' ] + test: ['CMD', 'bash', '/healthcheck.sh'] volumes: db-data: diff --git a/jenkins/redis/docker-compose.yml b/jenkins/redis/docker-compose.yml index c571e6cf9..1bd3057a6 100644 --- a/jenkins/redis/docker-compose.yml +++ b/jenkins/redis/docker-compose.yml @@ -1,12 +1,11 @@ version: '3.3' services: - redis_service_dev: - image: redis:5-alpine + image: redis:7-alpine volumes: - ./redis.volatile.conf:/etc/redis/redis.conf:ro ports: - - "6381:6379" + - '6381:6379' restart: always command: redis-server /etc/redis/redis.conf healthcheck: diff --git a/jenkins/redis/redis.persistent.conf b/jenkins/redis/redis.persistent.conf index 10acb9fa7..6ffc52281 100644 --- a/jenkins/redis/redis.persistent.conf +++ b/jenkins/redis/redis.persistent.conf @@ -24,3 +24,8 @@ client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 dynamic-hz yes rdb-save-incremental-fsync yes + +# ACL rule for a lisk user +requirepass password +user lisk on allkeys allchannels allcommands >password +user default off diff --git a/jenkins/redis/redis.volatile.conf b/jenkins/redis/redis.volatile.conf index 2c9696ae5..ec2997275 100644 --- a/jenkins/redis/redis.volatile.conf +++ b/jenkins/redis/redis.volatile.conf @@ -13,3 +13,8 @@ appendonly no # Memory management maxmemory 512mb maxmemory-policy allkeys-lru + +# ACL rule for a lisk user +requirepass password +user lisk on allkeys allchannels allcommands >password +user default off diff --git a/jenkins/xJenkinsfile.deployment b/jenkins/xJenkinsfile.deployment index 5cd7652f1..1065bda3d 100644 --- a/jenkins/xJenkinsfile.deployment +++ b/jenkins/xJenkinsfile.deployment @@ -8,7 +8,7 @@ pipeline { agent { node { label 'lisk-service-dev' } } when { branch 'development' } steps { - sh 'make build' + sh 'make build-images' } } stage('Deploy lisk-service') { diff --git a/jenkins/xJenkinsfile.deployment.mainnet b/jenkins/xJenkinsfile.deployment.mainnet index 67ed8a195..6ff48267d 100644 --- a/jenkins/xJenkinsfile.deployment.mainnet +++ b/jenkins/xJenkinsfile.deployment.mainnet @@ -9,7 +9,7 @@ pipeline { agent any when { branch 'development' } steps { - sh 'make build' + sh 'make build-images' } } stage('Deploy lisk-service Mainnet') { diff --git a/known_accounts/known_betanet.json b/known_accounts/known_betanet.json index e309c9d60..0ba823adb 100644 --- a/known_accounts/known_betanet.json +++ b/known_accounts/known_betanet.json @@ -1,6 +1,6 @@ { - "address" : { "owner" : "owner", "description" : "description" }, - "9710347496489996585L": { "owner" : "Genesis Account", "description" : "Initial supply" }, - "4434465033793042389L": { "owner" : "Faucet Account", "description" : "Disposable supply" }, - "8816471194319848508L": { "owner" : "Origin Account", "description": "Initial supply"} + "address": { "owner": "owner", "description": "description" }, + "9710347496489996585L": { "owner": "Genesis Account", "description": "Initial supply" }, + "4434465033793042389L": { "owner": "Faucet Account", "description": "Disposable supply" }, + "8816471194319848508L": { "owner": "Origin Account", "description": "Initial supply" } } diff --git a/known_accounts/known_mainnet.json b/known_accounts/known_mainnet.json index 73989836e..1a7c9008c 100644 --- a/known_accounts/known_mainnet.json +++ b/known_accounts/known_mainnet.json @@ -1,25 +1,49 @@ { - "address": { "owner": "owner", "description": "description" }, - "lskeqjd8qhzhayd6yykg82xqzvd7fzg74ghxxmnoe": { "owner": "Oliver", "description": "Personal Assets" }, - "lsko4uo4fgkv53wvon82697asfy5hojw7yzs9ptjg": { "owner": "Max", "description": "Personal Assets" }, - "lsk759gxzh3zp2h9otfmbxc7fp66jpbdyjbr7am8k": { "owner": "Lisk Foundation", "description": "Bounty Assets" }, - "lskfoh99z4p27jj3xz764vczdaj47nkhqamajpxcp": { "owner": "Lisk Foundation", "description": "Adviser Assets" }, - "lskqbhxe6h7ymjkg6h4dq6s88ptm4qh3jke7g4nva": { "owner": "Lisk Foundation", "description": "General Assets" }, - "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu": { "owner": "Poloniex", "description": "Hot Wallet" }, - "lskb428h99jssnq2nqpp6rctwyqfpw4ordozsde9p": { "owner": "Bittrex", "description": "Hot Wallet" }, - "lskvpm8x6x8vqs5jvff54x392f7vmhfnde92seqo7": { "owner": "Yobit", "description": "Hot Wallet" }, - "lskq2x2qfrz9gboxmhj2dm82h26re4vgcpycre4ap": { "owner": "BitBay", "description": "Cold Wallet" }, - "lsktbdkqr8axg3rovndj997dveyrfctrpo95e9byc": { "owner": "BitBay", "description": "Hot Wallet" }, - "lskfr4ebbwm55r6p97ftz6uae5tapefzfkopyhs98": { "owner": "Changelly", "description": "Hot Wallet" }, - "lskrvsrdo7m64mh92vvekcv55hk4de93ud4otum8g": { "owner": "HitBTC", "description": "Hot Wallet" }, - "lsk46tq99u8p7yhukjbg489gjcajxky3zw6wwbgtz": { "owner": "Binance", "description": "Hot Wallet" }, - "lskmpb6xzeux5tk65qm7ffs5qdtm7cu5b2rmog6tr": { "owner": "Binance", "description": "Cold Wallet" }, - "lskbwvtd6sp5f5tpvfnu2v3tuvqbwyyfqqeadcawb": { "owner": "Binance", "description": "Cold Wallet" }, - "lskbmwp8gboxzarq8cu9tm99vn5d4uc5k64adpd6u": { "owner": "Coincheck", "description": "Hot Wallet" }, - "lskbqdbu354hz87mnc7pddk8ywef33jnuqc5odhbp": { "owner": "Coincheck", "description": "Cold Wallet" }, - "lskrp589yeykovh47stbf8woj5banujdfsz9oapcf": { "owner": "Coincheck", "description": "Hot Wallet" }, - "lskutsunurnarjve65ufeon4bu2c2ywhdvrbmxvuv": { "owner": "UPbit", "description": "Hot Wallet" }, - "lskxqxgkkzdb7uxjqkj9gxtpogsd4kgm4kkb883fj": { "owner": "UPbit", "description": "Cold Wallet" }, - "lskhysxtgcjjen7tsn8su64y3fs85knymvugw3wyt": { "owner": "Kraken", "description": "Hot Wallet" }, - "lsk55wjqhqayj99rbmwwodsbaoq4dt4tvf762abds": { "owner": "BitFlyer", "description": "Cold Wallet" } + "address": { "owner": "owner", "description": "description" }, + "lskeqjd8qhzhayd6yykg82xqzvd7fzg74ghxxmnoe": { + "owner": "Oliver", + "description": "Personal Assets" + }, + "lsko4uo4fgkv53wvon82697asfy5hojw7yzs9ptjg": { "owner": "Max", "description": "Personal Assets" }, + "lsk759gxzh3zp2h9otfmbxc7fp66jpbdyjbr7am8k": { + "owner": "Lisk Foundation", + "description": "Bounty Assets" + }, + "lskfoh99z4p27jj3xz764vczdaj47nkhqamajpxcp": { + "owner": "Lisk Foundation", + "description": "Adviser Assets" + }, + "lskqbhxe6h7ymjkg6h4dq6s88ptm4qh3jke7g4nva": { + "owner": "Lisk Foundation", + "description": "General Assets" + }, + "lsk24cd35u4jdq8szo3pnsqe5dsxwrnazyqqqg5eu": { "owner": "Poloniex", "description": "Hot Wallet" }, + "lskb428h99jssnq2nqpp6rctwyqfpw4ordozsde9p": { "owner": "Bittrex", "description": "Hot Wallet" }, + "lskvpm8x6x8vqs5jvff54x392f7vmhfnde92seqo7": { "owner": "Yobit", "description": "Hot Wallet" }, + "lskq2x2qfrz9gboxmhj2dm82h26re4vgcpycre4ap": { "owner": "BitBay", "description": "Cold Wallet" }, + "lsktbdkqr8axg3rovndj997dveyrfctrpo95e9byc": { "owner": "BitBay", "description": "Hot Wallet" }, + "lskfr4ebbwm55r6p97ftz6uae5tapefzfkopyhs98": { + "owner": "Changelly", + "description": "Hot Wallet" + }, + "lskrvsrdo7m64mh92vvekcv55hk4de93ud4otum8g": { "owner": "HitBTC", "description": "Hot Wallet" }, + "lsk46tq99u8p7yhukjbg489gjcajxky3zw6wwbgtz": { "owner": "Binance", "description": "Hot Wallet" }, + "lskmpb6xzeux5tk65qm7ffs5qdtm7cu5b2rmog6tr": { "owner": "Binance", "description": "Cold Wallet" }, + "lskbwvtd6sp5f5tpvfnu2v3tuvqbwyyfqqeadcawb": { "owner": "Binance", "description": "Cold Wallet" }, + "lskbmwp8gboxzarq8cu9tm99vn5d4uc5k64adpd6u": { + "owner": "Coincheck", + "description": "Hot Wallet" + }, + "lskbqdbu354hz87mnc7pddk8ywef33jnuqc5odhbp": { + "owner": "Coincheck", + "description": "Cold Wallet" + }, + "lskrp589yeykovh47stbf8woj5banujdfsz9oapcf": { + "owner": "Coincheck", + "description": "Hot Wallet" + }, + "lskutsunurnarjve65ufeon4bu2c2ywhdvrbmxvuv": { "owner": "UPbit", "description": "Hot Wallet" }, + "lskxqxgkkzdb7uxjqkj9gxtpogsd4kgm4kkb883fj": { "owner": "UPbit", "description": "Cold Wallet" }, + "lskhysxtgcjjen7tsn8su64y3fs85knymvugw3wyt": { "owner": "Kraken", "description": "Hot Wallet" }, + "lsk55wjqhqayj99rbmwwodsbaoq4dt4tvf762abds": { "owner": "BitFlyer", "description": "Cold Wallet" } } diff --git a/known_accounts/known_testnet.json b/known_accounts/known_testnet.json index 529e0b011..b0f6b52e7 100644 --- a/known_accounts/known_testnet.json +++ b/known_accounts/known_testnet.json @@ -1,4 +1,7 @@ { - "address" : { "owner" : "owner", "description" : "description" }, - "lskckzngagcs4d5gvsgxmgnabyfyj8pz266gv8s8t" : { "owner" : "Top Account", "description" : "from Testnet" } + "address": { "owner": "owner", "description": "description" }, + "lskckzngagcs4d5gvsgxmgnabyfyj8pz266gv8s8t": { + "owner": "Top Account", + "description": "from Testnet" + } } diff --git a/known_accounts/networks.json b/known_accounts/networks.json index 293320727..cf5a1768f 100644 --- a/known_accounts/networks.json +++ b/known_accounts/networks.json @@ -1,5 +1,5 @@ { - "key": "value", + "key": "value", "198f2b61a8eb95fbeed58b8216780b68f697f26b849acf00c8c93bb9b24f783d": "devnet", "15f0dacc1060e91818224a94286b13aa04279c640bd5d6f193182031d133df7c": "testnet", "7158c297294a540bc9ac6e474529c3da38d03ece056e3fa2d98141e6ec54132d": "betanet", diff --git a/package.json b/package.json index 5ed3e6e81..f4f4c9377 100644 --- a/package.json +++ b/package.json @@ -1,42 +1,44 @@ { - "name": "muzikie-streamer", - "version": "0.3.0", - "description": "Muzikie Streamer", - "keywords": [ - "muzikie", - "service", - "blockchain" - ], - "homepage": "https://github.com/Muzikie/muzikie", - "repository": { - "type": "git", - "url": "git+https://github.com/Muzikie/muzikie.git" - }, - "bugs": { - "url": "https://github.com/Muzikie/muzikie/issues" - }, - "private": true, - "author": "Muzikie , Lisk Foundation , lightcurve GmbH ", - "license": "Apache-2.0", - "main": "app.js", - "engines": { - "node": ">=18.16 <=18", - "npm": ">=8.5.0" - }, - "scripts": { - "start": "pm2 start ecosystem.config.js", - "stop": "pm2 delete ecosystem.config.js", - "eslint": "eslint \"./framework/**/*.js\" \"./services/**/*.js\" \"./tests/**/*.js\"", - "eslint-fix": "eslint --fix \"./framework/**/*.js\" \"./services/**/*.js\" \"./tests/**/*.js\"", - "test:coverage": "jest --config=jest.config.unit.js --coverage=true --verbose --forceExit" - }, - "dependencies": {}, - "devDependencies": { - "eslint": "^8.46.0", - "eslint-config-lisk-base": "^2.0.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^26.2.2", - "eslint-plugin-mocha": "^10.0.4", - "jest": "^27.3.0" - } + "name": "muzikie-streamer", + "version": "0.3.0", + "description": "Muzikie Streamer", + "keywords": [ + "muzikie", + "service", + "blockchain" + ], + "homepage": "https://github.com/Muzikie/muzikie", + "repository": { + "type": "git", + "url": "git+https://github.com/Muzikie/muzikie.git" + }, + "bugs": { + "url": "https://github.com/Muzikie/muzikie/issues" + }, + "private": true, + "author": "Muzikie , Lisk Foundation , lightcurve GmbH ", + "license": "Apache-2.0", + "main": "app.js", + "engines": { + "node": ">=18.16 <=18", + "npm": ">=8.5.0" + }, + "scripts": { + "start": "pm2 start ecosystem.config.js", + "stop": "pm2 delete ecosystem.config.js", + "format": "prettier --write '**/*'", + "lint": "eslint \"./framework/**/*.js\" \"./services/**/*.js\" \"./tests/**/*.js\"", + "lint:fix": "eslint --fix \"./framework/**/*.js\" \"./services/**/*.js\" \"./tests/**/*.js\"", + "test:coverage": "jest --config=jest.config.unit.js --coverage=true --verbose --forceExit" + }, + "devDependencies": { + "eslint": "^8.46.0", + "eslint-config-lisk-base": "^2.0.1", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jest": "^26.2.2", + "eslint-plugin-mocha": "^10.0.4", + "jest": "^29.7.0", + "prettier": "2.8.8" + } } diff --git a/services/blockchain-app-registry/README.md b/services/blockchain-app-registry/README.md index 3207cc758..06ee290bb 100644 --- a/services/blockchain-app-registry/README.md +++ b/services/blockchain-app-registry/README.md @@ -22,7 +22,7 @@ yarn install --frozen-lockfile # install required Node.js dependencies ## Configuration -To configure the different microservices, there are several environment variables the user can define to customize the configurations. +To configure the different microservices, there are several environment variables the user can define to customize the configurations. A list of the most commonly used environment variables is presented below: diff --git a/services/blockchain-app-registry/app.js b/services/blockchain-app-registry/app.js index 9cdefd2b4..3db304a5e 100644 --- a/services/blockchain-app-registry/app.js +++ b/services/blockchain-app-registry/app.js @@ -14,11 +14,7 @@ * */ const path = require('path'); -const { - Microservice, - LoggerConfig, - Logger, -} = require('lisk-service-framework'); +const { Microservice, LoggerConfig, Logger } = require('lisk-service-framework'); const config = require('./config'); @@ -39,9 +35,7 @@ const app = Microservice({ timeout: config.brokerTimeout, packageJson, logger: config.log, - dependencies: [ - 'indexer', - ], + dependencies: ['indexer'], }); setAppContext(app); @@ -52,18 +46,20 @@ app.addJobs(path.join(__dirname, 'jobs')); app.addEvents(path.join(__dirname, 'events')); // Run the application -const reportErrorAndExitProcess = (err) => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); +const reportErrorAndExitProcess = err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); logger.fatal(err.stack); process.exit(1); }; initDatabase() - .then(() => app.run() - .then(async () => { - await init(); - logger.info(`Service started ${packageJson.name}.`); - }) - .catch(reportErrorAndExitProcess), + .then(() => + app + .run() + .then(async () => { + await init(); + logger.info(`Service started ${packageJson.name}.`); + }) + .catch(reportErrorAndExitProcess), ) .catch(reportErrorAndExitProcess); diff --git a/services/blockchain-app-registry/config.js b/services/blockchain-app-registry/config.js index 9557f9d7e..73a04a312 100644 --- a/services/blockchain-app-registry/config.js +++ b/services/blockchain-app-registry/config.js @@ -18,14 +18,15 @@ const packageJson = require('./package.json'); const config = {}; // Moleculer broker config -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 5; // in seconds /** * External endpoints */ config.endpoints = {}; -config.endpoints.mysql = process.env.SERVICE_APP_REGISTRY_MYSQL || 'mysql://lisk:password@127.0.0.1:3306/lisk'; +config.endpoints.mysql = + process.env.SERVICE_APP_REGISTRY_MYSQL || 'mysql://lisk:password@127.0.0.1:3306/lisk'; // Logging config.log = { @@ -75,7 +76,7 @@ config.gitHub = { config.dataDir = `${__dirname}/data`; -config.supportedNetworks = ['mainnet', 'testnet', 'betanet', 'devnet']; +config.supportedNetworks = ['mainnet', 'testnet', 'devnet']; const DEFAULT_LISK_APPS = ['lisk_mainchain']; const DEFAULT_USER_APPS = String(process.env.DEFAULT_APPS).split(','); @@ -93,18 +94,17 @@ config.ALLOWED_FILE_EXTENSIONS = ['.png', '.svg']; config.CHAIN_ID_PREFIX_NETWORK_MAP = Object.freeze({ '00': 'mainnet', '01': 'testnet', - '02': 'betanet', '04': 'devnet', }); config.job = { // Interval takes priority over schedule and must be greater than 0 to be valid deleteNonMetadataFiles: { - interval: process.env.JOB_INTERVAL_DELETE_NON_METADATA_FILES || 0, + interval: Number(process.env.JOB_INTERVAL_DELETE_NON_METADATA_FILES) || 0, schedule: process.env.JOB_SCHEDULE_DELETE_NON_METADATA_FILES || '0 0 * * *', }, updateApplicationMetadata: { - interval: process.env.JOB_INTERVAL_UPDATE_METADATA || 0, + interval: Number(process.env.JOB_INTERVAL_UPDATE_METADATA) || 0, schedule: process.env.JOB_SCHEDULE_UPDATE_METADATA || '*/10 * * * *', }, }; diff --git a/services/blockchain-app-registry/events/metadata.js b/services/blockchain-app-registry/events/metadata.js index 01f7dc02e..1e34ee8a0 100644 --- a/services/blockchain-app-registry/events/metadata.js +++ b/services/blockchain-app-registry/events/metadata.js @@ -22,8 +22,8 @@ module.exports = [ name: 'metadata.change', description: 'Emit event when the database is successfully synchronized', controller: async callback => { - const updateMetadataListener = async (data) => { - logger.debug('Database has been successfully synchronized'); + const updateMetadataListener = async data => { + logger.debug('Database has been successfully synchronized.'); callback(data); }; Signals.get('metadataUpdated').add(updateMetadataListener); diff --git a/services/blockchain-app-registry/jest.config.functional.js b/services/blockchain-app-registry/jest.config.functional.js index 46b178ce3..6a059c638 100644 --- a/services/blockchain-app-registry/jest.config.functional.js +++ b/services/blockchain-app-registry/jest.config.functional.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/functional/**/*.test.js', - ], + testMatch: ['/tests/functional/**/*.test.js'], testTimeout: 30000, testEnvironment: 'node', diff --git a/services/blockchain-app-registry/jest.config.unit.js b/services/blockchain-app-registry/jest.config.unit.js index 7d1cd81cc..81e2db677 100644 --- a/services/blockchain-app-registry/jest.config.unit.js +++ b/services/blockchain-app-registry/jest.config.unit.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/unit/**/*.test.js', - ], + testMatch: ['/tests/unit/**/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/blockchain-app-registry/jobs/deleteNonMetadata.js b/services/blockchain-app-registry/jobs/deleteNonMetadata.js index e802071b8..93de454de 100644 --- a/services/blockchain-app-registry/jobs/deleteNonMetadata.js +++ b/services/blockchain-app-registry/jobs/deleteNonMetadata.js @@ -24,7 +24,7 @@ const logger = Logger(); const config = require('../config'); const { isMetadataFile } = require('../shared/utils/downloadRepository'); -const removeDirectoryIfEmpty = async (dirPath) => { +const removeDirectoryIfEmpty = async dirPath => { const files = await getFilesAndDirs(dirPath); if (files.length === 0) { @@ -33,23 +33,23 @@ const removeDirectoryIfEmpty = async (dirPath) => { } }; -const removeEmptyDirectoriesAndNonMetaFiles = async (dirPath) => { +const removeEmptyDirectoriesAndNonMetaFiles = async dirPath => { const contents = await getFilesAndDirs(dirPath); for (let i = 0; i < contents.length; i++) { - /* eslint-disable no-await-in-loop */ const filePath = contents[i]; const isDirectory = (await stats(filePath)).isDirectory(); if (isDirectory) { await removeEmptyDirectoriesAndNonMetaFiles(filePath); await removeDirectoryIfEmpty(filePath); - } else if (!config.ALLOWED_FILE_EXTENSIONS.some((ending) => filePath.endsWith(ending)) - && !isMetadataFile(filePath)) { + } else if ( + !config.ALLOWED_FILE_EXTENSIONS.some(ending => filePath.endsWith(ending)) && + !isMetadataFile(filePath) + ) { await rm(filePath); logger.trace(`Removed file: ${filePath}.`); } - /* eslint-enable no-await-in-loop */ } }; @@ -66,7 +66,7 @@ module.exports = [ await removeEmptyDirectoriesAndNonMetaFiles(config.dataDir); logger.info('Data directory has been successfully cleaned.'); } catch (err) { - logger.warn(`Cleaning data directory failed due to: ${err.message}.`); + logger.warn(`Cleaning data directory failed due to: ${err.message}`); } }, }, diff --git a/services/blockchain-app-registry/jobs/metadata.js b/services/blockchain-app-registry/jobs/metadata.js index dfc962fb9..19da8ab6a 100644 --- a/services/blockchain-app-registry/jobs/metadata.js +++ b/services/blockchain-app-registry/jobs/metadata.js @@ -31,7 +31,7 @@ module.exports = [ await syncWithRemoteRepo(); logger.info('Database has been successfully synchronized.'); } catch (err) { - logger.warn(`Refreshing blockchain application metadata failed due to: ${err.message}.`); + logger.warn(`Refreshing blockchain application metadata failed due to: ${err.message}`); } }, }, diff --git a/services/blockchain-app-registry/methods/controllers/metadata.js b/services/blockchain-app-registry/methods/controllers/metadata.js index 3b8addb89..5e6a0e736 100644 --- a/services/blockchain-app-registry/methods/controllers/metadata.js +++ b/services/blockchain-app-registry/methods/controllers/metadata.js @@ -18,11 +18,13 @@ const { Exceptions: { InvalidParamsException }, } = require('lisk-service-framework'); -const { StatusCodes: { BAD_REQUEST } } = HTTP; +const { + StatusCodes: { BAD_REQUEST }, +} = HTTP; const appRegistryService = require('../../shared/metadata'); -const getBlockchainAppsMetaList = async (params) => { +const getBlockchainAppsMetaList = async params => { const blockchainAppsMetaList = { data: [], meta: {}, @@ -35,7 +37,7 @@ const getBlockchainAppsMetaList = async (params) => { return blockchainAppsMetaList; }; -const getBlockchainAppsMetadata = async (params) => { +const getBlockchainAppsMetadata = async params => { const blockchainAppsMetaList = { data: [], meta: {}, @@ -48,7 +50,7 @@ const getBlockchainAppsMetadata = async (params) => { return blockchainAppsMetaList; }; -const getBlockchainAppsTokenMetadata = async (params) => { +const getBlockchainAppsTokenMetadata = async params => { try { const blockchainAppsTokenMeta = { data: [], @@ -68,7 +70,7 @@ const getBlockchainAppsTokenMetadata = async (params) => { } }; -const getBlockchainAppsTokensSupportedMetadata = async (params) => { +const getBlockchainAppsTokensSupportedMetadata = async params => { const blockchainAppsTokensSupportedMeta = { data: [], meta: {}, diff --git a/services/blockchain-app-registry/package.json b/services/blockchain-app-registry/package.json index fa878af76..e4a3c2aa2 100644 --- a/services/blockchain-app-registry/package.json +++ b/services/blockchain-app-registry/package.json @@ -1,44 +1,43 @@ { - "name": "lisk-service-blockchain-app-registry", - "version": "0.7.0-rc.1", - "description": "Lisk Service Blockchain Application Registry", - "keywords": [ - "lisk", - "blockchain" - ], - "homepage": "https://github.com/LiskHQ/lisk-service", - "repository": { - "type": "git", - "url": "git@github.com:LiskHQ/lisk-service.git" - }, - "bugs": { - "url": "https://github.com/LiskHQ/lisk-service/issues" - }, - "private": true, - "author": "Lisk Foundation , lightcurve GmbH ", - "license": "Apache-2.0", - "main": "app.js", - "engines": { - "node": ">=18.16 <=18", - "npm": ">=8.5.0" - }, - "scripts": { - "start": "node app.js", - "eslint": "eslint . --ext .js", - "eslint-fix": "eslint . --fix --ext .js", - "clean": "rm -rf ./node_modules", - "watch": "supervisor -w . -i ./node_modules app.js", - "test:unit": "jest --config=jest.config.unit.js --detectOpenHandles --forceExit", - "test:functional": "jest --config=jest.config.functional.js --detectOpenHandles --forceExit" - }, - "dependencies": { - "bluebird": "^3.7.2", - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz", - "lodash": "^4.17.21", - "octokit": "^2.0.4", - "tar": "^6.1.11" - }, - "devDependencies": { - "jest": "^27.3.0" - } + "name": "lisk-service-blockchain-app-registry", + "version": "0.7.2", + "description": "Lisk Service Blockchain Application Registry", + "keywords": [ + "lisk", + "blockchain" + ], + "homepage": "https://github.com/LiskHQ/lisk-service", + "repository": { + "type": "git", + "url": "git@github.com:LiskHQ/lisk-service.git" + }, + "bugs": { + "url": "https://github.com/LiskHQ/lisk-service/issues" + }, + "private": true, + "author": "Lisk Foundation , lightcurve GmbH ", + "license": "Apache-2.0", + "main": "app.js", + "engines": { + "node": ">=18.16 <=18", + "npm": ">=8.5.0" + }, + "scripts": { + "start": "node app.js", + "clean": "rm -rf ./node_modules", + "watch": "supervisor -w . -i ./node_modules app.js", + "test:unit": "jest --config=jest.config.unit.js --detectOpenHandles --forceExit", + "test:functional": "jest --config=jest.config.functional.js --detectOpenHandles --forceExit" + }, + "dependencies": { + "bluebird": "^3.7.2", + "ioredis": "^5.3.2", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz", + "lodash": "^4.17.21", + "octokit": "^2.0.4", + "tar": "^6.1.11" + }, + "devDependencies": { + "jest": "^29.7.0" + } } diff --git a/services/blockchain-app-registry/shared/init.js b/services/blockchain-app-registry/shared/init.js index 4b00ca57b..50b500bd0 100644 --- a/services/blockchain-app-registry/shared/init.js +++ b/services/blockchain-app-registry/shared/init.js @@ -16,12 +16,7 @@ const { Logger, DB: { - MySQL: { - getDBConnection, - startDBTransaction, - commitDBTransaction, - rollbackDBTransaction, - }, + MySQL: { getDBConnection, startDBTransaction, commitDBTransaction, rollbackDBTransaction }, }, } = require('lisk-service-framework'); @@ -43,9 +38,7 @@ const init = async () => { await commitDBTransaction(dbTrx); } catch (error) { await rollbackDBTransaction(dbTrx); - const errorMsg = Array.isArray(error) - ? error.map(e => e.message).join('\n') - : error.message; + const errorMsg = Array.isArray(error) ? error.map(e => e.message).join('\n') : error.message; logger.error(`Unable to initialize metadata information due to: ${errorMsg}.`); } }; diff --git a/services/blockchain-app-registry/shared/metadata.js b/services/blockchain-app-registry/shared/metadata.js index fb1799a7e..03e3f35b7 100644 --- a/services/blockchain-app-registry/shared/metadata.js +++ b/services/blockchain-app-registry/shared/metadata.js @@ -1,18 +1,18 @@ /* -* LiskHQ/lisk-service -* Copyright © 2022 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2022 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const BluebirdPromise = require('bluebird'); const { @@ -43,14 +43,14 @@ const APP_STATUS = { ACTIVATED: 'activated', }; -const knownMainchainIDs = Object - .keys(config.CHAIN_ID_PREFIX_NETWORK_MAP) - .map(e => e.padEnd(LENGTH_CHAIN_ID, '0')); +const knownMainchainIDs = Object.keys(config.CHAIN_ID_PREFIX_NETWORK_MAP).map(e => + e.padEnd(LENGTH_CHAIN_ID, '0'), +); const getApplicationMetadataTable = () => getTableInstance(appMetadataTableSchema, MYSQL_ENDPOINT); const getTokenMetadataTable = () => getTableInstance(tokenMetadataTableSchema, MYSQL_ENDPOINT); -const getBlockchainAppsMetaList = async (params) => { +const getBlockchainAppsMetaList = async params => { const applicationMetadataTable = await getApplicationMetadataTable(); const blockchainAppsMetaList = { @@ -71,24 +71,28 @@ const getBlockchainAppsMetaList = async (params) => { if (params.network) { const { network, ...remParams } = params; params = remParams; - params.whereIn = [{ - property: 'network', - values: network.split(','), - }]; + params.whereIn = [ + { + property: 'network', + values: network.split(','), + }, + ]; } let { offset, limit } = params; - const defaultApps = await applicationMetadataTable.find( - { ...params, isDefault: true }, - ['network', 'chainID', 'chainName'], - ); + const defaultApps = await applicationMetadataTable.find({ ...params, isDefault: true }, [ + 'network', + 'chainID', + 'chainName', + ]); if (defaultApps.length < limit) { // Update offset and limit limit -= defaultApps.length; - const totalDefaultAppsCount = await applicationMetadataTable.count( - { ...params, isDefault: true }, - ); + const totalDefaultAppsCount = await applicationMetadataTable.count({ + ...params, + isDefault: true, + }); offset = Math.max(offset - totalDefaultAppsCount, 0); @@ -126,7 +130,7 @@ const readMetadataFromClonedRepo = async (network, appDirName, filename) => { return parsedMetadata; }; -const getBlockchainAppsMetadata = async (params) => { +const getBlockchainAppsMetadata = async params => { const applicationMetadataTable = await getApplicationMetadataTable(); const blockchainAppsMetadata = { @@ -170,21 +174,25 @@ const getBlockchainAppsMetadata = async (params) => { const { search, ...remParams } = params; params = remParams; - params.orSearch = [{ - property: 'chainName', - pattern: search, - }, { - property: 'displayName', - pattern: search, - }]; + params.orSearch = [ + { + property: 'chainName', + pattern: search, + }, + { + property: 'displayName', + pattern: search, + }, + ]; } const limit = params.limit * config.supportedNetworks.length; if (params.isDefault !== false) { - const defaultApps = await applicationMetadataTable.find( - { ...params, limit, isDefault: true }, - ['network', 'appDirName', 'isDefault'], - ); + const defaultApps = await applicationMetadataTable.find({ ...params, limit, isDefault: true }, [ + 'network', + 'appDirName', + 'isDefault', + ]); blockchainAppsMetadata.data = defaultApps; } @@ -193,10 +201,12 @@ const getBlockchainAppsMetadata = async (params) => { // If params.isDefault is not passed in the request then adjust the offset if (!('isDefault' in params)) { - const totalDefaultApps = await applicationMetadataTable.count( - { ...params, limit, isDefault: true }, - ); - offset = (params.offset - totalDefaultApps) > 0 ? params.offset - totalDefaultApps : 0; + const totalDefaultApps = await applicationMetadataTable.count({ + ...params, + limit, + isDefault: true, + }); + offset = params.offset - totalDefaultApps > 0 ? params.offset - totalDefaultApps : 0; } const nonDefaultApps = await applicationMetadataTable.find( @@ -210,7 +220,7 @@ const getBlockchainAppsMetadata = async (params) => { blockchainAppsMetadata.data = await BluebirdPromise.map( // Slice necessary to adhere to limit passed blockchainAppsMetadata.data.slice(0, params.limit), - async (appMetadata) => { + async appMetadata => { const appMeta = await readMetadataFromClonedRepo( appMetadata.network, appMetadata.appDirName, @@ -218,11 +228,12 @@ const getBlockchainAppsMetadata = async (params) => { ); appMeta.isDefault = appMetadata.isDefault; - if (await isMainchain() - && knownMainchainIDs.includes(appMeta.chainID)) { + if ((await isMainchain()) && knownMainchainIDs.includes(appMeta.chainID)) { appMeta.status = APP_STATUS.ACTIVATED; } else { - const [blockchainApp] = (await requestIndexer('blockchain.apps', { chainID: appMeta.chainID })).data; + const [blockchainApp] = ( + await requestIndexer('blockchain.apps', { chainID: appMeta.chainID }) + ).data; appMeta.status = blockchainApp ? blockchainApp.status : APP_STATUS.DEFAULT; } @@ -242,7 +253,7 @@ const getBlockchainAppsMetadata = async (params) => { return blockchainAppsMetadata; }; -const getBlockchainAppsTokenMetadata = async (params) => { +const getBlockchainAppsTokenMetadata = async params => { const applicationMetadataTable = await getApplicationMetadataTable(); const tokenMetadataTable = await getTokenMetadataTable(); @@ -302,7 +313,11 @@ const getBlockchainAppsTokenMetadata = async (params) => { }); } - const tokensResultSet = await tokenMetadataTable.find(params, ['network', 'tokenID', 'chainName']); + const tokensResultSet = await tokenMetadataTable.find(params, [ + 'network', + 'tokenID', + 'chainName', + ]); // Used to avoid reading same token metadata json file multiple times const uniqueChainMap = {}; @@ -317,7 +332,7 @@ const getBlockchainAppsTokenMetadata = async (params) => { await BluebirdPromise.map( uniqueChainList, - async (tokenMeta) => { + async tokenMeta => { const chainID = tokenMeta.tokenID.substring(0, LENGTH_CHAIN_ID); const [{ appDirName }] = await applicationMetadataTable.find( { network: tokenMeta.network, chainID }, @@ -354,14 +369,14 @@ const getBlockchainAppsTokenMetadata = async (params) => { return blockchainAppsTokenMetadata; }; -const resolveTokenMetaInfo = async (tokenInfoFromDB) => { +const resolveTokenMetaInfo = async tokenInfoFromDB => { const applicationMetadataTable = await getApplicationMetadataTable(); const tokensMeta = []; const processedChainIDs = new Set(); const resultTokenIDsSet = new Set(tokenInfoFromDB.map(tokenInfo => tokenInfo.tokenID)); - /* eslint-disable no-restricted-syntax, no-await-in-loop, no-continue */ + /* eslint-disable no-restricted-syntax, no-continue */ for (const entry of tokenInfoFromDB) { const chainID = entry.tokenID.substring(0, LENGTH_CHAIN_ID); @@ -371,7 +386,9 @@ const resolveTokenMetaInfo = async (tokenInfoFromDB) => { } processedChainIDs.add(chainID); - const [requestedAppInfo] = await applicationMetadataTable.find({ chainID, limit: 1 }, ['appDirName']); + const [requestedAppInfo] = await applicationMetadataTable.find({ chainID, limit: 1 }, [ + 'appDirName', + ]); const parsedTokenMeta = await readMetadataFromClonedRepo( entry.network, requestedAppInfo.appDirName, @@ -389,15 +406,14 @@ const resolveTokenMetaInfo = async (tokenInfoFromDB) => { } } } - /* eslint-enable no-restricted-syntax, no-await-in-loop */ + /* eslint-enable no-restricted-syntax */ return tokensMeta; }; -const getSupportedTokensFromServiceURLs = async (serviceURLs) => { +const getSupportedTokensFromServiceURLs = async serviceURLs => { for (let i = 0; i < serviceURLs.length; i++) { const tokenSummaryEndpoint = `${serviceURLs[i].http}/api/v3/token/summary`; - // eslint-disable-next-line no-await-in-loop const response = await HTTP.request(tokenSummaryEndpoint); if (response && response.data && response.data.data && response.data.data.supportedTokens) { @@ -418,7 +434,11 @@ const getAllTokensMetaInNetworkByChainID = async (chainID, limit, offset, sort) offset, sort, }; - const tokensResultSet = await tokenMetadataTable.find(searchParams, ['network', 'tokenID', 'chainName']); + const tokensResultSet = await tokenMetadataTable.find(searchParams, [ + 'network', + 'tokenID', + 'chainName', + ]); const total = await tokenMetadataTable.count(searchParams); const tokensMeta = await resolveTokenMetaInfo(tokensResultSet); // Fetch the data @@ -428,10 +448,12 @@ const getAllTokensMetaInNetworkByChainID = async (chainID, limit, offset, sort) const getTokensMetaByTokenIDs = async (patternTokenIDs, exactTokenIDs, limit, offset, sort) => { const tokenMetadataTable = await getTokenMetadataTable(); const searchParams = { - whereIn: [{ - property: 'tokenID', - values: exactTokenIDs, - }], + whereIn: [ + { + property: 'tokenID', + values: exactTokenIDs, + }, + ], orSearch: patternTokenIDs.map(e => { const chainID = e.substring(0, LENGTH_CHAIN_ID); return { @@ -444,7 +466,11 @@ const getTokensMetaByTokenIDs = async (patternTokenIDs, exactTokenIDs, limit, of sort, }; - const tokensResultSet = await tokenMetadataTable.find(searchParams, ['network', 'tokenID', 'chainName']); + const tokensResultSet = await tokenMetadataTable.find(searchParams, [ + 'network', + 'tokenID', + 'chainName', + ]); const total = await tokenMetadataTable.count(searchParams); // Fetch the data @@ -452,7 +478,7 @@ const getTokensMetaByTokenIDs = async (patternTokenIDs, exactTokenIDs, limit, of return { tokensMeta, total }; }; -const getBlockchainAppsTokensSupportedMetadata = async (params) => { +const getBlockchainAppsTokensSupportedMetadata = async params => { const { chainID, limit, offset, sort } = params; const applicationMetadataTable = await getApplicationMetadataTable(); @@ -462,7 +488,11 @@ const getBlockchainAppsTokensSupportedMetadata = async (params) => { }; // Check if the metadata for the requested chainID exists - const [requestedAppInfo] = await applicationMetadataTable.find({ chainID, limit: 1 }, ['network', 'chainName', 'appDirName']); + const [requestedAppInfo] = await applicationMetadataTable.find({ chainID, limit: 1 }, [ + 'network', + 'chainName', + 'appDirName', + ]); if (!requestedAppInfo) return tokenMetadata; const { serviceURLs } = await readMetadataFromClonedRepo( diff --git a/services/blockchain-app-registry/shared/metadataIndex.js b/services/blockchain-app-registry/shared/metadataIndex.js index b61076f70..c5f79404c 100644 --- a/services/blockchain-app-registry/shared/metadataIndex.js +++ b/services/blockchain-app-registry/shared/metadataIndex.js @@ -22,9 +22,7 @@ const { }, Logger, DB: { - MySQL: { - getTableInstance, - }, + MySQL: { getTableInstance }, }, } = require('lisk-service-framework'); @@ -49,7 +47,7 @@ const indexTokensMeta = async (tokenMeta, dbTrx) => { const tokenMetaToIndex = await BluebirdPromise.map( tokenMeta.tokens, - async (token) => { + async token => { const result = { chainName: tokenMeta.chainName, network: tokenMeta.network, @@ -82,9 +80,11 @@ const indexAppMeta = async (appMeta, dbTrx) => { // Given filepath of app.json or nativetokens.json, indexes the information in DB const indexMetadataFromFile = async (filePath, dbTrx) => { const [network, app, filename] = filePath.split('/').slice(-3); - logger.debug(`Indexing metadata information for the app: ${app} (${network}) filename: ${filename}.`); + logger.debug( + `Indexing metadata information for the app: ${app} (${network}) filename: ${filename}.`, + ); - if (!network || !app) throw Error('Require both \'network\' and \'app\'.'); + if (!network || !app) throw Error("Require both 'network' and 'app'."); // While processing nativetokens.json in sync job, newly downloaded app.json will be present // in the temp download directory. Read from this file if present to fetch updated information. @@ -93,7 +93,9 @@ const indexMetadataFromFile = async (filePath, dbTrx) => { const repo = config.gitHub.appRegistryRepoName; const oldAppJsonPath = `${dataDir}/${repo}/${network}/${app}/${FILENAME.APP_JSON}`; const downloadedAppJsonPath = `${path.dirname(filePath)}/${FILENAME.APP_JSON}`; - const appJsonPath = await exists(downloadedAppJsonPath) ? downloadedAppJsonPath : oldAppJsonPath; + const appJsonPath = (await exists(downloadedAppJsonPath)) + ? downloadedAppJsonPath + : oldAppJsonPath; logger.trace('Reading chain information.'); const appMetaString = await read(appJsonPath); @@ -118,7 +120,9 @@ const indexMetadataFromFile = async (filePath, dbTrx) => { await indexTokensMeta(tokenMeta, dbTrx); logger.debug(`Indexed tokens information for the app: ${app} (${network}).`); } - logger.info(`Finished indexing metadata information for the app: ${app} (${network}) file: ${filename}.`); + logger.info( + `Finished indexing metadata information for the app: ${app} (${network}) file: ${filename}.`, + ); }; const deleteAppMeta = async (appMeta, dbTrx) => { @@ -135,7 +139,7 @@ const deleteTokensMeta = async (tokenMeta, dbTrx) => { const tokenMetadataTable = await getTokenMetadataTable(); await BluebirdPromise.map( tokenMeta.tokenIDs, - async (tokenID) => { + async tokenID => { const queryParams = { tokenID: tokenID.toLowerCase(), }; @@ -147,9 +151,11 @@ const deleteTokensMeta = async (tokenMeta, dbTrx) => { const deleteIndexedMetadataFromFile = async (filePath, dbTrx) => { const [network, app, filename] = filePath.split('/').slice(-3); - logger.debug(`Deleting metadata information for the app: ${app} (${network}) filename: ${filename}.`); + logger.debug( + `Deleting metadata information for the app: ${app} (${network}) filename: ${filename}.`, + ); - if (!network || !app) throw Error('Require both \'network\' and \'app\'.'); + if (!network || !app) throw Error("Require both 'network' and 'app'."); const appPathInClonedRepo = path.dirname(filePath); logger.trace('Reading chain information.'); @@ -175,10 +181,12 @@ const deleteIndexedMetadataFromFile = async (filePath, dbTrx) => { await deleteTokensMeta(tokenMeta, dbTrx); logger.debug(`Deleted tokens information for the app: ${app} (${network}).`); } - logger.info(`Finished deleting metadata information for the app: ${app} (${network}) filename: ${filename}.`); + logger.info( + `Finished deleting metadata information for the app: ${app} (${network}) filename: ${filename}.`, + ); }; -const indexAllBlockchainAppsMeta = async (dbTrx) => { +const indexAllBlockchainAppsMeta = async dbTrx => { const dataDirectory = config.dataDir; const repo = config.gitHub.appRegistryRepoName; const repoPath = path.join(dataDirectory, repo); diff --git a/services/blockchain-app-registry/shared/status.js b/services/blockchain-app-registry/shared/status.js index edb2d5eea..9af45fdee 100644 --- a/services/blockchain-app-registry/shared/status.js +++ b/services/blockchain-app-registry/shared/status.js @@ -1,18 +1,18 @@ /* -* LiskHQ/lisk-service -* Copyright © 2023 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const packageJson = require('../package.json'); const { getBlockchainAppsMetaList } = require('./metadata'); diff --git a/services/blockchain-app-registry/shared/utils/chain.js b/services/blockchain-app-registry/shared/utils/chain.js index a81b81e19..867319f80 100644 --- a/services/blockchain-app-registry/shared/utils/chain.js +++ b/services/blockchain-app-registry/shared/utils/chain.js @@ -29,7 +29,9 @@ const getApplicationMetadataTable = () => getTableInstance(appMetadataTableSchem const resolveChainNameByNetworkAppDir = async (network, appDirName) => { const applicationMetadataTable = await getApplicationMetadataTable(); - const [{ chainName = '' } = {}] = await applicationMetadataTable.find({ network, appDirName }, ['chainName']); + const [{ chainName = '' } = {}] = await applicationMetadataTable.find({ network, appDirName }, [ + 'chainName', + ]); return chainName; }; diff --git a/services/blockchain-app-registry/shared/utils/download.js b/services/blockchain-app-registry/shared/utils/download.js index 5046f402b..232617429 100644 --- a/services/blockchain-app-registry/shared/utils/download.js +++ b/services/blockchain-app-registry/shared/utils/download.js @@ -25,55 +25,71 @@ const { const logger = Logger(); -const getHTTPProtocolByURL = (url) => url.startsWith('https') ? https : http; +const getHTTPProtocolByURL = url => (url.startsWith('https') ? https : http); -const downloadAndExtractTarball = (url, directoryPath) => new Promise((resolve, reject) => { - if (!url || !directoryPath) { - reject(new Error(`Invalid url or directoryPath. url: ${url} directoryPath:${directoryPath}`)); - return; - } - - logger.info(`Downloading and extracting file from ${url} to ${directoryPath}.`); - getHTTPProtocolByURL(url).get(url, (response) => { - if (response.statusCode === 200) { - response.pipe(tar.extract({ cwd: directoryPath })); - response.on('error', async (err) => reject(new Error(err))); - response.on('end', async () => { - logger.info('File downloaded and extracted successfully.'); - setTimeout(resolve, 100); // Since the promise resolves earlier than expected - }); - } else { - const errMessage = `Download failed with HTTP status code: ${response.statusCode} (${response.statusMessage}).`; - logger.error(errMessage); - if (response.statusCode === 404) reject(new NotFoundException(errMessage)); - reject(new Error(errMessage)); +const downloadAndExtractTarball = (url, directoryPath) => + new Promise((resolve, reject) => { + if (!url || !directoryPath) { + reject(new Error(`Invalid url or directoryPath. url: ${url} directoryPath:${directoryPath}`)); + return; } + + logger.info(`Downloading and extracting file from ${url} to ${directoryPath}.`); + getHTTPProtocolByURL(url).get(url, response => { + if (response.statusCode === 200) { + response.pipe(tar.extract({ cwd: directoryPath })); + response.on('error', async err => reject(new Error(err))); + response.on('end', async () => { + logger.info('File downloaded and extracted successfully.'); + setTimeout(resolve, 100); // Since the promise resolves earlier than expected + }); + } else { + const errMessage = `Download failed with HTTP status code: ${response.statusCode} (${response.statusMessage}).`; + logger.error(errMessage); + if (response.statusCode === 404) reject(new NotFoundException(errMessage)); + reject(new Error(errMessage)); + } + }); }); -}); -const downloadFile = (url, filePath) => new Promise((resolve, reject) => { - if (!url || !filePath) { - reject(new Error(`Invalid url or filePath. url: ${url} filePath:${filePath}`)); - return; - } +const downloadFile = (url, headers = {}, filePath) => + new Promise((resolve, reject) => { + if (!url || !filePath) { + reject(new Error(`Invalid url or filePath. url: ${url} filePath:${filePath}`)); + return; + } + + const options = { + method: 'GET', + headers, + }; + + const req = getHTTPProtocolByURL(url).request(url, options, res => { + let fileContent = ''; - getHTTPProtocolByURL(url).get(url, (response) => { - if (response.statusCode === 200) { - const writeStream = fs.createWriteStream(filePath); - response.pipe(writeStream); - response.on('error', async (err) => reject(new Error(err))); - response.on('end', async () => { - logger.info(`File downloaded successfully to: ${filePath}.`); - setTimeout(resolve, 100); // Since the promise resolves earlier than expected + res.on('data', chunk => { + fileContent += chunk; }); - } else { - const errMessage = `Download failed with HTTP status code: ${response.statusCode} (${response.statusMessage}).`; - logger.error(errMessage); - if (response.statusCode === 404) reject(new NotFoundException(errMessage)); - reject(new Error(errMessage)); - } + + res.on('end', () => { + if (res.statusCode === 200) { + const data = JSON.parse(fileContent); + const fileData = Buffer.from(data.content, 'base64').toString('utf-8'); + fs.writeFileSync(filePath, fileData); + resolve(); + } else { + const errMessage = `Download failed with HTTP status code: ${res.statusCode} (${res.statusMessage}).`; + reject(new Error(errMessage)); + } + }); + }); + + req.on('error', error => { + reject(error); + }); + + req.end(); }); -}); module.exports = { downloadAndExtractTarball, diff --git a/services/blockchain-app-registry/shared/utils/downloadRepository.js b/services/blockchain-app-registry/shared/utils/downloadRepository.js index eae78287d..85d4aaccc 100644 --- a/services/blockchain-app-registry/shared/utils/downloadRepository.js +++ b/services/blockchain-app-registry/shared/utils/downloadRepository.js @@ -19,14 +19,7 @@ const { Octokit } = require('octokit'); const { Utils: { - fs: { - exists, - mkdir, - getDirectories, - rmdir, - rm, - mv, - }, + fs: { exists, mkdir, getDirectories, rmdir, rm, mv }, }, Logger, DB: { @@ -128,18 +121,26 @@ const getRepoDownloadURL = async () => { } }; -const getFileDownloadURL = async (file) => { +const getFileDownloadURLAndHeaders = async file => { + if (!file) { + throw new Error('getFileDownloadURLAndHeaders requires a filename as a parameter.'); + } + try { - const result = await octokit.request( - `GET /repos/${owner}/${repo}/contents/${file}`, - { - owner, - repo, - ref: `${config.gitHub.branch}`, - }, - ); + const url = `https://api.github.com/repos/${owner}/${repo}/contents/${file}?ref=${config.gitHub.branch}`; + const headers = { + 'User-Agent': 'GitHub-File-Downloader', + }; + + // Add Authorization header if accessing a private repo + if (config.gitHub.accessToken) { + headers.Authorization = `token ${config.gitHub.accessToken}`; + } - return result.data.download_url; + return { + url, + headers, + }; } catch (error) { let errorMsg = error.message; if (Array.isArray(error)) errorMsg = error.map(e => e.message).join('\n'); @@ -151,14 +152,11 @@ const getFileDownloadURL = async (file) => { const getDiff = async (lastSyncedCommitHash, latestCommitHash) => { const url = `GET /repos/${owner}/${repo}/compare/${lastSyncedCommitHash}...${latestCommitHash}`; try { - const result = await octokit.request( - url, - { - owner, - repo, - ref: `${config.gitHub.branch}`, - }, - ); + const result = await octokit.request(url, { + owner, + repo, + ref: `${config.gitHub.branch}`, + }); return result; } catch (error) { @@ -173,13 +171,14 @@ const getDiff = async (lastSyncedCommitHash, latestCommitHash) => { const filterMetaConfigFilesByNetwork = async (network, filesChanged) => { const filesChangedInput = filesChanged || []; const filesUpdated = filesChangedInput.filter( - file => file.startsWith(network) - && (file.endsWith(FILENAME.APP_JSON) || file.endsWith(FILENAME.NATIVETOKENS_JSON)), + file => + file.startsWith(network) && + (file.endsWith(FILENAME.APP_JSON) || file.endsWith(FILENAME.NATIVETOKENS_JSON)), ); return filesUpdated; }; -const getUniqueNetworkAppDirPairs = async (files) => { +const getUniqueNetworkAppDirPairs = async files => { const filesInput = files || []; const map = new Map(); @@ -192,13 +191,12 @@ const getUniqueNetworkAppDirPairs = async (files) => { return [...map.values()]; }; -const buildEventPayload = async (allFilesModified) => { +const buildEventPayload = async allFilesModified => { const eventPayload = {}; const { supportedNetworks } = config; const numSupportedNetworks = supportedNetworks.length; for (let index = 0; index < numSupportedNetworks; index++) { - /* eslint-disable no-await-in-loop */ const networkType = supportedNetworks[index]; const filesUpdated = await filterMetaConfigFilesByNetwork(networkType, allFilesModified); @@ -209,16 +207,16 @@ const buildEventPayload = async (allFilesModified) => { ); eventPayload[networkType] = appsUpdated; - /* eslint-enable no-await-in-loop */ } return eventPayload; }; -const isMetadataFile = (filePath) => ( - !!(filePath - && (filePath.endsWith(FILENAME.APP_JSON) || filePath.endsWith(FILENAME.NATIVETOKENS_JSON))) -); +const isMetadataFile = filePath => + !!( + filePath && + (filePath.endsWith(FILENAME.APP_JSON) || filePath.endsWith(FILENAME.NATIVETOKENS_JSON)) + ); /* Sorts the passed array and groups files by the network and app. Returns following structure: { @@ -229,7 +227,7 @@ const isMetadataFile = (filePath) => ( } } */ -const groupFilesByNetworkAndApp = (fileInfos) => { +const groupFilesByNetworkAndApp = fileInfos => { // Stores an map of {networkName} -> {appName} -> [files] const groupedFiles = {}; @@ -250,7 +248,7 @@ const groupFilesByNetworkAndApp = (fileInfos) => { return groupedFiles; }; -const getModifiedFileNames = (groupedFiles) => { +const getModifiedFileNames = groupedFiles => { const fileNames = []; Object.keys(groupedFiles).forEach(network => { @@ -266,12 +264,14 @@ const getModifiedFileNames = (groupedFiles) => { const syncWithRemoteRepo = async (_dbTrx = null) => { let isCustomDBTrx = false; - const dbTrx = _dbTrx || await (async () => { - const connection = await getDBConnection(MYSQL_ENDPOINT); - const newDBTrx = await startDBTransaction(connection); - isCustomDBTrx = true; - return newDBTrx; - })(); + const dbTrx = + _dbTrx || + (await (async () => { + const connection = await getDBConnection(MYSQL_ENDPOINT); + const newDBTrx = await startDBTransaction(connection); + isCustomDBTrx = true; + return newDBTrx; + })()); try { const dataDirectory = config.dataDir; @@ -307,18 +307,17 @@ const syncWithRemoteRepo = async (_dbTrx = null) => { await BluebirdPromise.map( Object.keys(groupedFiles), - async (networkName) => { + async networkName => { const appsInNetwork = groupedFiles[networkName]; await BluebirdPromise.map( Object.keys(appsInNetwork), - async (appName) => { + async appName => { const appFiles = appsInNetwork[appName]; // Should process app files sequentially as nativetokens.json is dependant on app.json // eslint-disable-next-line no-restricted-syntax for (const modifiedFile of appFiles) { - /* eslint-disable no-await-in-loop */ const remoteFilePath = modifiedFile.filename; const localFilePath = path.join(appDirPath, remoteFilePath); @@ -341,20 +340,21 @@ const syncWithRemoteRepo = async (_dbTrx = null) => { const dirPath = path.dirname(tempFilePath); await mkdir(dirPath, { recursive: true }); - const fileDownloadUrl = await getFileDownloadURL(remoteFilePath); - await downloadFile(fileDownloadUrl, tempFilePath); + const { url, headers } = await getFileDownloadURLAndHeaders(remoteFilePath); + await downloadFile(url, headers, tempFilePath); logger.debug(`Successfully downloaded: ${tempFilePath}.`); // Update DB with latest metadata file information await indexMetadataFromFile(tempFilePath, dbTrx); - logger.debug(`Successfully updated the database with the latest changes of file: ${remoteFilePath}.`); + logger.debug( + `Successfully updated the database with the latest changes of file: ${remoteFilePath}.`, + ); // Schedule files to be moved once db transaction is committed filesToBeMoved.push({ from: tempFilePath, to: localFilePath, }); - /* eslint-enable no-await-in-loop */ } }, { concurrency: Object.keys(appsInNetwork).length }, @@ -367,16 +367,14 @@ const syncWithRemoteRepo = async (_dbTrx = null) => { if (isCustomDBTrx) await commitDBTransaction(dbTrx); // Delete files which are removed from remote - await BluebirdPromise.map( - filesToBeDeleted, - async (filePath) => rm(filePath), - { concurrency: filesToBeDeleted.length }, - ); + await BluebirdPromise.map(filesToBeDeleted, async filePath => rm(filePath), { + concurrency: filesToBeDeleted.length, + }); // Move downloaded files await BluebirdPromise.map( filesToBeMoved, - async (filePathInfo) => { + async filePathInfo => { // Create directory to move file await mkdir(path.dirname(filePathInfo.to)); await mv(filePathInfo.from, filePathInfo.to); @@ -401,7 +399,7 @@ const syncWithRemoteRepo = async (_dbTrx = null) => { } }; -const downloadRepositoryToFS = async (dbTrx) => { +const downloadRepositoryToFS = async dbTrx => { const dataDirectory = config.dataDir; const appDirPath = path.join(dataDirectory, repo); @@ -410,7 +408,7 @@ const downloadRepositoryToFS = async (dbTrx) => { dbTrx, ); - if (lastSyncedCommitHash && await exists(appDirPath)) { + if (lastSyncedCommitHash && (await exists(appDirPath))) { logger.trace('Synchronizing with the remote repository.'); await syncWithRemoteRepo(dbTrx); logger.info('Finished synchronizing with the remote repository successfully.'); @@ -447,7 +445,7 @@ module.exports = { getCommitInfo, getUniqueNetworkAppDirPairs, filterMetaConfigFilesByNetwork, - getFileDownloadURL, + getFileDownloadURLAndHeaders, getDiff, buildEventPayload, getModifiedFileNames, diff --git a/services/blockchain-app-registry/shared/utils/param.js b/services/blockchain-app-registry/shared/utils/param.js index 3e9c9d9e7..631218765 100644 --- a/services/blockchain-app-registry/shared/utils/param.js +++ b/services/blockchain-app-registry/shared/utils/param.js @@ -32,8 +32,12 @@ const normalizeRangeParam = (params, property) => { const from = Number(fromStr); const to = Number(toStr); - if (Number.isNaN(from) || Number.isNaN(to)) throw new ValidationException(`Invalid (non-numeric) '${property}' range values supplied: ${params[property]}.`); - if (fromStr && toStr && from > to) throw new ValidationException(`From ${property} cannot be greater than to ${property}.`); + if (Number.isNaN(from) || Number.isNaN(to)) + throw new ValidationException( + `Invalid (non-numeric) '${property}' range values supplied: ${params[property]}.`, + ); + if (fromStr && toStr && from > to) + throw new ValidationException(`From ${property} cannot be greater than to ${property}.`); if (fromStr === EMPTY_STRING) { propBetweens.push({ property, to }); @@ -43,13 +47,10 @@ const normalizeRangeParam = (params, property) => { propBetweens.push({ property, from, to }); } - const paramsWithoutProperty = Object.keys(params).reduce( - (acc, key) => { - if (key !== property) acc[key] = params[key]; - return acc; - }, - {}, - ); + const paramsWithoutProperty = Object.keys(params).reduce((acc, key) => { + if (key !== property) acc[key] = params[key]; + return acc; + }, {}); return { ...paramsWithoutProperty, propBetweens, diff --git a/services/blockchain-app-registry/shared/utils/regex.js b/services/blockchain-app-registry/shared/utils/regex.js index ea387fd87..440f43ade 100644 --- a/services/blockchain-app-registry/shared/utils/regex.js +++ b/services/blockchain-app-registry/shared/utils/regex.js @@ -29,7 +29,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const NETWORK = /^\b(?:mainnet|testnet|betanet|devnet|,)+\b$/; +const NETWORK = /^\b(?:mainnet|testnet|devnet|,)+\b$/; const MAINCHAIN_ID = /^[a-fA-F0-9]{2}000000$/; module.exports = { diff --git a/services/blockchain-app-registry/shared/utils/request.js b/services/blockchain-app-registry/shared/utils/request.js index fedd3c8d1..58129e674 100644 --- a/services/blockchain-app-registry/shared/utils/request.js +++ b/services/blockchain-app-registry/shared/utils/request.js @@ -16,7 +16,7 @@ let app; -const setAppContext = (h) => app = h; +const setAppContext = h => (app = h); const getAppContext = () => app; diff --git a/services/blockchain-app-registry/tests/constants/downloadRepository.js b/services/blockchain-app-registry/tests/constants/downloadRepository.js index 6c377ca09..43c59fb09 100644 --- a/services/blockchain-app-registry/tests/constants/downloadRepository.js +++ b/services/blockchain-app-registry/tests/constants/downloadRepository.js @@ -15,10 +15,7 @@ */ const getModifiedFileNamesInput = { betanet: { - Lisk: [ - { filename: 'betanet/Lisk/app.json' }, - { filename: 'betanet/Lisk/nativetokens.json' }, - ], + Lisk: [{ filename: 'betanet/Lisk/app.json' }, { filename: 'betanet/Lisk/nativetokens.json' }], Enevti: [ { filename: 'betanet/Enevti/app.json' }, { filename: 'betanet/Enevti/nativetokens.json' }, diff --git a/services/blockchain-app-registry/tests/constants/metadataIndex.js b/services/blockchain-app-registry/tests/constants/metadataIndex.js index b44072b79..d1e6f6d63 100644 --- a/services/blockchain-app-registry/tests/constants/metadataIndex.js +++ b/services/blockchain-app-registry/tests/constants/metadataIndex.js @@ -62,16 +62,12 @@ const tokenMetaObj = { { denom: 'beddows-test', decimals: 0, - aliases: [ - 'Beddows-test', - ], + aliases: ['Beddows-test'], }, { denom: 'lsk-test', decimals: 8, - aliases: [ - 'Lisk-test', - ], + aliases: ['Lisk-test'], }, ], baseDenom: 'beddows-test', diff --git a/services/blockchain-app-registry/tests/functional/shared/metadataIndex.test.js b/services/blockchain-app-registry/tests/functional/shared/metadataIndex.test.js index 1208d5f8d..385184517 100644 --- a/services/blockchain-app-registry/tests/functional/shared/metadataIndex.test.js +++ b/services/blockchain-app-registry/tests/functional/shared/metadataIndex.test.js @@ -16,12 +16,7 @@ /* eslint-disable mocha/max-top-level-suites */ const { - MySQL: { - getTableInstance, - getDBConnection, - startDBTransaction, - commitDBTransaction, - }, + MySQL: { getTableInstance, getDBConnection, startDBTransaction, commitDBTransaction }, Utils: { fs: { mkdir, rmdir, write }, }, @@ -38,10 +33,7 @@ const { } = require('../../../shared/metadataIndex'); const { downloadRepositoryToFS } = require('../../../shared/utils/downloadRepository'); -const { - appMetaObj, - tokenMetaObj, -} = require('../../constants/metadataIndex'); +const { appMetaObj, tokenMetaObj } = require('../../constants/metadataIndex'); const config = require('../../../config'); @@ -91,39 +83,38 @@ describe('Test indexAppMeta method', () => { afterEach(async () => applicationMetadataTable.delete(appMetaQueryParams)); it('should index app meta in db when called with valid metadata object', async () => { - const responseBeforeIndex = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); + const responseBeforeIndex = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseBeforeIndex.length).toEqual(0); await indexAppMeta(appMetaObj); - const dbResponse = await applicationMetadataTable.find( - appMetaQueryParams, - ['chainID'], - ); + const dbResponse = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); expect(dbResponse[0].chainID).toEqual(appMetaObj.chainID); expect(dbResponse.length).toEqual(1); }); it('should index app meta in db only after commit when called with dbTrx', async () => { - const responseBeforeIndex = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); + const responseBeforeIndex = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseBeforeIndex.length).toEqual(0); const dbTrx = await startDBTransaction(connection); await indexAppMeta(appMetaObj, dbTrx); - const responseBeforeCommit = await applicationMetadataTable.find( - appMetaQueryParams, - ['chainID'], - ); + const responseBeforeCommit = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseBeforeCommit.length).toEqual(0); await commitDBTransaction(dbTrx); - const responseAfterCommit = await applicationMetadataTable.find( - appMetaQueryParams, - ['chainID'], - ); + const responseAfterCommit = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseAfterCommit.length).toEqual(1); }); @@ -143,7 +134,9 @@ describe('Test indexMetadataFromFile method', () => { }); it('should index app meta in db when called with valid app meta path', async () => { - const dbResponseBeforeIndex = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); + const dbResponseBeforeIndex = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(dbResponseBeforeIndex.length).toEqual(0); await indexMetadataFromFile(appMetaPath); @@ -154,48 +147,53 @@ describe('Test indexMetadataFromFile method', () => { }); it('should index token meta in db when called with valid token meta path', async () => { - const dbResponseBeforeIndex = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); + const dbResponseBeforeIndex = await tokenMetadataTable.find(tokenMetaQueryParams, [ + 'chainName', + ]); expect(dbResponseBeforeIndex.length).toEqual(0); await indexMetadataFromFile(tokenMetaPath); - const dbResponse = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); - expect(dbResponse[0].chainID).toEqual(appMetaObj.chainID); + const dbResponse = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); + expect(dbResponse[0].chainName).toEqual(appMetaObj.chainName); expect(dbResponse.length).toEqual(1); }); it('should index app meta in db only after commit when called with valid app meta path and dbTrx', async () => { - const responseBeforeIndex = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); + const responseBeforeIndex = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseBeforeIndex.length).toEqual(0); const dbTrx = await startDBTransaction(connection); await indexMetadataFromFile(appMetaPath, dbTrx); - const responseBeforeCommit = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); + const responseBeforeCommit = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseBeforeCommit.length).toEqual(0); await commitDBTransaction(dbTrx); - const responseAfterCommit = await applicationMetadataTable.find( - appMetaQueryParams, - ['chainID'], - ); + const responseAfterCommit = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseAfterCommit.length).toEqual(1); }); it('should index token meta in db only after commit when called with valid token meta path and dbTrx', async () => { - const responseBeforeIndex = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); + const responseBeforeIndex = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); expect(responseBeforeIndex.length).toEqual(0); const dbTrx = await startDBTransaction(connection); await indexMetadataFromFile(tokenMetaPath, dbTrx); - const responseBeforeCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); + const responseBeforeCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); expect(responseBeforeCommit.length).toEqual(0); await commitDBTransaction(dbTrx); - const responseAfterCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); + const responseAfterCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); expect(responseAfterCommit.length).toEqual(1); }); @@ -211,19 +209,13 @@ describe('Test deleteAppMeta method', () => { afterEach(async () => applicationMetadataTable.delete(appMetaQueryParams)); it('should delete indexed app meta from db when called with valid metadata object', async () => { - const dbResponseBefore = await applicationMetadataTable.find( - appMetaQueryParams, - ['chainID'], - ); + const dbResponseBefore = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); expect(dbResponseBefore[0].chainID).toEqual(appMetaObj.chainID); expect(dbResponseBefore.length).toEqual(1); await deleteAppMeta(appMetaObj); - const dbResponse = await applicationMetadataTable.find( - appMetaQueryParams, - ['chainID'], - ); + const dbResponse = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); expect(dbResponse.length).toEqual(0); }); @@ -235,16 +227,17 @@ describe('Test deleteAppMeta method', () => { const dbTrx = await startDBTransaction(connection); await deleteAppMeta(appMetaObj, dbTrx); - const responseBeforeCommit = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); + const responseBeforeCommit = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseBeforeCommit[0].chainID).toEqual(appMetaObj.chainID); expect(responseBeforeCommit.length).toEqual(1); await commitDBTransaction(dbTrx); - const responseAfterCommit = await applicationMetadataTable.find( - appMetaQueryParams, - ['chainID'], - ); + const responseAfterCommit = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseAfterCommit.length).toEqual(0); }); @@ -257,31 +250,33 @@ describe('Test deleteAppMeta method', () => { describe('Test deleteTokenMeta method', () => { const tokenIDs = tokenMetaObj.tokens.map(token => token.tokenID); - beforeEach(async () => indexTokensMeta({ - chainID: appMetaObj.chainID, - chainName: appMetaObj.chainName, - network: appMetaObj.networkType, - ...tokenMetaObj, - })); + beforeEach(async () => + indexTokensMeta({ + chainID: appMetaObj.chainID, + chainName: appMetaObj.chainName, + network: appMetaObj.networkType, + ...tokenMetaObj, + }), + ); afterEach(async () => tokenMetadataTable.delete(tokenMetaQueryParams)); it('should delete indexed token meta from db when called with valid token metadata object', async () => { - const dbResponseBefore = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); - expect(dbResponseBefore[0].chainID).toEqual(appMetaObj.chainID); + const dbResponseBefore = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); + expect(dbResponseBefore[0].chainName).toEqual(appMetaObj.chainName); expect(dbResponseBefore.length).toEqual(1); await deleteTokensMeta({ tokenIDs, }); - const dbResponse = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); + const dbResponse = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); expect(dbResponse.length).toEqual(0); }); it('should delete indexed token meta from db only after commit when called with dbTrx', async () => { - const dbResponseBefore = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); - expect(dbResponseBefore[0].chainID).toEqual(appMetaObj.chainID); + const dbResponseBefore = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); + expect(dbResponseBefore[0].chainName).toEqual(appMetaObj.chainName); expect(dbResponseBefore.length).toEqual(1); const dbTrx = await startDBTransaction(connection); @@ -292,13 +287,13 @@ describe('Test deleteTokenMeta method', () => { dbTrx, ); - const responseBeforeCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); - expect(dbResponseBefore[0].chainID).toEqual(appMetaObj.chainID); + const responseBeforeCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); + expect(dbResponseBefore[0].chainName).toEqual(appMetaObj.chainName); expect(responseBeforeCommit.length).toEqual(1); await commitDBTransaction(dbTrx); - const responseAfterCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); + const responseAfterCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); expect(responseAfterCommit.length).toEqual(0); }); @@ -327,18 +322,22 @@ describe('Test deleteIndexedMetadataFromFile method', () => { await deleteIndexedMetadataFromFile(appMetaPath); - const dbResponseAfterDelete = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); + const dbResponseAfterDelete = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(dbResponseAfterDelete.length).toEqual(0); }); it('should delete indexed token meta in db when called with valid token meta path', async () => { - const dbResponse = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); - expect(dbResponse[0].chainID).toEqual(appMetaObj.chainID); + const dbResponse = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); + expect(dbResponse[0].chainName).toEqual(appMetaObj.chainName); expect(dbResponse.length).toEqual(1); await deleteIndexedMetadataFromFile(tokenMetaPath); - const dbResponseAfterDelete = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); + const dbResponseAfterDelete = await tokenMetadataTable.find(tokenMetaQueryParams, [ + 'chainName', + ]); expect(dbResponseAfterDelete.length).toEqual(0); }); @@ -350,31 +349,35 @@ describe('Test deleteIndexedMetadataFromFile method', () => { const dbTrx = await startDBTransaction(connection); await deleteIndexedMetadataFromFile(appMetaPath, dbTrx); - const responseBeforeCommit = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); + const responseBeforeCommit = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseBeforeCommit[0].chainID).toEqual(appMetaObj.chainID); expect(responseBeforeCommit.length).toEqual(1); await commitDBTransaction(dbTrx); - const responseAfterCommit = await applicationMetadataTable.find(appMetaQueryParams, ['chainID']); + const responseAfterCommit = await applicationMetadataTable.find(appMetaQueryParams, [ + 'chainID', + ]); expect(responseAfterCommit.length).toEqual(0); }); it('should delete indexed token meta in db only after commit when called with valid token meta path and dbTrx', async () => { - const responseBefore = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); - expect(responseBefore[0].chainID).toEqual(appMetaObj.chainID); + const responseBefore = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); + expect(responseBefore[0].chainName).toEqual(appMetaObj.chainName); expect(responseBefore.length).toEqual(1); const dbTrx = await startDBTransaction(connection); await deleteIndexedMetadataFromFile(tokenMetaPath, dbTrx); - const responseBeforeCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); - expect(responseBeforeCommit[0].chainID).toEqual(appMetaObj.chainID); + const responseBeforeCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); + expect(responseBeforeCommit[0].chainName).toEqual(appMetaObj.chainName); expect(responseBeforeCommit.length).toEqual(1); await commitDBTransaction(dbTrx); - const responseAfterCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainID']); + const responseAfterCommit = await tokenMetadataTable.find(tokenMetaQueryParams, ['chainName']); expect(responseAfterCommit.length).toEqual(0); }); @@ -395,7 +398,7 @@ describe('Test indexAllBlockchainAppsMeta method', () => { expect(() => indexAllBlockchainAppsMeta()).rejects.toThrow(); }); - xit('should index app and token meta in db when data is present', async () => { + it('should index app and token meta in db when data is present', async () => { await downloadRepositoryToFS(); expect(await applicationMetadataTable.count()).toEqual(0); expect(await tokenMetadataTable.count()).toEqual(0); diff --git a/services/blockchain-app-registry/tests/functional/shared/utils/download.test.js b/services/blockchain-app-registry/tests/functional/shared/utils/download.test.js index 73854c75a..835deb571 100644 --- a/services/blockchain-app-registry/tests/functional/shared/utils/download.test.js +++ b/services/blockchain-app-registry/tests/functional/shared/utils/download.test.js @@ -64,42 +64,44 @@ describe('Test downloadAndExtractTarball method', () => { }); describe('Test downloadFile method', () => { - const fileUrl = 'https://raw.githubusercontent.com/LiskHQ/lisk-service/v0.6.0/known_accounts/known_mainnet.json'; + const fileUrl = + 'https://api.github.com/repos/vardan10/app-registry-forked/contents/betanet/Enevti/nativetokens.json?ref=finalTestBranch'; + const headers = { 'User-Agent': 'GitHub-File-Downloader' }; const filePath = `${dirPath}/test.json`; it('should download file for a correct url and file path', async () => { await mkdir(dirPath); - await downloadFile(fileUrl, filePath); + await downloadFile(fileUrl, headers, filePath); expect(await exists(filePath)).toEqual(true); await rmdir(filePath); }); it('should throw error when url is invalid', async () => { - expect(downloadFile(`${fileUrl}/invalid_file`, filePath)).rejects.toThrow(); + expect(downloadFile(`${fileUrl}/invalid_file`, headers, filePath)).rejects.toThrow(); }); it('should throw error when url is undefined', async () => { - expect(downloadFile(undefined, filePath)).rejects.toThrow(); + expect(downloadFile(undefined, headers, filePath)).rejects.toThrow(); }); it('should throw error when url is null', async () => { - expect(downloadFile(null, filePath)).rejects.toThrow(); + expect(downloadFile(null, headers, filePath)).rejects.toThrow(); }); it('should throw error when file path is undefined', async () => { - expect(downloadFile(url, undefined)).rejects.toThrow(); + expect(downloadFile(url, headers, undefined)).rejects.toThrow(); }); it('should throw error when file path is null', async () => { - expect(downloadFile(url, null)).rejects.toThrow(); + expect(downloadFile(url, headers, null)).rejects.toThrow(); }); it('should throw error when both url and file path are undefined', async () => { - expect(downloadFile(undefined, undefined)).rejects.toThrow(); + expect(downloadFile(undefined, headers, undefined)).rejects.toThrow(); }); it('should throw error when both url and file path are null', async () => { - expect(downloadFile(null, null)).rejects.toThrow(); + expect(downloadFile(null, headers, null)).rejects.toThrow(); }); }); diff --git a/services/blockchain-app-registry/tests/functional/shared/utils/downloadRepository.test.js b/services/blockchain-app-registry/tests/functional/shared/utils/downloadRepository.test.js index 93ddc3046..62d40cf11 100644 --- a/services/blockchain-app-registry/tests/functional/shared/utils/downloadRepository.test.js +++ b/services/blockchain-app-registry/tests/functional/shared/utils/downloadRepository.test.js @@ -17,24 +17,33 @@ const path = require('path'); const _ = require('lodash'); -jest.setTimeout(15000); - const { Utils: { - fs: { rmdir, exists }, + fs: { exists, mkdir, rmdir, write }, }, DB: { MySQL: { - KVStore: { getKeyValueTable }, + KVStore: { configureKeyValueTable, getKeyValueTable }, }, }, } = require('lisk-service-framework'); +const { appMetaObj, tokenMetaObj } = require('../../../constants/metadataIndex'); + +const config = require('../../../../config'); + +const MYSQL_ENDPOINT = config.endpoints.mysql; +configureKeyValueTable(MYSQL_ENDPOINT); + +const tempDir = `${__dirname}/temp/${appMetaObj.networkType}/${appMetaObj.chainName}`; +const appMetaPath = `${tempDir}/${config.FILENAME.APP_JSON}`; +const tokenMetaPath = `${tempDir}/${config.FILENAME.NATIVETOKENS_JSON}`; + const { getRepoDownloadURL, getLatestCommitHash, getCommitInfo, - getFileDownloadURL, + getFileDownloadURLAndHeaders, getDiff, buildEventPayload, syncWithRemoteRepo, @@ -43,15 +52,22 @@ const { } = require('../../../../shared/utils/downloadRepository'); const { KV_STORE_KEY } = require('../../../../shared/constants'); -const config = require('../../../../config'); -const MYSQL_ENDPOINT = config.endpoints.mysql; const getKeyValueTableInstance = () => getKeyValueTable(MYSQL_ENDPOINT); const commitHashRegex = /^[a-f0-9]{40}$/; const enevtiAppFilePath = path.resolve(`${config.dataDir}/app-registry/devnet/Enevti/app.json`); -xdescribe('Test getLatestCommitHash method', () => { +beforeAll(async () => { + // Create metadata files in a temporary directory + await mkdir(tempDir); + await write(appMetaPath, JSON.stringify(appMetaObj)); + await write(tokenMetaPath, JSON.stringify(tokenMetaObj)); +}); + +afterAll(async () => rmdir(tempDir)); + +describe('Test getLatestCommitHash method', () => { it('should return correct latest commit hash info', async () => { const response = await getLatestCommitHash(); expect(typeof response).toEqual('string'); @@ -82,13 +98,14 @@ xdescribe('Test getCommitInfo method', () => { xdescribe('Test getRepoDownloadURL method', () => { it('should return correct repository download url info', async () => { /* eslint-disable-next-line no-useless-escape */ - const repoUrlRegex = /^https:\/\/\w*\.github\.com\/LiskHQ\/app-registry\/legacy.tar.gz\/refs\/heads\/main(?:\?token=\w+)?$/; + const repoUrlRegex = + /^https:\/\/\w*\.github\.com\/LiskHQ\/app-registry\/legacy.tar.gz\/refs\/heads\/main(?:\?token=\w+)?$/; const response = await getRepoDownloadURL(); expect(response.url).toMatch(repoUrlRegex); }); }); -xdescribe('Test getFileDownloadURL method', () => { +xdescribe('Test getFileDownloadURLAndHeaders method', () => { it('should return correct file download info when file is valid', async () => { const { owner, repo } = getRepoInfoFromURL(config.gitHub.appRegistryRepo); const fileName = 'devnet/Enevti/app.json'; @@ -97,22 +114,24 @@ xdescribe('Test getFileDownloadURL method', () => { const repoSafe = _.escapeRegExp(repo); const branchSafe = _.escapeRegExp(config.gitHub.branch); const fileNameSafe = _.escapeRegExp(fileName); - const fileUrlRegexStr = `^https://raw.githubusercontent.com/${ownerSafe}/${repoSafe}/${branchSafe}/${fileNameSafe}(?:\\?token=\\w+)?$`; - const fileUrlRegex = new RegExp(fileUrlRegexStr); - const response = await getFileDownloadURL(fileName); - expect(response).toMatch(fileUrlRegex); + const fileUrl = `https://api.github.com/repos/${ownerSafe}/${repoSafe}/contents/${fileNameSafe}?ref=${branchSafe}`; + + const response = await getFileDownloadURLAndHeaders(fileName); + expect(response.url).toEqual(fileUrl); }); it('should throw error when file is invalid', async () => { - expect(async () => getFileDownloadURL('devnet/Enevti/invalid_file')).rejects.toThrow(); + expect(async () => + getFileDownloadURLAndHeaders('devnet/Enevti/invalid_file'), + ).rejects.toThrow(); }); it('should throw error when file is undefined', async () => { - expect(async () => getFileDownloadURL(undefined)).rejects.toThrow(); + expect(async () => getFileDownloadURLAndHeaders(undefined)).rejects.toThrow(); }); it('should throw error when file is null', async () => { - expect(async () => getFileDownloadURL(null)).rejects.toThrow(); + expect(async () => getFileDownloadURLAndHeaders(null)).rejects.toThrow(); }); }); @@ -131,26 +150,29 @@ xdescribe('Test getDiff method', () => { }); it('should throw error when both commits are invalid', async () => { - expect(() => getDiff( - 'aaaa64896420410dcbade293980fe42ca95931d0', - 'bbbb21f84cdcdb3b28d3766cf675d942887327c3', - ), + expect(() => + getDiff( + 'aaaa64896420410dcbade293980fe42ca95931d0', + 'bbbb21f84cdcdb3b28d3766cf675d942887327c3', + ), ).rejects.toThrow(); }); it('should throw error when lastSyncedCommitHash is invalid', async () => { - expect(() => getDiff( - 'aaaa64896420410dcbade293980fe42ca95931d0', - '5ca021f84cdcdb3b28d3766cf675d942887327c3', - ), + expect(() => + getDiff( + 'aaaa64896420410dcbade293980fe42ca95931d0', + '5ca021f84cdcdb3b28d3766cf675d942887327c3', + ), ).rejects.toThrow(); }); it('should throw error when both latestCommitHash is invalid', async () => { - expect(() => getDiff( - '838464896420410dcbade293980fe42ca95931d0', - 'bbbb21f84cdcdb3b28d3766cf675d942887327c3', - ), + expect(() => + getDiff( + '838464896420410dcbade293980fe42ca95931d0', + 'bbbb21f84cdcdb3b28d3766cf675d942887327c3', + ), ).rejects.toThrow(); }); diff --git a/services/blockchain-app-registry/tests/unit/shared/metadataIndex.test.js b/services/blockchain-app-registry/tests/unit/shared/metadataIndex.test.js index fb649349c..2b9ec08a4 100644 --- a/services/blockchain-app-registry/tests/unit/shared/metadataIndex.test.js +++ b/services/blockchain-app-registry/tests/unit/shared/metadataIndex.test.js @@ -36,8 +36,8 @@ describe('Test indexTokensMeta method', () => { MySQL: { ...actual.DB.MySQL, getTableInstance: () => ({ - upsert: (dataArray) => expect(dataArray[0].tokenID) - .toEqual(mockTokenMetaObj.tokens[0].tokenID), + upsert: dataArray => + expect(dataArray[0].tokenID).toEqual(mockTokenMetaObj.tokens[0].tokenID), }), }, }, @@ -65,7 +65,7 @@ describe('Test indexAppMeta method', () => { MySQL: { ...actual.DB.MySQL, getTableInstance: () => ({ - upsert: (data) => expect(data.chainID).toEqual(mockAppMetaObj.chainID), + upsert: data => expect(data.chainID).toEqual(mockAppMetaObj.chainID), }), }, }, @@ -93,7 +93,7 @@ describe('Test indexMetadataFromFile method', () => { MySQL: { ...actual.DB.MySQL, getTableInstance: () => ({ - upsert: (data) => expect(data.chainID).toEqual(mockAppMetaObj.chainID), + upsert: data => expect(data.chainID).toEqual(mockAppMetaObj.chainID), }), }, }, @@ -101,7 +101,7 @@ describe('Test indexMetadataFromFile method', () => { ...actual.Utils, fs: { ...actual.Utils.fs, - read: (filePath) => { + read: filePath => { if (filePath === mockAppMetaPath) return JSON.stringify(mockAppMetaObj); if (filePath === mockTokenMetaPath) return JSON.stringify(mockTokenMetaObj); @@ -127,7 +127,7 @@ describe('Test indexMetadataFromFile method', () => { MySQL: { ...actual.DB.MySQL, getTableInstance: () => ({ - upsert: (data) => expect(data[0].tokenID).toEqual(mockTokenMetaObj.tokens[0].tokenID), + upsert: data => expect(data[0].tokenID).toEqual(mockTokenMetaObj.tokens[0].tokenID), }), getDBConnection: jest.fn(), startDbTransaction: jest.fn(), @@ -139,7 +139,7 @@ describe('Test indexMetadataFromFile method', () => { ...actual.Utils, fs: { ...actual.Utils.fs, - read: (filePath) => { + read: filePath => { if (filePath === mockAppMetaPath) return JSON.stringify(mockAppMetaObj); if (filePath === mockTokenMetaPath) return JSON.stringify(mockTokenMetaObj); @@ -173,10 +173,11 @@ describe('Test deleteAppMeta method', () => { MySQL: { ...actual.DB.MySQL, getTableInstance: () => ({ - delete: (data) => expect(data).toEqual({ - network: mockAppMetaObj.networkType, - chainName: mockAppMetaObj.chainName, - }), + delete: data => + expect(data).toEqual({ + network: mockAppMetaObj.networkType, + chainName: mockAppMetaObj.chainName, + }), }), }, }, @@ -205,7 +206,7 @@ describe('Test deleteTokensMeta method', () => { MySQL: { ...actual.DB.MySQL, getTableInstance: () => ({ - delete: (data) => expect(data.tokenID).toEqual(mockTokenMetaObj.tokens[0].tokenID), + delete: data => expect(data.tokenID).toEqual(mockTokenMetaObj.tokens[0].tokenID), }), }, }, @@ -233,10 +234,11 @@ describe('Test deleteIndexedMetadataFromFile method', () => { MySQL: { ...actual.DB.MySQL, getTableInstance: () => ({ - delete: (data) => expect(data).toEqual({ - network: mockAppMetaObj.networkType, - chainName: mockAppMetaObj.chainName, - }), + delete: data => + expect(data).toEqual({ + network: mockAppMetaObj.networkType, + chainName: mockAppMetaObj.chainName, + }), }), }, }, @@ -244,7 +246,7 @@ describe('Test deleteIndexedMetadataFromFile method', () => { ...actual.Utils, fs: { ...actual.Utils.fs, - read: (filePath) => { + read: filePath => { if (filePath === mockAppMetaPath) return JSON.stringify(mockAppMetaObj); if (filePath === mockTokenMetaPath) return JSON.stringify(mockTokenMetaObj); @@ -270,7 +272,7 @@ describe('Test deleteIndexedMetadataFromFile method', () => { MySQL: { ...actual.DB.MySQL, getTableInstance: () => ({ - delete: (data) => expect(data.tokenID).toEqual(mockTokenMetaObj.tokens[0].tokenID), + delete: data => expect(data.tokenID).toEqual(mockTokenMetaObj.tokens[0].tokenID), }), getDBConnection: jest.fn(), startDbTransaction: jest.fn(), @@ -282,7 +284,7 @@ describe('Test deleteIndexedMetadataFromFile method', () => { ...actual.Utils, fs: { ...actual.Utils.fs, - read: (filePath) => { + read: filePath => { if (filePath === mockAppMetaPath) return JSON.stringify(mockAppMetaObj); if (filePath === mockTokenMetaPath) return JSON.stringify(mockTokenMetaObj); @@ -336,11 +338,8 @@ describe('Test indexAllBlockchainAppsMeta method', () => { fs: { ...actualLiskServiceFramework.Utils.fs, getDirectories: () => ['Lisk'], - getFiles: () => [ - mockAppMetaPath, - mockTokenMetaPath, - ], - read: (filePath) => { + getFiles: () => [mockAppMetaPath, mockTokenMetaPath], + read: filePath => { if (filePath === mockAppMetaPath) return JSON.stringify(mockAppMetaObj); if (filePath === mockTokenMetaPath) return JSON.stringify(mockTokenMetaObj); @@ -349,7 +348,6 @@ describe('Test indexAllBlockchainAppsMeta method', () => { exists: () => true, }, }, - }; }); diff --git a/services/blockchain-app-registry/tests/unit/shared/utils/download.test.js b/services/blockchain-app-registry/tests/unit/shared/utils/download.test.js new file mode 100644 index 000000000..99d8575e3 --- /dev/null +++ b/services/blockchain-app-registry/tests/unit/shared/utils/download.test.js @@ -0,0 +1,107 @@ +const fs = require('fs'); +const http = require('http'); +const { downloadFile } = require('../../../../shared/utils/download'); // Replace with the actual import path. + +// Mocking the 'http' module to control responses for testing. +jest.mock('http', () => ({ + request: jest.fn(), +})); + +describe('downloadFile', () => { + const mockUrl = 'http://example.com/file.json'; + const mockHeaders = { Authorization: 'Bearer abc123' }; + const mockFilePath = '/path/to/downloaded/file.json'; + const mockData = { + content: Buffer.from('Hello, World!', 'utf-8').toString('base64'), + }; + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('it should download a file successfully', async () => { + const writeFileSyncMock = jest.spyOn(fs, 'writeFileSync').mockImplementation(() => {}); + + // Mock the HTTP response. + const mockHttpResponse = { + statusCode: 200, + statusMessage: 'OK', + on: (event, callback) => { + if (event === 'data') { + // Provide a valid JSON response + callback(JSON.stringify(mockData)); + } else if (event === 'end') { + callback(); + } + }, + }; + + // Mock the HTTP request and response. + http.request.mockImplementation((url, options, callback) => { + callback(mockHttpResponse); + return { + on: jest.fn(), + end: jest.fn(), + }; + }); + + await downloadFile(mockUrl, mockHeaders, mockFilePath); + + expect(http.request).toHaveBeenCalledWith( + mockUrl, + { method: 'GET', headers: mockHeaders }, + expect.any(Function), + ); + expect(writeFileSyncMock).toHaveBeenCalledWith(mockFilePath, 'Hello, World!'); + }); + + it('it should reject with an error when HTTP status code is not 200', async () => { + // Mock the HTTP response with an error status code. + const mockHttpResponse = { + statusCode: 404, + statusMessage: 'Not Found', + on: (event, callback) => { + if (event === 'end') { + callback(); + } + }, + }; + + // Mock the HTTP request and response. + http.request.mockImplementation((url, options, callback) => { + callback(mockHttpResponse); + return { + on: jest.fn(), + end: jest.fn(), + }; + }); + + await expect(downloadFile(mockUrl, mockHeaders, mockFilePath)).rejects.toThrowError( + 'Download failed with HTTP status code: 404 (Not Found).', + ); + }); + + it('it should reject with an error when request fails', async () => { + const mockError = new Error('Request error'); + + // Mock the HTTP request to trigger an error. + http.request.mockImplementation(() => { + throw mockError; + }); + + await expect(downloadFile(mockUrl, mockHeaders, mockFilePath)).rejects.toThrowError(mockError); + }); + + it('it should reject with an error for invalid URL or filePath', async () => { + const invalidUrl = ''; + const invalidFilePath = ''; + + await expect(downloadFile(invalidUrl, mockHeaders, mockFilePath)).rejects.toThrowError( + 'Invalid url or filePath. url: filePath:', + ); + + await expect(downloadFile(mockUrl, mockHeaders, invalidFilePath)).rejects.toThrowError( + 'Invalid url or filePath. url: http://example.com/file.json filePath:', + ); + }); +}); diff --git a/services/blockchain-app-registry/tests/unit/shared/utils/downloadRepository.test.js b/services/blockchain-app-registry/tests/unit/shared/utils/downloadRepository.test.js index f529ce8ba..d5238779f 100644 --- a/services/blockchain-app-registry/tests/unit/shared/utils/downloadRepository.test.js +++ b/services/blockchain-app-registry/tests/unit/shared/utils/downloadRepository.test.js @@ -20,6 +20,7 @@ const { filterMetaConfigFilesByNetwork, getModifiedFileNames, isMetadataFile, + getFileDownloadURLAndHeaders, } = require('../../../../shared/utils/downloadRepository'); const { getModifiedFileNamesInput, @@ -44,6 +45,35 @@ jest.mock('lisk-service-framework', () => { }; }); +describe('getFileDownloadURLAndHeaders', () => { + const { owner, repo } = getRepoInfoFromURL(config.gitHub.appRegistryRepo); + const file = 'testFile'; + + it('should return the correct URL and headers for a public repository', async () => { + const result = await getFileDownloadURLAndHeaders(file); + expect(result.url).toEqual( + `https://api.github.com/repos/${owner}/${repo}/contents/${file}?ref=${config.gitHub.branch}`, + ); + expect(result.headers).toHaveProperty('User-Agent'); + }); + + it('should return the correct URL and headers for a private repository with access token', async () => { + config.gitHub.accessToken = 'testToken'; + + const result = await getFileDownloadURLAndHeaders(file); + expect(result.url).toEqual( + `https://api.github.com/repos/${owner}/${repo}/contents/${file}?ref=${config.gitHub.branch}`, + ); + expect(result.headers).toHaveProperty('User-Agent'); + expect(result.headers).toHaveProperty('Authorization'); + expect(result.headers.Authorization).toEqual('token testToken'); + }); + + it('should throw error if no params are supplied', async () => { + await expect(getFileDownloadURLAndHeaders()).rejects.toThrow(); + }); +}); + describe('Test getRepoInfoFromURL method', () => { it('should return proper response when url is valid', async () => { const response = getRepoInfoFromURL(config.gitHub.appRegistryRepo); @@ -110,10 +140,7 @@ describe('Test getUniqueNetworkAppDirPairs method', () => { }); it('should return proper response when files are unique', async () => { - const response = await getUniqueNetworkAppDirPairs([ - 'devnet/dir2', - 'mainnet/dir1/extra/text', - ]); + const response = await getUniqueNetworkAppDirPairs(['devnet/dir2', 'mainnet/dir1/extra/text']); expect(response).toEqual([ { network: 'devnet', diff --git a/services/blockchain-app-registry/tests/unit/shared/utils/param.test.js b/services/blockchain-app-registry/tests/unit/shared/utils/param.test.js index 02c42a7c3..f977731a0 100644 --- a/services/blockchain-app-registry/tests/unit/shared/utils/param.test.js +++ b/services/blockchain-app-registry/tests/unit/shared/utils/param.test.js @@ -58,21 +58,27 @@ describe('Test normalizeRangeParam method', () => { const params = { key: 'abc:456', }; - expect(() => normalizeRangeParam(params, 'key')).toThrow(new ValidationException("Invalid (non-numeric) 'key' range values supplied: abc:456.")); + expect(() => normalizeRangeParam(params, 'key')).toThrow( + new ValidationException("Invalid (non-numeric) 'key' range values supplied: abc:456."), + ); }); it('should return ValidationException when `to` is not a number', async () => { const params = { key: '123:abc', }; - expect(() => normalizeRangeParam(params, 'key')).toThrow(new ValidationException("Invalid (non-numeric) 'key' range values supplied: 123:abc.")); + expect(() => normalizeRangeParam(params, 'key')).toThrow( + new ValidationException("Invalid (non-numeric) 'key' range values supplied: 123:abc."), + ); }); it('should return ValidationException when `from` is greater than `to`', async () => { const params = { key: '456:123', }; - expect(() => normalizeRangeParam(params, 'key')).toThrow(new ValidationException('From key cannot be greater than to key.')); + expect(() => normalizeRangeParam(params, 'key')).toThrow( + new ValidationException('From key cannot be greater than to key.'), + ); }); it('should return proper response when only `from` is specified', async () => { @@ -84,10 +90,12 @@ describe('Test normalizeRangeParam method', () => { const { key, ...paramsWithoutKey } = params; expect(response).toEqual({ ...paramsWithoutKey, - propBetweens: [{ - property: 'key', - from: 123, - }], + propBetweens: [ + { + property: 'key', + from: 123, + }, + ], }); }); @@ -100,10 +108,12 @@ describe('Test normalizeRangeParam method', () => { const { key, ...paramsWithoutKey } = params; expect(response).toEqual({ ...paramsWithoutKey, - propBetweens: [{ - property: 'key', - to: 456, - }], + propBetweens: [ + { + property: 'key', + to: 456, + }, + ], }); }); @@ -114,16 +124,16 @@ describe('Test normalizeRangeParam method', () => { }; const response = normalizeRangeParam(params, 'key'); const { key, ...paramsWithoutKey } = params; - expect(response).toEqual( - { - ...paramsWithoutKey, - propBetweens: [{ + expect(response).toEqual({ + ...paramsWithoutKey, + propBetweens: [ + { property: 'key', from: 123, to: 456, }, - ], - }); + ], + }); }); it('should return proper response when multiple range params are specified', async () => { @@ -136,24 +146,24 @@ describe('Test normalizeRangeParam method', () => { // Normalize key const response = normalizeRangeParam(params, 'key'); const { key, ...paramsWithoutKey } = params; - expect(response).toEqual( - { - ...paramsWithoutKey, - propBetweens: [{ + expect(response).toEqual({ + ...paramsWithoutKey, + propBetweens: [ + { property: 'key', from: 123, to: 456, }, - ], - }); + ], + }); // Normalize key3 const response2 = normalizeRangeParam(response, 'key3'); const { key3, ...paramsWithoutKey3 } = paramsWithoutKey; - expect(response2).toEqual( - { - ...paramsWithoutKey3, - propBetweens: [{ + expect(response2).toEqual({ + ...paramsWithoutKey3, + propBetweens: [ + { property: 'key', from: 123, to: 456, @@ -163,7 +173,7 @@ describe('Test normalizeRangeParam method', () => { from: 666, to: 777, }, - ], - }); + ], + }); }); }); diff --git a/services/blockchain-app-registry/yarn.lock b/services/blockchain-app-registry/yarn.lock index 237a77be5..4c4e519ff 100644 --- a/services/blockchain-app-registry/yarn.lock +++ b/services/blockchain-app-registry/yarn.lock @@ -10,58 +10,58 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" @@ -92,10 +92,10 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -122,43 +122,43 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -195,6 +195,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -245,9 +252,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -260,28 +267,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -318,173 +325,196 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^16.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": @@ -511,18 +541,18 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" @@ -757,48 +787,48 @@ integrity sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw== "@octokit/webhooks@^10.0.0": - version "10.9.1" - resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-10.9.1.tgz#4674a6924567419d7d0187a8b6c88ec468a97a86" - integrity sha512-5NXU4VfsNOo2VSU/SrLrpPH2Z1ZVDOWFcET4EpnEBX1uh/v8Uz65UVuHIRx5TZiXhnWyRE9AO1PXHa+M/iWwZA== + version "10.9.2" + resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-10.9.2.tgz#1b1e79a70fa5b22a3149b18432cbf3f39dbcb544" + integrity sha512-hFVF/szz4l/Y/GQdKxNmQjUke0XJXK986p+ucIlubTGVPVtVtup5G1jarQfvCMBs9Fvlf9dvH8K83E4lefmofQ== dependencies: "@octokit/request-error" "^3.0.0" "@octokit/webhooks-methods" "^3.0.0" "@octokit/webhooks-types" "6.11.0" aggregate-error "^3.1.0" -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@types/aws-lambda@^8.10.83": - version "8.10.122" - resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.122.tgz#206c8d71b09325d26a458dba27db842afdc54df1" - integrity sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw== + version "8.10.130" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.130.tgz#d4a44201f0e47c8320a5868d845ad654f3b4adc2" + integrity sha512-HxTfLeGvD1wTJqIGwcBCpNmHKenja+We1e0cuzeIDFfbEj3ixnlTInyPR/81zAe0Ss/Ip12rFK6XNeMLVucOSg== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -807,31 +837,31 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" "@types/btoa-lite@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.0.tgz#e190a5a548e0b348adb0df9ac7fa5f1151c7cca4" - integrity sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.2.tgz#82bb6aab00abf7cff3ca2825abe010c0cd536ae5" + integrity sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg== "@types/cookie@^0.4.1": version "0.4.1" @@ -839,77 +869,69 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/jsonwebtoken@^9.0.0": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#1f22283b8e1f933af9e195d720798b64b399d84c" - integrity sha512-b0jGiOgHtZ2jqdPgPnP6WLCXZk1T8p06A/vPGzUvxpFGgKMbjXJDjC5m52ErqBnIuWZFgGoIJyRdeG5AyreJjA== + version "9.0.5" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz#0bd9b841c9e6c5a937c17656e2368f65da025588" + integrity sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA== dependencies: "@types/node" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== - -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== -"@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -918,36 +940,6 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - aggregate-error@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -1054,23 +1046,24 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -1086,14 +1079,14 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: @@ -1114,12 +1107,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^27.5.1" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -1143,9 +1136,9 @@ before-after-hook@^2.2.0: integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -1209,19 +1202,14 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: @@ -1275,13 +1263,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1303,10 +1292,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -1341,9 +1330,9 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: version "1.2.3" @@ -1355,13 +1344,13 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: @@ -1435,10 +1424,10 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== convert-source-map@^2.0.0: version "2.0.0" @@ -1458,6 +1447,19 @@ cors@~2.8.5: object-assign "^4" vary "^1" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" @@ -1475,32 +1477,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -1513,7 +1489,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1532,11 +1508,6 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -1544,10 +1515,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -1559,16 +1530,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -1617,17 +1588,10 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== ecdsa-sig-formatter@1.0.11: version "1.0.11" @@ -1641,15 +1605,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -1669,9 +1633,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -1685,9 +1649,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -1708,25 +1672,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -1736,7 +1700,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -1750,7 +1714,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -1758,13 +1722,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -1800,37 +1764,16 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -1866,17 +1809,18 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -1918,7 +1862,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -1930,10 +1874,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -1980,10 +1924,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -2017,15 +1961,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -2060,7 +2004,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2112,11 +2056,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -2135,19 +2079,12 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" @@ -2165,28 +2102,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -2248,12 +2168,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -2333,11 +2253,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2386,11 +2306,6 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2437,11 +2352,6 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: dependencies: which-typed-array "^1.1.11" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -2465,11 +2375,11 @@ isstream@^0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -2480,6 +2390,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -2506,410 +2427,363 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.6.3" + "@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 "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== - dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -2924,39 +2798,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3033,9 +2874,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -3084,13 +2925,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -3176,7 +3017,7 @@ lodash.once@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3328,9 +3169,9 @@ mkdirp@^1.0.3: integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -3345,9 +3186,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.21: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -3393,9 +3234,9 @@ ms@2.1.3, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -3437,9 +3278,9 @@ negotiator@0.6.3: integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" @@ -3463,10 +3304,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" @@ -3485,20 +3326,15 @@ nuid@^1.1.4: resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -3506,12 +3342,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -3579,6 +3415,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -3613,11 +3456,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -3693,14 +3531,14 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" prettyjson@^1.2.1: version "1.2.5" @@ -3729,10 +3567,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -3742,10 +3580,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" @@ -3761,11 +3599,6 @@ qs@^6.11.0: dependencies: side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -3791,10 +3624,10 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" @@ -3855,11 +3688,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -3872,15 +3700,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -3891,13 +3719,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" @@ -3927,13 +3748,6 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -3980,6 +3794,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -4015,7 +3839,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4087,24 +3911,19 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4154,7 +3973,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4231,7 +4050,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -4245,24 +4064,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -4301,14 +4107,6 @@ tarn@^3.0.2: resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -4323,11 +4121,6 @@ text-decoding@^1.0.0: resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - tildify@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" @@ -4360,23 +4153,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4463,13 +4239,6 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - tz-offset@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tz-offset/-/tz-offset-0.0.1.tgz#fef920257024d3583ed9072a767721a18bdb8a76" @@ -4485,6 +4254,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + universal-github-app-jwt@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz#d57cee49020662a95ca750a057e758a1a7190e6e" @@ -4494,20 +4268,15 @@ universal-github-app-jwt@^1.1.1: jsonwebtoken "^9.0.0" universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4521,14 +4290,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4552,35 +4313,21 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" vary@^1: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -4592,28 +4339,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -4622,15 +4347,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -4642,13 +4358,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -4674,36 +4390,19 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + signal-exit "^3.0.7" ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest-ssl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" @@ -4724,20 +4423,25 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/services/blockchain-connector/.npmrc b/services/blockchain-connector/.npmrc index af5fdbc72..f567e4ba5 100644 --- a/services/blockchain-connector/.npmrc +++ b/services/blockchain-connector/.npmrc @@ -1,2 +1 @@ message = "Version %s" -registry = "https://npm.lisk.com" diff --git a/services/blockchain-connector/README.md b/services/blockchain-connector/README.md index 5363f7ccc..81ad85d55 100644 --- a/services/blockchain-connector/README.md +++ b/services/blockchain-connector/README.md @@ -31,9 +31,16 @@ A list of the most commonly used environment variables is presented below: - `USE_LISK_IPC_CLIENT`: Boolean flag to enable IPC-based connection to the Lisk SDK-based application node. Not applicable to a docker-based setup. - `LISK_APP_DATA_PATH`: Data path to connect with the Lisk SDK-based application node over IPC. Not applicable to a docker-based setup. - `GENESIS_BLOCK_URL`: URL of the Lisk SDK-based application' genesis block. Only to be used when the genesis block is large enough to be transmitted over API calls within the timeout. -- `GEOIP_JSON`: URL of GeoIP server +- `GEOIP_JSON`: URL of GeoIP server. - `ENABLE_BLOCK_CACHING`: Boolean flag to enable the block caching. Enabled by default. To disable, set it to `false`. - `EXPIRY_IN_HOURS`: Expiry time (in hours) for block cache. By default, it is set to 12. +- `CLIENT_INSTANTIATION_MAX_WAIT_TIME`: Maximum wait time (in milliseconds) for the API client instantiation before forcefully instantiating a new client when getApiClient is invoked. By default, it is set to 5000. +- `CLIENT_INSTANTIATION_RETRY_INTERVAL`: Retry interval (in milliseconds) to invoke instantiate API client when getApiClient is invoked. By default, it is set to 5. +- `CLIENT_ALIVE_ASSUMPTION_TIME`: Interval (in milliseconds) for which the WS API Client is assumed to be alive since the last ping/pong success check. By default, it is set to 5000. +- `HEARTBEAT_ACK_MAX_WAIT_TIME`: Maximum time (in milliseconds) within which the checkIsClientAlive's algorithm expects a corresponding `pong` for the `ping` sent to the WS server. By default, it is set to 1000. +- `ENDPOINT_INVOKE_MAX_RETRIES`: Maximum number of endpoint invocation request retries to the node. By default, it is set to 3. +- `ENDPOINT_INVOKE_RETRY_DELAY`: Delay (in milliseconds) between each endpoint invocation request retry. By default, it is set to 10. +- `CONNECTOR_EXIT_DELAY_IN_HOURS`: Delay (in hours) after which the blockchain-connector microservice exits. The service should restart automatically if deployed using Docker or PM2. To be removed eventually. To enable it, set it higher than `0`. By default, it is set to `0`. - `JOB_INTERVAL_CACHE_CLEANUP`: Job run interval to cleanup block cache. By default, it is set to 0. - `JOB_SCHEDULE_CACHE_CLEANUP`: Job run cron schedule to cleanup block cache. By default, it is set to run every 12 hours (`0 */12 * * *`). - `JOB_INTERVAL_REFRESH_PEERS`: Job run interval to refresh the peers list. By default, it is set to run every 60 seconds. diff --git a/services/blockchain-connector/app.js b/services/blockchain-connector/app.js index 1f9394980..f1255dc72 100644 --- a/services/blockchain-connector/app.js +++ b/services/blockchain-connector/app.js @@ -14,11 +14,7 @@ * */ const path = require('path'); -const { - Microservice, - Logger, - LoggerConfig, -} = require('lisk-service-framework'); +const { Signals, Microservice, Logger, LoggerConfig } = require('lisk-service-framework'); const config = require('./config'); @@ -35,34 +31,43 @@ const app = Microservice({ transporter: config.transporter, brokerTimeout: config.brokerTimeout, // in seconds logger: config.log, + events: { + 'update.index.status': async payload => { + logger.debug("Received a 'update.index.status' moleculer event from indexer."); + Signals.get('updateIndexStatus').dispatch(payload); + }, + }, }); nodeStatus.waitForNode().then(async () => { logger.info(`Found a node, starting service ${packageJson.name.toUpperCase()}...`); - // Add routes, events & jobs - app.addMethods(path.join(__dirname, 'methods')); + nodeStatus.waitForNodeToFinishSync().then(async () => { + // Add routes, events & jobs + app.addMethods(path.join(__dirname, 'methods')); - const allBlockchainEndpoints = await require('./methods/proxy/allEndpoints'); - allBlockchainEndpoints.forEach((method) => app.addMethod(method)); + const allBlockchainEndpoints = await require('./methods/proxy/allEndpoints'); + allBlockchainEndpoints.forEach(method => app.addMethod(method)); - app.addEvents(path.join(__dirname, 'events')); - const allBlockchainEvents = await require('./events/proxy/allEvents'); - allBlockchainEvents.forEach((event) => app.addEvent(event)); + app.addEvents(path.join(__dirname, 'events')); + const allBlockchainEvents = await require('./events/proxy/allEvents'); + allBlockchainEvents.forEach(event => app.addEvent(event)); - app.addJobs(path.join(__dirname, 'jobs')); + app.addJobs(path.join(__dirname, 'jobs')); - if (config.enableTestingMode) { - app.addMethods(path.join(__dirname, 'methods', 'tests')); - } + if (config.enableTestingMode) { + app.addMethods(path.join(__dirname, 'methods', 'tests')); + } - app.run() - .then(async () => { - await init(); - }) - .catch(err => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); - logger.fatal(err.stack); - process.exit(1); - }); + app + .run() + .then(async () => { + await init(); + }) + .catch(err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); + logger.fatal(err.stack); + process.exit(1); + }); + }); }); diff --git a/services/blockchain-connector/config.js b/services/blockchain-connector/config.js index 671804a74..baed64d09 100644 --- a/services/blockchain-connector/config.js +++ b/services/blockchain-connector/config.js @@ -28,7 +28,7 @@ const config = { /** * Inter-service message broker */ -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 10; // in seconds /** @@ -49,8 +49,8 @@ config.liskAppDataPath = process.env.LISK_APP_DATA_PATH || '~/.lisk/lisk-core'; * Network-related settings */ config.constants.GENESIS_BLOCK_URL_DEFAULT = ''; -config.genesisBlockUrl = process.env.GENESIS_BLOCK_URL - || config.constants.GENESIS_BLOCK_URL_DEFAULT; +config.genesisBlockUrl = + process.env.GENESIS_BLOCK_URL || config.constants.GENESIS_BLOCK_URL_DEFAULT; config.networks = { LISK: [ { @@ -96,23 +96,43 @@ config.cache = { isBlockCachingEnabled: Boolean( String(process.env.ENABLE_BLOCK_CACHING).toLowerCase() !== 'false', ), // Enabled by default - expiryInHours: process.env.EXPIRY_IN_HOURS || 12, + expiryInHours: Number(process.env.EXPIRY_IN_HOURS) || 12, dbDataDir: 'data/db_cache', }; config.job = { // Interval takes priority over schedule and must be greater than 0 to be valid cacheCleanup: { - interval: process.env.JOB_INTERVAL_CACHE_CLEANUP || 0, + interval: Number(process.env.JOB_INTERVAL_CACHE_CLEANUP) || 0, schedule: process.env.JOB_SCHEDULE_CACHE_CLEANUP || '0 */12 * * *', }, refreshPeers: { - interval: process.env.JOB_INTERVAL_REFRESH_PEERS || 60, + interval: Number(process.env.JOB_INTERVAL_REFRESH_PEERS) || 60, schedule: process.env.JOB_SCHEDULE_REFRESH_PEERS || '', }, }; -// Every n number of blocks, verify if client connection is alive -config.connectionVerifyBlockInterval = process.env.CONN_VERIFY_BLOCK_INTERVAL || 10; +config.apiClient = { + heartbeatAckMaxWaitTime: Number(process.env.HEARTBEAT_ACK_MAX_WAIT_TIME) || 1000, // in millisecs + aliveAssumptionTime: Number(process.env.CLIENT_ALIVE_ASSUMPTION_TIME) || 5 * 1000, // in millisecs + aliveAssumptionTimeBeforeGenesis: 30 * 1000, + wsConnectionLimit: 10, + instantiation: { + maxWaitTime: Number(process.env.CLIENT_INSTANTIATION_MAX_WAIT_TIME) || 5 * 1000, // in millisecs + retryInterval: Number(process.env.CLIENT_INSTANTIATION_RETRY_INTERVAL) || 1, // in millisecs + }, + request: { + maxRetries: Number(process.env.ENDPOINT_INVOKE_MAX_RETRIES) || 3, + retryDelay: Number(process.env.ENDPOINT_INVOKE_RETRY_DELAY) || 10, // in millisecs + }, +}; + +// Every n milliseconds, verify if client connection is alive +config.clientConnVerifyInterval = + Number(process.env.CLIENT_CONNECTION_VERIFY_INTERVAL) || 30 * 1000; // in millisecs + +// Backdoor config to restart the connector if the stall issue pops up - disabled by default +const exitDelay = Number(process.env.CONNECTOR_EXIT_DELAY_IN_HOURS); // in hours +config.appExitDelay = (Number.isNaN(exitDelay) ? 0 : exitDelay) * (60 * 60 * 1000); module.exports = config; diff --git a/services/blockchain-connector/events/blockchain.js b/services/blockchain-connector/events/blockchain.js index 84a16c49f..7e9028441 100644 --- a/services/blockchain-connector/events/blockchain.js +++ b/services/blockchain-connector/events/blockchain.js @@ -23,54 +23,80 @@ const { chainValidatorsChangeController, chainNewBlockController, chainDeleteBlockController, + systemNodeInfoEventController, } = require('./controller/blockchain'); const sdkEvents = [ { name: 'appReady', - get description() { return `Event ${this.name}`; }, + get description() { + return `Event ${this.name}`; + }, controller: appReadyController, }, { name: 'appShutdown', - get description() { return `Event ${this.name}`; }, + get description() { + return `Event ${this.name}`; + }, controller: appShutdownController, }, { name: 'appNetworkReady', - get description() { return `Event ${this.name}`; }, + get description() { + return `Event ${this.name}`; + }, controller: appNetworkReadyController, }, { name: 'appNetworkEvent', - get description() { return `Event ${this.name}`; }, + get description() { + return `Event ${this.name}`; + }, controller: appNetworkEventController, }, { name: 'txpoolNewTransaction', - get description() { return `Event ${this.name}`; }, + get description() { + return `Event ${this.name}`; + }, controller: txpoolNewTransactionController, }, { name: 'chainForked', - get description() { return `Event ${this.name}`; }, + get description() { + return `Event ${this.name}`; + }, controller: chainForkedController, }, { name: 'chainValidatorsChange', - get description() { return `Event ${this.name}`; }, + get description() { + return `Event ${this.name}`; + }, controller: chainValidatorsChangeController, }, { name: 'chainNewBlock', - get description() { return `Event ${this.name}`; }, + get description() { + return `Event ${this.name}`; + }, controller: chainNewBlockController, }, { name: 'chainDeleteBlock', - get description() { return `Event ${this.name}`; }, + get description() { + return `Event ${this.name}`; + }, controller: chainDeleteBlockController, }, + { + name: 'systemNodeInfo', + get description() { + return `Event ${this.name}`; + }, + controller: systemNodeInfoEventController, + }, ]; module.exports = sdkEvents; diff --git a/services/blockchain-connector/events/controller/blockchain.js b/services/blockchain-connector/events/controller/blockchain.js index a1303940f..447f27ff6 100644 --- a/services/blockchain-connector/events/controller/blockchain.js +++ b/services/blockchain-connector/events/controller/blockchain.js @@ -13,53 +13,108 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { Signals } = require('lisk-service-framework'); +const { Logger, Signals } = require('lisk-service-framework'); +const { MODULE_NAME_POS } = require('../../shared/sdk/constants/names'); -const appReadyController = async (cb) => { - const appReadyListener = async (payload) => cb(payload); +const { getBlockByID } = require('../../shared/sdk/endpoints'); +const { formatBlock: formatBlockFromFormatter } = require('../../shared/sdk/formatter'); + +const EMPTY_TREE_ROOT_HASH = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'; +const logger = Logger(); + +const appReadyController = async cb => { + const appReadyListener = async payload => cb(payload); Signals.get('appReady').add(appReadyListener); }; -const appShutdownController = async (cb) => { - const appShutdownListener = async (payload) => cb(payload); +const appShutdownController = async cb => { + const appShutdownListener = async payload => cb(payload); Signals.get('appShutdown').add(appShutdownListener); }; -const appNetworkReadyController = async (cb) => { - const appNetworkReadyListener = async (payload) => cb(payload); +const appNetworkReadyController = async cb => { + const appNetworkReadyListener = async payload => cb(payload); Signals.get('appNetworkReady').add(appNetworkReadyListener); }; -const appNetworkEventController = async (cb) => { - const appNetworkEventListener = async (payload) => cb(payload); +const appNetworkEventController = async cb => { + const appNetworkEventListener = async payload => cb(payload); Signals.get('appNetworkEvent').add(appNetworkEventListener); }; -const txpoolNewTransactionController = async (cb) => { - const txpoolNewTransactionListener = async (payload) => cb(payload); +const txpoolNewTransactionController = async cb => { + const txpoolNewTransactionListener = async payload => cb(payload); Signals.get('txpoolNewTransaction').add(txpoolNewTransactionListener); }; -const chainForkedController = async (cb) => { - const chainForkedListener = async (payload) => cb(payload); +const chainForkedController = async cb => { + const chainForkedListener = async payload => cb(payload); Signals.get('chainForked').add(chainForkedListener); }; -const chainValidatorsChangeController = async (cb) => { - const chainValidatorsChangeListener = async (payload) => cb(payload); +const chainValidatorsChangeController = async cb => { + const chainValidatorsChangeListener = async payload => cb(payload); Signals.get('chainValidatorsChanged').add(chainValidatorsChangeListener); }; -const chainNewBlockController = async (cb) => { - const chainNewBlockListener = async (payload) => cb(payload); +const formatBlock = payload => + formatBlockFromFormatter({ + header: payload.blockHeader, + assets: payload.assets || [], + transactions: payload.transactions || [], + }); + +const chainNewBlockController = async cb => { + const chainNewBlockListener = async payload => { + const { blockHeader } = payload; + let transactions = []; + let assets = []; + + if ( + blockHeader.transactionRoot !== EMPTY_TREE_ROOT_HASH || + blockHeader.assetRoot !== EMPTY_TREE_ROOT_HASH + ) { + try { + const block = await getBlockByID(blockHeader.id); + transactions = block.transactions; + assets = block.assets; + } catch (err) { + logger.warn( + `Could not fetch block ${blockHeader.id} within chainNewBlockListener due to: ${err.message}`, + ); + logger.debug(err.stack); + } + } + + cb( + formatBlock({ + blockHeader, + assets, + transactions, + }), + ); + + // Reload validators cache on pos module transactions + if (transactions.some(t => t.module === MODULE_NAME_POS)) { + Signals.get('reloadAllPosValidators').dispatch(); + } + }; Signals.get('chainNewBlock').add(chainNewBlockListener); }; -const chainDeleteBlockController = async (cb) => { - const chainDeleteBlockListener = async (payload) => cb(payload); +const chainDeleteBlockController = async cb => { + const chainDeleteBlockListener = async payload => { + cb(formatBlock(payload)); + Signals.get('reloadAllPosValidators').dispatch(); + }; Signals.get('chainDeleteBlock').add(chainDeleteBlockListener); }; +const systemNodeInfoEventController = async cb => { + const systemNodeInfoEventListener = async payload => cb(payload); + Signals.get('systemNodeInfo').add(systemNodeInfoEventListener); +}; + module.exports = { appReadyController, appShutdownController, @@ -70,4 +125,5 @@ module.exports = { chainValidatorsChangeController, chainNewBlockController, chainDeleteBlockController, + systemNodeInfoEventController, }; diff --git a/services/blockchain-connector/events/proxy/allEvents.js b/services/blockchain-connector/events/proxy/allEvents.js index ff93bcf6a..f5534e3f4 100644 --- a/services/blockchain-connector/events/proxy/allEvents.js +++ b/services/blockchain-connector/events/proxy/allEvents.js @@ -20,13 +20,12 @@ const { subscribeToAllRegisteredEvents, events } = require('../../shared/sdk/eve const logger = Logger(); -const toCamelCase = (words) => { +const toCamelCase = words => { let result = ''; for (let i = 0; i < words.length; i++) { const word = words[i]; - const formattedWord = (i !== 0) - ? word.substr(0, 1).toUpperCase() + word.substr(1) - : word.toLowerCase(); + const formattedWord = + i !== 0 ? word.substr(0, 1).toUpperCase() + word.substr(1) : word.toLowerCase(); result = result.concat(formattedWord); } return result; @@ -40,10 +39,15 @@ const exportAllEvents = async () => { const registeredEvents = await getRegisteredEvents(); const allEvents = events.concat(registeredEvents); const allMethods = allEvents.map(event => { - const genericController = (regEvent) => (cb) => { - const eventListener = async (payload) => { + const genericController = regEvent => cb => { + const eventListener = async payload => { const signalName = toCamelCase(regEvent.split('_')); - logger.info(`Received ${regEvent} event, dispatching ${signalName} signal.`); + + const logMessage = regEvent.endsWith('Block') + ? `Received ${regEvent} event, dispatching ${signalName} signal (id: ${payload.blockHeader.id}, height: ${payload.blockHeader.height}).` + : `Received ${regEvent} event, dispatching ${signalName} signal.`; + + logger.info(logMessage); logger.debug(`Payload: ${JSON.stringify(payload)}`); Signals.get(signalName).dispatch(payload); diff --git a/services/blockchain-connector/jest.config.functional.js b/services/blockchain-connector/jest.config.functional.js index a0199cb76..f4a7de8af 100644 --- a/services/blockchain-connector/jest.config.functional.js +++ b/services/blockchain-connector/jest.config.functional.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/functional/**/*.test.js', - ], + testMatch: ['/tests/functional/**/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/blockchain-connector/jest.config.js b/services/blockchain-connector/jest.config.js index 7d1cd81cc..81e2db677 100644 --- a/services/blockchain-connector/jest.config.js +++ b/services/blockchain-connector/jest.config.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/unit/**/*.test.js', - ], + testMatch: ['/tests/unit/**/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/blockchain-connector/jobs/cacheCleanup.js b/services/blockchain-connector/jobs/cacheCleanup.js index 115694d92..40dfe1650 100644 --- a/services/blockchain-connector/jobs/cacheCleanup.js +++ b/services/blockchain-connector/jobs/cacheCleanup.js @@ -33,7 +33,7 @@ module.exports = [ logger.info('Cache has been successfully cleaned.'); } } catch (err) { - logger.warn(`Cleaning cache failed due to: ${err.message}.`); + logger.warn(`Cleaning cache failed due to: ${err.message}`); } }, }, diff --git a/services/blockchain-connector/methods/auth.js b/services/blockchain-connector/methods/auth.js index 81df58b6c..5398ebd13 100644 --- a/services/blockchain-connector/methods/auth.js +++ b/services/blockchain-connector/methods/auth.js @@ -13,10 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getAuthAccount, - getAuthMultiSigRegMsgSchema, -} = require('../shared/sdk'); +const { getAuthAccount, getAuthMultiSigRegMsgSchema } = require('../shared/sdk'); module.exports = [ { diff --git a/services/blockchain-connector/methods/blocks.js b/services/blockchain-connector/methods/blocks.js index 6c03149af..4285c46b1 100644 --- a/services/blockchain-connector/methods/blocks.js +++ b/services/blockchain-connector/methods/blocks.js @@ -87,7 +87,7 @@ module.exports = [ }, { name: 'getGenesisAssetByModule', - controller: async (params) => getGenesisAssetByModule(params), + controller: async params => getGenesisAssetByModule(params), params: { module: { type: 'string' }, subStore: { type: 'string', optional: true }, @@ -97,7 +97,7 @@ module.exports = [ }, { name: 'getGenesisAssetsLength', - controller: async (params) => getGenesisAssetsLength(params), + controller: async params => getGenesisAssetsLength(params), params: { module: { type: 'string', optional: true }, subStore: { type: 'string', optional: true }, diff --git a/services/blockchain-connector/methods/dynamicReward.js b/services/blockchain-connector/methods/dynamicReward.js index 2d7ba370f..d77cfe12b 100644 --- a/services/blockchain-connector/methods/dynamicReward.js +++ b/services/blockchain-connector/methods/dynamicReward.js @@ -13,11 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getRewardTokenID, - getAnnualInflation, - getDefaultRewardAtHeight, -} = require('../shared/sdk'); +const { getRewardTokenID, getAnnualInflation, getDefaultRewardAtHeight } = require('../shared/sdk'); module.exports = [ { diff --git a/services/blockchain-connector/methods/fee.js b/services/blockchain-connector/methods/fee.js index b30fa7e3f..073cc5ba3 100644 --- a/services/blockchain-connector/methods/fee.js +++ b/services/blockchain-connector/methods/fee.js @@ -13,10 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getFeeTokenID, - getMinFeePerByte, -} = require('../shared/sdk'); +const { getFeeTokenID, getMinFeePerByte } = require('../shared/sdk'); module.exports = [ { diff --git a/services/blockchain-connector/methods/generators.js b/services/blockchain-connector/methods/generators.js index 2d6dd23a3..2fe7d8872 100644 --- a/services/blockchain-connector/methods/generators.js +++ b/services/blockchain-connector/methods/generators.js @@ -13,11 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getGenerators, - getGeneratorStatus, - updateGeneratorStatus, -} = require('../shared/sdk'); +const { getGenerators, getGeneratorStatus, updateGeneratorStatus } = require('../shared/sdk'); module.exports = [ { @@ -32,7 +28,7 @@ module.exports = [ }, { name: 'updateGeneratorStatus', - controller: async (params) => updateGeneratorStatus(params), + controller: async params => updateGeneratorStatus(params), params: { address: { optional: false, type: 'string' }, password: { optional: false, type: 'string' }, diff --git a/services/blockchain-connector/methods/legacy.js b/services/blockchain-connector/methods/legacy.js index 6e12f205c..848c4b1be 100644 --- a/services/blockchain-connector/methods/legacy.js +++ b/services/blockchain-connector/methods/legacy.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getLegacyAccount, -} = require('../shared/sdk'); +const { getLegacyAccount } = require('../shared/sdk'); module.exports = [ { diff --git a/services/blockchain-connector/methods/proxy/allEndpoints.js b/services/blockchain-connector/methods/proxy/allEndpoints.js index d14b42837..f0200ffca 100644 --- a/services/blockchain-connector/methods/proxy/allEndpoints.js +++ b/services/blockchain-connector/methods/proxy/allEndpoints.js @@ -18,8 +18,8 @@ const endpoints = require('../../shared/sdk/endpoints'); const exportAllEndpoints = async () => { const registeredEndpoints = await endpoints.getRegisteredEndpoints(); const allMethods = registeredEndpoints.map(endpoint => { - const genericController = (regEndpoint) => (params) => endpoints - .invokeEndpointProxy(regEndpoint, params); + const genericController = regEndpoint => params => + endpoints.invokeEndpointProxy(regEndpoint, params); const controller = genericController(endpoint); return { name: endpoint, diff --git a/services/blockchain-connector/methods/tests/encoder.js b/services/blockchain-connector/methods/tests/encoder.js index 187fb4fea..ae1acd249 100644 --- a/services/blockchain-connector/methods/tests/encoder.js +++ b/services/blockchain-connector/methods/tests/encoder.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - encodeTransaction, -} = require('../../shared/sdk/encoder'); +const { encodeTransaction } = require('../../shared/sdk/encoder'); module.exports = [ { diff --git a/services/blockchain-connector/methods/tests/formatter.js b/services/blockchain-connector/methods/tests/formatter.js index 2d336c35d..400f12ed7 100644 --- a/services/blockchain-connector/methods/tests/formatter.js +++ b/services/blockchain-connector/methods/tests/formatter.js @@ -28,9 +28,7 @@ module.exports = [ params: { block: { optional: false, type: 'object' }, }, - controller: ({ block }) => parseToJSONCompatObj( - formatBlock(block), - ), + controller: ({ block }) => parseToJSONCompatObj(formatBlock(block)), }, { name: 'formatAPIClientEventPayload', diff --git a/services/blockchain-connector/methods/token.js b/services/blockchain-connector/methods/token.js index 0d07d05da..ca5991337 100644 --- a/services/blockchain-connector/methods/token.js +++ b/services/blockchain-connector/methods/token.js @@ -57,10 +57,11 @@ module.exports = [ }, { name: 'tokenHasUserAccount', - controller: async ({ address, tokenID }) => tokenHasUserAccount({ - address, - tokenID, - }), + controller: async ({ address, tokenID }) => + tokenHasUserAccount({ + address, + tokenID, + }), params: { address: { optional: false, type: 'string' }, tokenID: { optional: false, type: 'string' }, @@ -68,10 +69,11 @@ module.exports = [ }, { name: 'tokenHasEscrowAccount', - controller: async ({ tokenID, escrowChainID }) => tokenHasEscrowAccount({ - tokenID, - escrowChainID, - }), + controller: async ({ tokenID, escrowChainID }) => + tokenHasEscrowAccount({ + tokenID, + escrowChainID, + }), params: { tokenID: { optional: false, type: 'string' }, escrowChainID: { optional: false, type: 'string' }, diff --git a/services/blockchain-connector/methods/transactions.js b/services/blockchain-connector/methods/transactions.js index 21b720984..9b11ee38d 100644 --- a/services/blockchain-connector/methods/transactions.js +++ b/services/blockchain-connector/methods/transactions.js @@ -50,12 +50,8 @@ module.exports = [ }, { name: 'dryRunTransaction', - controller: async ({ - transaction, - skipVerify, - skipDecode, - strict, - }) => dryRunTransaction({ transaction, skipVerify, skipDecode, strict }), + controller: async ({ transaction, skipVerify, skipDecode, strict }) => + dryRunTransaction({ transaction, skipVerify, skipDecode, strict }), params: { transaction: { optional: false, type: 'any' }, skipVerify: { optional: true, type: 'boolean', default: false }, diff --git a/services/blockchain-connector/methods/validators.js b/services/blockchain-connector/methods/validators.js index c43b1fd08..1468761b0 100644 --- a/services/blockchain-connector/methods/validators.js +++ b/services/blockchain-connector/methods/validators.js @@ -19,10 +19,11 @@ const regex = require('../shared/utils/regex'); module.exports = [ { name: 'validateBLSKey', - controller: async ({ blsKey, proofOfPossession }) => validateBLSKey({ - blsKey, - proofOfPossession, - }), + controller: async ({ blsKey, proofOfPossession }) => + validateBLSKey({ + blsKey, + proofOfPossession, + }), params: { blsKey: { optional: false, type: 'string', pattern: regex.BLS_KEY }, proofOfPossession: { optional: false, type: 'string', pattern: regex.PROOF_OF_POSSESSION }, diff --git a/services/blockchain-connector/package.json b/services/blockchain-connector/package.json index 197879bd7..7683fd3a5 100644 --- a/services/blockchain-connector/package.json +++ b/services/blockchain-connector/package.json @@ -1,6 +1,6 @@ { "name": "lisk-service-blockchain-connector", - "version": "0.7.0-rc.1", + "version": "0.7.2", "description": "Lisk Service Blockchain Connector", "keywords": [ "lisk", @@ -30,16 +30,17 @@ "test:functional": "jest --config=jest.config.functional.js --detectOpenHandles --forceExit" }, "dependencies": { - "@liskhq/lisk-api-client": "6.0.0-rc.1", - "@liskhq/lisk-codec": "0.4.0-rc.1", - "@liskhq/lisk-cryptography": "4.0.0-rc.1", - "@liskhq/lisk-transactions": "6.0.0-rc.1", - "@liskhq/lisk-validator": "0.8.0-rc.1", + "@liskhq/lisk-api-client": "6.0.1", + "@liskhq/lisk-codec": "0.4.0", + "@liskhq/lisk-cryptography": "4.0.0", + "@liskhq/lisk-transactions": "6.0.0", + "@liskhq/lisk-validator": "0.8.0", "better-sqlite3": "^7.6.2", "big-json": "^3.1.0", "bluebird": "^3.7.2", + "ioredis": "^5.3.2", "knex": "^2.4.0", - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz", "moment": "^2.29.4", "signals": "^1.0.0", "tar": "^6.1.11" @@ -47,7 +48,7 @@ "devDependencies": { "@babel/preset-env": "^7.14.0", "babel-jest": "^27.3.0", - "jest": "^27.3.0", + "jest": "^29.7.0", "jest-when": "^3.5.1", "moleculer": "^0.14.21", "node-gyp": "^9.4.0" diff --git a/services/blockchain-connector/shared/geolocation.js b/services/blockchain-connector/shared/geolocation.js index 086f67cb3..ca5b29e6b 100644 --- a/services/blockchain-connector/shared/geolocation.js +++ b/services/blockchain-connector/shared/geolocation.js @@ -32,47 +32,45 @@ const freegeoAddress = config.endpoints.geoip; const cacheRedis = CacheRedis('geodata', config.endpoints.redis); const refreshSchedule = []; -const getRandInt = max => { - const randomBytes = crypto.randomBytes(4); // 4 bytes for a 32-bit integer - const maxMultiple = 0x100000000 - (0x100000000 % max); - let randomValue; - do { - randomValue = randomBytes.readUInt32BE(0); - } while (randomValue >= maxMultiple); - - return randomValue % max; -}; +const getRandInt = max => crypto.randomInt(max); const httpTest = new RegExp('http:*'); -const getFromHttp = ip => new Promise((resolve, reject) => { - if (httpTest.test(freegeoAddress)) { - requestLib(`${freegeoAddress}/${ip}`) - .then(body => { - let jsonContent; - if (typeof body === 'string') jsonContent = JSON.parse(body); - else jsonContent = body; - return resolve(jsonContent); - }) - .catch(err => { - reject(err); - }); - } -}); +const getFromHttp = ip => + new Promise((resolve, reject) => { + if (httpTest.test(freegeoAddress)) { + requestLib(`${freegeoAddress}/${ip}`) + .then(body => { + let jsonContent; + if (typeof body === 'string') jsonContent = JSON.parse(body); + else jsonContent = body; + return resolve(jsonContent); + }) + .catch(err => { + reject(err); + }); + } + }); const requestData = async requestedIp => { const key = `geoip:${requestedIp}`; - const refreshData = ip => getFromHttp(ip).then(data => { - if (data) cacheRedis.set(key, data.data, GEOIP_TTL); - logger.debug(`Fetched geolocation data from online service for IP ${ip}`); - refreshSchedule.push(setTimeout( - () => refreshData(ip), - GEOIP_TTL - (getRandInt(SCHEDULE_INTERVAL) + REQUEST_LATENCY))); - }).catch(err => { - logger.warn(`Could not retrieve geolocation data: ${err.message}`); - }); + const refreshData = ip => + getFromHttp(ip) + .then(data => { + if (data) cacheRedis.set(key, data.data, GEOIP_TTL); + logger.debug(`Fetched geolocation data from online service for IP ${ip}.`); + refreshSchedule.push( + setTimeout( + () => refreshData(ip), + GEOIP_TTL - (getRandInt(SCHEDULE_INTERVAL) + REQUEST_LATENCY), + ), + ); + }) + .catch(err => { + logger.warn(`Could not retrieve geolocation data: ${err.message}`); + }); const geodata = await cacheRedis.get(key); if (!geodata) { @@ -81,11 +79,14 @@ const requestData = async requestedIp => { return geodata; }; -const autoCleanUp = () => setInterval(() => { - const tooMuch = refreshSchedule.splice(0, refreshSchedule.length - SCHEDULE_MAX_LENGTH); - tooMuch.forEach(item => clearInterval(item)); - logger.debug(`Cache queue: Removed ${tooMuch.length} items, ${refreshSchedule.length} last elements left`); -}, SCHEDULE_CLEANUP_INTERVAL); +const autoCleanUp = () => + setInterval(() => { + const tooMuch = refreshSchedule.splice(0, refreshSchedule.length - SCHEDULE_MAX_LENGTH); + tooMuch.forEach(item => clearInterval(item)); + logger.debug( + `Cache queue: Removed ${tooMuch.length} items, ${refreshSchedule.length} last elements left.`, + ); + }, SCHEDULE_CLEANUP_INTERVAL); autoCleanUp(); diff --git a/services/blockchain-connector/shared/nodeStatus.js b/services/blockchain-connector/shared/nodeStatus.js index 7b94c6b9d..1ddbc9991 100644 --- a/services/blockchain-connector/shared/nodeStatus.js +++ b/services/blockchain-connector/shared/nodeStatus.js @@ -13,29 +13,69 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { Logger } = require('lisk-service-framework'); +const { + Logger, + Signals, + Utils: { waitForIt }, +} = require('lisk-service-framework'); const { getNodeInfo } = require('./sdk/endpoints'); const config = require('../config'); -const waitForIt = require('./utils/waitForIt'); const logger = Logger(); const liskAppAddress = config.endpoints.liskWs; const NODE_DISCOVERY_INTERVAL = 1 * 1000; // ms +const NODE_SYNC_CHECK_INTERVAL = 15 * 1000; // in ms -const checkStatus = () => new Promise((resolve, reject) => { - getNodeInfo() - .then(nodeInfo => { resolve(nodeInfo); }) - .catch(() => { - logger.debug(`The node ${liskAppAddress} not available at the moment.`); - reject(); - }); -}); +let intervalID; + +const checkStatus = () => + new Promise((resolve, reject) => + getNodeInfo() + .then(nodeInfo => { + resolve(nodeInfo); + }) + .catch(() => { + logger.debug(`The node ${liskAppAddress} not available at the moment.`); + reject(); + }), + ); const waitForNode = () => waitForIt(checkStatus, NODE_DISCOVERY_INTERVAL); +const waitForNodeToFinishSync = resolve => + new Promise(res => { + if (!resolve) resolve = res; + if (intervalID) { + clearInterval(intervalID); + intervalID = null; + } + + return getNodeInfo(true).then(nodeInfo => { + const { syncing } = nodeInfo; + const isNodeSyncComplete = !syncing; + + return isNodeSyncComplete + ? (() => { + logger.info('Node is fully synchronized with the network.'); + Signals.get('nodeIsSynced').dispatch(); + return resolve(isNodeSyncComplete); + })() + : (() => { + logger.info( + 'Node synchronization in progress. Will wait for node to sync with the network before scheduling indexing.', + ); + intervalID = setInterval( + waitForNodeToFinishSync.bind(null, resolve), + NODE_SYNC_CHECK_INTERVAL, + ); + })(); + }); + }); + module.exports = { waitForNode, + waitForNodeToFinishSync, }; diff --git a/services/blockchain-connector/shared/sdk/auth.js b/services/blockchain-connector/shared/sdk/auth.js index 00acea331..60e9b658a 100644 --- a/services/blockchain-connector/shared/sdk/auth.js +++ b/services/blockchain-connector/shared/sdk/auth.js @@ -22,13 +22,13 @@ const { timeoutMessage, invokeEndpoint } = require('./client'); const logger = Logger(); -const getAuthAccount = async (address) => { +const getAuthAccount = async address => { try { const authAccountInfo = await invokeEndpoint('auth_getAuthAccount', { address }); return authAccountInfo; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getAuthAccount\'.'); + throw new TimeoutException("Request timed out when calling 'getAuthAccount'."); } throw err; } @@ -40,7 +40,7 @@ const getAuthMultiSigRegMsgSchema = async () => { return multiSigRegMsgSchema; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getMultiSigRegMsgSchema\'.'); + throw new TimeoutException("Request timed out when calling 'getMultiSigRegMsgSchema'."); } logger.warn(`Error returned when invoking 'auth_getMultiSigRegMsgSchema'.\n${err.stack}`); throw err; diff --git a/services/blockchain-connector/shared/sdk/blocks.js b/services/blockchain-connector/shared/sdk/blocks.js index 17ad85e56..bfb1e8710 100644 --- a/services/blockchain-connector/shared/sdk/blocks.js +++ b/services/blockchain-connector/shared/sdk/blocks.js @@ -40,13 +40,13 @@ const getBlocksByHeightBetweenFormatted = async ({ from, to }) => { return formattedBlocks; }; -const getBlockByIDFormatted = async (id) => { +const getBlockByIDFormatted = async id => { const block = await getBlockByID(id); const formattedBlock = formatBlock(block); return formattedBlock; }; -const getBlocksByIDsFormatted = async (ids) => { +const getBlocksByIDsFormatted = async ids => { const blocks = await getBlocksByIDs(ids); const formattedBlocks = blocks.map(b => formatBlock(b)); return formattedBlocks; diff --git a/services/blockchain-connector/shared/sdk/blocksUtils.js b/services/blockchain-connector/shared/sdk/blocksUtils.js index c9e035788..b7ce076da 100644 --- a/services/blockchain-connector/shared/sdk/blocksUtils.js +++ b/services/blockchain-connector/shared/sdk/blocksUtils.js @@ -40,7 +40,7 @@ let isGenesisBlockURLNotFound = false; const parseStream = json.createParseStream(); -const setGenesisBlock = (block) => genesisBlock = block; +const setGenesisBlock = block => (genesisBlock = block); const getGenesisBlock = () => genesisBlock; @@ -52,23 +52,25 @@ const loadConfig = async () => { if (config.genesisBlockUrl !== config.constants.GENESIS_BLOCK_URL_DEFAULT) { genesisBlockUrl = config.genesisBlockUrl; - logger.info(`genesisBlockUrl set to ${genesisBlockUrl}`); + logger.info(`genesisBlockUrl set to ${genesisBlockUrl}.`); genesisBlockFilePath = `./data/${chainID}/genesis_block.json`; - logger.info(`genesisBlockFilePath set to ${genesisBlockFilePath}`); + logger.info(`genesisBlockFilePath set to ${genesisBlockFilePath}.`); } else { // Check if current node is running Lisk Core const [networkConfig] = config.networks.LISK.filter(c => chainID === c.chainID); if (networkConfig) { - logger.info(`Found config for ${networkConfig.name} (${chainID})`); + logger.info(`Found config for ${networkConfig.name} (${chainID}).`); genesisBlockUrl = networkConfig.genesisBlockUrl; - logger.info(`genesisBlockUrl set to ${genesisBlockUrl}`); + logger.info(`genesisBlockUrl set to ${genesisBlockUrl}.`); genesisBlockFilePath = `./data/${chainID}/genesis_block.json`; - logger.info(`genesisBlockFilePath set to ${genesisBlockFilePath}`); + logger.info(`genesisBlockFilePath set to ${genesisBlockFilePath}.`); } else { - logger.info(`Network is neither defined in the config, nor in the environment variable (${chainID})`); + logger.info( + `Network is neither defined in the config, nor in the environment variable (${chainID}).`, + ); return; } } @@ -89,7 +91,6 @@ const downloadAndValidateGenesisBlock = async (retries = 2) => { const checksumFilePath = `${genesisFilePath}.SHA256`; do { - /* eslint-disable no-await-in-loop */ try { if (!(await exists(directoryPath))) await mkdir(directoryPath, { recursive: true }); @@ -103,7 +104,8 @@ const downloadAndValidateGenesisBlock = async (retries = 2) => { if (isValidGenesisBlock) { // Extract if downloaded file is a tar archive - if (genesisFilePath.endsWith('.tar.gz')) await extractTarBall(genesisFilePath, directoryPath); + if (genesisFilePath.endsWith('.tar.gz')) + await extractTarBall(genesisFilePath, directoryPath); return true; } @@ -118,10 +120,11 @@ const downloadAndValidateGenesisBlock = async (retries = 2) => { throw err; } } - /* eslint-enable no-await-in-loop */ } while (retries-- > 0); - logger.fatal(`Unable to verify the integrity of the downloaded genesis block from ${genesisBlockUrl}.`); + logger.fatal( + `Unable to verify the integrity of the downloaded genesis block from ${genesisBlockUrl}.`, + ); logger.fatal('Exiting the application.'); process.exit(1); }; @@ -137,8 +140,8 @@ const getGenesisBlockFromFS = async () => { } const block = await new Promise((resolve, reject) => { - readStream.pipe(parseStream.on('data', (data) => resolve(data))); - parseStream.on('error', (err) => reject(err)); + readStream.pipe(parseStream.on('data', data => resolve(data))); + parseStream.on('error', err => reject(err)); }); const formattedBlock = await formatBlock(block); diff --git a/services/blockchain-connector/shared/sdk/cache.js b/services/blockchain-connector/shared/sdk/cache.js index 9034038ba..121de97e2 100644 --- a/services/blockchain-connector/shared/sdk/cache.js +++ b/services/blockchain-connector/shared/sdk/cache.js @@ -16,12 +16,12 @@ const moment = require('moment'); const BluebirdPromise = require('bluebird'); -const { Logger, +const { + Logger, DB: { - sqlite3: { - getTableInstance, - }, + sqlite3: { getTableInstance }, }, + Utils: { delay }, } = require('lisk-service-framework'); const logger = Logger(); @@ -37,7 +37,7 @@ const getTrxIDtoBlockIDCache = () => getTableInstance(cacheTrxIDToBlockIDSchema) const blockCacheWaitlist = []; -const cacheBlocksIfEnabled = async (blocks) => { +const cacheBlocksIfEnabled = async blocks => { if (!config.cache.isBlockCachingEnabled || typeof blocks !== 'object') return; try { @@ -59,24 +59,38 @@ const cacheBlocksFromWaitlist = async () => { const blocksCache = await getBlocksCache(); const trxIDToBlockIDCache = await getTrxIDtoBlockIDCache(); - /* eslint-disable no-await-in-loop */ + let numErrors = 0; while (blockCacheWaitlist.length) { const block = blockCacheWaitlist.shift(); - await BluebirdPromise.map( - block.transactions, - async transaction => trxIDToBlockIDCache.upsert({ - transactionID: transaction.id, blockID: block.header.id, - }), - { concurrency: 1 }, - ); - await blocksCache.upsert({ id: block.header.id, timestamp: block.header.timestamp, block }); + try { + await BluebirdPromise.map( + block.transactions, + async transaction => + trxIDToBlockIDCache.upsert({ + transactionID: transaction.id, + blockID: block.header.id, + }), + { concurrency: 1 }, + ); + await blocksCache.upsert({ id: block.header.id, timestamp: block.header.timestamp, block }); + } catch (err) { + logger.warn( + `Caching block ${block.header.id} (height: ${block.header.height}) failed. Will re-attempt.\nError: ${err.message}`, + ); + logger.debug(err.stack); + blockCacheWaitlist.splice(0, 0, block); + + // Skip caching if it causes errors 3 times in a row + if (numErrors++ > 3) break; + + await delay(5 * 1000); // Delay loop to facilitate reads from cache when writes are failing due to DB locks + } } - /* eslint-enable no-await-in-loop */ setTimeout(cacheBlocksFromWaitlist, 15 * 1000); }; -const getBlockByIDFromCache = async (id) => { +const getBlockByIDFromCache = async id => { const blocksCache = await getBlocksCache(); const resultSet = await blocksCache.find({ id, limit: 1 }, ['block']); if (!resultSet.length) return null; @@ -86,7 +100,7 @@ const getBlockByIDFromCache = async (id) => { return parsedBlock; }; -const getTransactionByIDFromCache = async (transactionID) => { +const getTransactionByIDFromCache = async transactionID => { const trxIDToBlockIDCache = await getTrxIDtoBlockIDCache(); const resultSet = await trxIDToBlockIDCache.find({ transactionID, limit: 1 }, ['blockID']); if (!resultSet.length) return null; @@ -99,14 +113,16 @@ const getTransactionByIDFromCache = async (transactionID) => { return transaction; }; -const cacheCleanup = async (expiryInHours) => { +const cacheCleanup = async expiryInHours => { const blocksCache = await getBlocksCache(); const trxIDToBlockIDCache = await getTrxIDtoBlockIDCache(); - const propBetweens = [{ - property: 'timestamp', - to: moment().subtract(expiryInHours, 'hours').unix(), - }]; + const propBetweens = [ + { + property: 'timestamp', + to: moment().subtract(expiryInHours, 'hours').unix(), + }, + ]; const resultSet = await blocksCache.find({ propBetweens }, 'id'); const blockIDs = resultSet.map(e => e.id); @@ -127,7 +143,6 @@ if (config.cache.isBlockCachingEnabled) cacheBlocksFromWaitlist(); module.exports = { cacheBlocksIfEnabled, - cacheBlocksFromWaitlist, getBlockByIDFromCache, getTransactionByIDFromCache, cacheCleanup, diff --git a/services/blockchain-connector/shared/sdk/client.js b/services/blockchain-connector/shared/sdk/client.js index 0863d4358..305971113 100644 --- a/services/blockchain-connector/shared/sdk/client.js +++ b/services/blockchain-connector/shared/sdk/client.js @@ -13,101 +13,217 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { Logger, Signals } = require('lisk-service-framework'); const { - createWSClient, - createIPCClient, -} = require('@liskhq/lisk-api-client'); + Logger, + Signals, + Utils: { waitForIt }, +} = require('lisk-service-framework'); +const { createWSClient, createIPCClient } = require('@liskhq/lisk-api-client'); const config = require('../../config'); const delay = require('../utils/delay'); -const waitForIt = require('../utils/waitForIt'); const logger = Logger(); // Constants const timeoutMessage = 'Response not received in'; const liskAddress = config.endpoints.liskWs; -const NUM_REQUEST_RETRIES = 5; -const RETRY_INTERVAL = 500; // ms -const MAX_INSTANTIATION_WAIT_TIME = 100; // in ms +const RETRY_INTERVAL = config.apiClient.instantiation.retryInterval; +const MAX_INSTANTIATION_WAIT_TIME = config.apiClient.instantiation.maxWaitTime; +const NUM_REQUEST_RETRIES = config.apiClient.request.maxRetries; +const ENDPOINT_INVOKE_RETRY_DELAY = config.apiClient.request.retryDelay; +const CLIENT_ALIVE_ASSUMPTION_TIME = config.apiClient.aliveAssumptionTime; +const CLIENT_ALIVE_ASSUMPTION_TIME_BEFORE_GENESIS = + config.apiClient.aliveAssumptionTimeBeforeGenesis; +const HEARTBEAT_ACK_MAX_WAIT_TIME = config.apiClient.heartbeatAckMaxWaitTime; +const WS_CONNECTION_LIMIT = config.apiClient.wsConnectionLimit; // Caching and flags let clientCache; let instantiationBeginTime; +let lastClientAliveTime; +let heartbeatCheckBeginTime; let isInstantiating = false; +let isClientAlive = false; +let isGenesisBlockIndexed = false; +let wsConnectionsEstablished = 0; + +const pongListener = res => { + isClientAlive = true; + lastClientAliveTime = Date.now(); + return res(true); +}; + +const checkIsClientAlive = async () => + // eslint-disable-next-line consistent-return + new Promise(resolve => { + if (!clientCache || (clientCache._channel && !clientCache._channel.isAlive)) { + return resolve(false); + } + + if ( + config.isUseLiskIPCClient || + Date.now() - lastClientAliveTime < CLIENT_ALIVE_ASSUMPTION_TIME || + // The below condition ensures that no other pings are sent when there's already a ping sent + // after the CLIENT_ALIVE_ASSUMPTION_TIME is exceeded + Date.now() - heartbeatCheckBeginTime < HEARTBEAT_ACK_MAX_WAIT_TIME * 2 + ) { + return resolve(clientCache._channel && clientCache._channel.isAlive); + } -const checkIsClientAlive = () => clientCache && clientCache._channel.isAlive; + heartbeatCheckBeginTime = Date.now(); + const boundPongListener = () => pongListener(resolve); + + const wsInstance = clientCache._channel._ws; + wsInstance.on('pong', boundPongListener); + isClientAlive = false; + wsInstance.ping(() => {}); + + // eslint-disable-next-line consistent-return + const timeout = setTimeout(() => { + clearTimeout(timeout); + wsInstance.removeListener('pong', boundPongListener); + if (!isClientAlive) return resolve(false); + }, HEARTBEAT_ACK_MAX_WAIT_TIME); + }).catch(() => false); // eslint-disable-next-line consistent-return -const instantiateClient = async (isForceUpdate = false) => { +const instantiateClient = async (isForceReInstantiate = false) => { try { - if (!isInstantiating || isForceUpdate) { - if (!checkIsClientAlive() || isForceUpdate) { - isInstantiating = true; + if (!isInstantiating || isForceReInstantiate) { + const isNodeClientAlive = await checkIsClientAlive(); + + if (!config.isUseLiskIPCClient) { + if (isNodeClientAlive) { + wsConnectionsEstablished = 0; + } else { + let numRetries = NUM_REQUEST_RETRIES; + while (wsConnectionsEstablished >= WS_CONNECTION_LIMIT && numRetries--) { + await delay(MAX_INSTANTIATION_WAIT_TIME); + if (await checkIsClientAlive()) { + wsConnectionsEstablished = 0; + return clientCache; + } + } + } + } + + isInstantiating = true; + if (!isNodeClientAlive || isForceReInstantiate) { + if (!config.isUseLiskIPCClient) wsConnectionsEstablished++; + instantiationBeginTime = Date.now(); - if (clientCache) await clientCache.disconnect(); + + if (clientCache) { + clientCache.disconnect().catch(err => { + // Ensure failed disconnection doesn't impact the re-instantiation + logger.warn(`Client disconnection failed due to: ${err.message}`); + }); + } clientCache = config.isUseLiskIPCClient ? await createIPCClient(config.liskAppDataPath) : await createWSClient(`${liskAddress}/rpc-ws`); - if (isForceUpdate) logger.info('Re-instantiated the API client forcefully.'); + lastClientAliveTime = Date.now(); + + if (isForceReInstantiate) logger.info('Re-instantiated the API client forcefully.'); // Inform listeners about the newly instantiated ApiClient Signals.get('newApiClient').dispatch(); - - isInstantiating = false; } + + isInstantiating = false; return clientCache; } - if ((Date.now() - instantiationBeginTime) > MAX_INSTANTIATION_WAIT_TIME) { + if (Date.now() - instantiationBeginTime > MAX_INSTANTIATION_WAIT_TIME) { // Waited too long, reset the flag to re-attempt client instantiation + logger.debug( + `MAX_INSTANTIATION_WAIT_TIME of ${MAX_INSTANTIATION_WAIT_TIME}ms has expired. Resetting isInstantiating to false.`, + ); isInstantiating = false; } } catch (err) { - // Nullify the apiClient cache, so that it can be re-instantiated properly + // Nullify the apiClient cache and unset isInstantiating, so that it can be re-instantiated properly clientCache = null; + isInstantiating = false; - logger.error(`Error instantiating WS client to ${liskAddress}.`); + const errMessage = config.isUseLiskIPCClient + ? `Error instantiating IPC client at ${config.liskAppDataPath}.` + : `Error instantiating WS client to ${liskAddress}.`; + + logger.error(errMessage); logger.error(err.message); - if (err.code === 'ECONNREFUSED') throw new Error('ECONNREFUSED: Unable to reach a network node.'); + if (err.message.includes('ECONNREFUSED')) { + throw new Error('ECONNREFUSED: Unable to reach a network node.'); + } - return { - data: { error: 'Action not supported' }, - status: 'METHOD_NOT_ALLOWED', - }; + return null; } }; const getApiClient = async () => { const apiClient = await waitForIt(instantiateClient, RETRY_INTERVAL); - return checkIsClientAlive() ? apiClient : getApiClient(); + return (await checkIsClientAlive()) ? apiClient : getApiClient(); }; // eslint-disable-next-line consistent-return const invokeEndpoint = async (endpoint, params = {}, numRetries = NUM_REQUEST_RETRIES) => { - const apiClient = await getApiClient(); let retries = numRetries; do { - /* eslint-disable no-await-in-loop */ try { + const apiClient = await getApiClient(); const response = await apiClient._channel.invoke(endpoint, params); return response; } catch (err) { if (retries && err.message.includes(timeoutMessage)) { - await delay(10); + await delay(ENDPOINT_INVOKE_RETRY_DELAY); } else { throw err; } } - /* eslint-enable no-await-in-loop */ } while (retries--); }; -const resetApiClientListener = () => instantiateClient(true); -Signals.get('resetApiClient').add(resetApiClientListener); +// Checks to ensure that the API Client is always alive +if (config.isUseLiskIPCClient) { + const resetApiClientListener = async () => instantiateClient(true).catch(() => {}); + Signals.get('resetApiClient').add(resetApiClientListener); +} else { + let intervalTimeout; + const triggerRegularClientLivelinessChecks = intervalMs => { + intervalTimeout = setInterval(async () => { + const isAlive = await checkIsClientAlive(); + if (!isAlive) instantiateClient(true).catch(() => {}); + }, intervalMs); + }; + + const genesisBlockDownloadedListener = () => { + triggerRegularClientLivelinessChecks(CLIENT_ALIVE_ASSUMPTION_TIME_BEFORE_GENESIS); + logger.info( + `API client heartbeat checks scheduled every ${CLIENT_ALIVE_ASSUMPTION_TIME_BEFORE_GENESIS}ms. The frequency will be set to ${CLIENT_ALIVE_ASSUMPTION_TIME}ms after successful indexing of the genesis block.`, + ); + }; + + const genesisBlockIndexedListener = indexStatus => { + if ( + !isGenesisBlockIndexed && + indexStatus.data && + indexStatus.data.genesisHeight <= indexStatus.data.lastIndexedBlockHeight + ) { + clearInterval(intervalTimeout); + triggerRegularClientLivelinessChecks(CLIENT_ALIVE_ASSUMPTION_TIME); + isGenesisBlockIndexed = true; + logger.info( + `API client heartbeat checks re-scheduled to run every ${CLIENT_ALIVE_ASSUMPTION_TIME}ms.`, + ); + } + }; + + Signals.get('genesisBlockDownloaded').add(genesisBlockDownloadedListener); + Signals.get('updateIndexStatus').add(genesisBlockIndexedListener); +} module.exports = { timeoutMessage, diff --git a/services/blockchain-connector/shared/sdk/constants/endpoints.js b/services/blockchain-connector/shared/sdk/constants/endpoints.js index 9a5d3d1bd..75c28db41 100644 --- a/services/blockchain-connector/shared/sdk/constants/endpoints.js +++ b/services/blockchain-connector/shared/sdk/constants/endpoints.js @@ -98,6 +98,38 @@ const plainKeysObjectSchema = { }; const engineEndpoints = [ + { + name: 'legacy_getTransactionByID', + request: { + $id: '/lisk/legacy/getTransactionByIDRequest', + type: 'object', + required: ['id'], + properties: { + id: { + type: 'string', + format: 'hex', + minLength: 64, + maxLength: 64, + }, + }, + }, + }, + { + name: 'legacy_getTransactionsByBlockID', + request: { + $id: '/lisk/legacy/getTransactionsByBlockIDRequest', + type: 'object', + required: ['id'], + properties: { + id: { + type: 'string', + format: 'hex', + minLength: 64, + maxLength: 64, + }, + }, + }, + }, { name: 'legacy_getBlockByID', request: { @@ -108,8 +140,8 @@ const engineEndpoints = [ id: { type: 'string', format: 'hex', - minLength: 32, - maxLength: 32, + minLength: 64, + maxLength: 64, }, }, }, @@ -128,6 +160,10 @@ const engineEndpoints = [ }, }, }, + { + name: 'legacy_getLegacyBrackets', + request: null, + }, { name: 'chain_getBlockByID', request: { @@ -138,8 +174,8 @@ const engineEndpoints = [ id: { type: 'string', format: 'hex', - minLength: 32, - maxLength: 32, + minLength: 64, + maxLength: 64, }, }, }, @@ -156,8 +192,8 @@ const engineEndpoints = [ items: { type: 'string', format: 'hex', - minLength: 32, - maxLength: 32, + minLength: 64, + maxLength: 64, }, }, }, @@ -205,8 +241,8 @@ const engineEndpoints = [ id: { type: 'string', format: 'hex', - minLength: 32, - maxLength: 32, + minLength: 64, + maxLength: 64, }, }, }, @@ -223,8 +259,8 @@ const engineEndpoints = [ items: { type: 'string', format: 'hex', - minLength: 32, - maxLength: 32, + minLength: 64, + maxLength: 64, }, }, }, @@ -327,6 +363,20 @@ const engineEndpoints = [ }, }, }, + { + name: 'consensus_getBFTParametersActiveValidators', + request: { + $id: '/lisk/chain/getBFTParametersActiveValidatorsRequest', + type: 'object', + required: ['height'], + properties: { + height: { + type: 'integer', + minimum: 0, + }, + }, + }, + }, { name: 'consensus_getBFTHeights', request: null, @@ -356,17 +406,27 @@ const engineEndpoints = [ request: null, }, { - name: 'system_getrequest', - request: {}, + name: 'system_getSchema', + request: null, }, { name: 'system_getMetricsReport', - request: null, + request: { + $id: '/lisk/system/getMetricsReportRequest', + type: 'object', + required: [], + properties: { + inString: { + type: 'boolean', + }, + }, + }, }, { name: 'txpool_postTransaction', request: { $id: '/lisk/postTransaction', + title: 'Transactions', type: 'object', required: ['transaction'], properties: { @@ -379,12 +439,22 @@ const engineEndpoints = [ }, { name: 'txpool_getTransactionsFromPool', - request: null, + request: { + $id: '/generator/getTransactionsFromPool', + type: 'object', + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + }, + }, }, { name: 'txpool_dryRunTransaction', request: { $id: '/lisk/dryRunTransaction', + title: 'Transactions', type: 'object', required: ['transaction'], properties: { @@ -396,6 +466,10 @@ const engineEndpoints = [ type: 'boolean', default: false, }, + strict: { + type: 'boolean', + default: false, + }, }, }, }, @@ -407,6 +481,7 @@ const engineEndpoints = [ name: 'generator_setStatus', request: { $id: '/lisk/setStatusRequest', + title: 'Set block generation status', type: 'object', required: ['address', 'height', 'maxHeightGenerated', 'maxHeightPrevoted'], properties: { @@ -433,8 +508,16 @@ const engineEndpoints = [ name: 'generator_updateStatus', request: { $id: '/lisk/updateStatusRequest', + title: 'Update block generation status', type: 'object', - required: ['address', 'password', 'enable', 'height', 'maxHeightGenerated', 'maxHeightPrevoted'], + required: [ + 'address', + 'password', + 'enable', + 'height', + 'maxHeightGenerated', + 'maxHeightPrevoted', + ], properties: { address: { type: 'string', diff --git a/services/blockchain-connector/shared/sdk/constants/eventTopics.js b/services/blockchain-connector/shared/sdk/constants/eventTopics.js index 116101ca7..fa0975989 100644 --- a/services/blockchain-connector/shared/sdk/constants/eventTopics.js +++ b/services/blockchain-connector/shared/sdk/constants/eventTopics.js @@ -52,7 +52,7 @@ const { EVENT_NAME_INVALID_CERTIFICATE_SIGNATURE, EVENT_NAME_INVALID_REGISTRATION_SIGNATURE, EVENT_NAME_CHAIN_ACCOUNT_UPDATED, - EVENT_NAME_CCM_SENT_SUCCESS, + EVENT_NAME_CCM_SEND_SUCCESS, EVENT_NAME_CCM_SENT_FAILED, EVENT_NAME_CCM_PROCESSED, EVENT_NAME_TERMINATED_STATE_CREATED, @@ -87,7 +87,6 @@ const { const COMMAND_EXECUTION_RESULT_TOPICS = ['transactionID']; -// TODO: Remove when SDK exposes topics information in metadata const EVENT_TOPIC_MAPPINGS_BY_MODULE = { [MODULE_NAME_AUTH]: { [EVENT_NAME_MULTISIGNATURE_REGISTERED]: ['transactionID', 'senderAddress'], @@ -99,7 +98,12 @@ const EVENT_TOPIC_MAPPINGS_BY_MODULE = { }, [MODULE_NAME_TOKEN]: { [EVENT_NAME_TRANSFER]: ['defaultTopic', 'senderAddress', 'recipientAddress'], - [EVENT_NAME_TRANSFER_CROSS_CHAIN]: ['defaultTopic', 'senderAddress', 'recipientAddress', 'receivingChainID'], + [EVENT_NAME_TRANSFER_CROSS_CHAIN]: [ + 'defaultTopic', + 'senderAddress', + 'recipientAddress', + 'receivingChainID', + ], [EVENT_NAME_CCM_TRANSFER]: ['transactionID', 'senderAddress', 'recipientAddress'], [EVENT_NAME_MINT]: ['defaultTopic', 'address'], [EVENT_NAME_BURN]: ['defaultTopic', 'address'], @@ -121,15 +125,20 @@ const EVENT_TOPIC_MAPPINGS_BY_MODULE = { [MODULE_NAME_FEE]: { [EVENT_NAME_FEE_PROCESSED]: ['transactionID', 'senderAddress', 'generatorAddress'], [EVENT_NAME_INSUFFICIENT_FEE]: ['transactionID'], - [EVENT_NAME_RELAYER_FEE_PROCESSED]: ['transactionID', 'ccmID', 'relayerAddress'], + [EVENT_NAME_RELAYER_FEE_PROCESSED]: ['ccmID', 'relayerAddress'], }, [MODULE_NAME_INTEROPERABILITY]: { [EVENT_NAME_INVALID_CERTIFICATE_SIGNATURE]: ['transactionID', 'chainID'], [EVENT_NAME_INVALID_REGISTRATION_SIGNATURE]: ['transactionID', 'chainID'], [EVENT_NAME_CHAIN_ACCOUNT_UPDATED]: ['transactionID', 'sendingChainID'], - [EVENT_NAME_CCM_SENT_SUCCESS]: ['transactionID', 'sendingChainID', 'receivingChainID', 'sentCCMID'], + [EVENT_NAME_CCM_SEND_SUCCESS]: [ + 'transactionID', + 'sendingChainID', + 'receivingChainID', + 'sentCCMID', + ], [EVENT_NAME_CCM_SENT_FAILED]: ['transactionID'], - [EVENT_NAME_CCM_PROCESSED]: ['transactionID', 'sendingChainID', 'receivingChainID', 'ccmID'], + [EVENT_NAME_CCM_PROCESSED]: ['transactionID', 'sendingChainID', 'receivingChainID'], [EVENT_NAME_TERMINATED_STATE_CREATED]: ['transactionID', 'chainID'], [EVENT_NAME_TERMINATED_OUTBOX_CREATED]: ['transactionID', 'chainID'], }, diff --git a/services/blockchain-connector/shared/sdk/constants/names.js b/services/blockchain-connector/shared/sdk/constants/names.js index c0b515be4..f9b080e08 100644 --- a/services/blockchain-connector/shared/sdk/constants/names.js +++ b/services/blockchain-connector/shared/sdk/constants/names.js @@ -59,7 +59,7 @@ const MODULE_NAME_INTEROPERABILITY = 'interoperability'; const EVENT_NAME_INVALID_CERTIFICATE_SIGNATURE = 'invalidCertificateSignature'; const EVENT_NAME_INVALID_REGISTRATION_SIGNATURE = 'invalidRegistrationSignature'; const EVENT_NAME_CHAIN_ACCOUNT_UPDATED = 'chainAccountUpdated'; -const EVENT_NAME_CCM_SENT_SUCCESS = 'ccmSendSuccess'; +const EVENT_NAME_CCM_SEND_SUCCESS = 'ccmSendSuccess'; const EVENT_NAME_CCM_SENT_FAILED = 'ccmSentFailed'; const EVENT_NAME_CCM_PROCESSED = 'ccmProcessed'; const EVENT_NAME_TERMINATED_STATE_CREATED = 'terminatedStateCreated'; @@ -138,7 +138,7 @@ module.exports = { EVENT_NAME_INVALID_CERTIFICATE_SIGNATURE, EVENT_NAME_INVALID_REGISTRATION_SIGNATURE, EVENT_NAME_CHAIN_ACCOUNT_UPDATED, - EVENT_NAME_CCM_SENT_SUCCESS, + EVENT_NAME_CCM_SEND_SUCCESS, EVENT_NAME_CCM_SENT_FAILED, EVENT_NAME_CCM_PROCESSED, EVENT_NAME_TERMINATED_STATE_CREATED, diff --git a/services/blockchain-connector/shared/sdk/dynamicReward.js b/services/blockchain-connector/shared/sdk/dynamicReward.js index 5e7d82013..e94c9f249 100644 --- a/services/blockchain-connector/shared/sdk/dynamicReward.js +++ b/services/blockchain-connector/shared/sdk/dynamicReward.js @@ -46,35 +46,50 @@ const getRewardTokenID = async () => { return rewardTokenID; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getRewardTokenID\'.'); + throw new TimeoutException("Request timed out when calling 'getRewardTokenID'."); } - logger.warn(`Error returned when invoking '${registeredRewardModule}_getRewardTokenID'.\n${err.stack}`); + logger.warn( + `Error returned when invoking '${registeredRewardModule}_getRewardTokenID'.\n${err.stack}`, + ); throw err; } }; -const getAnnualInflation = async (height) => { +const getAnnualInflation = async height => { try { - const annualInflation = await invokeEndpoint(`${registeredRewardModule}_getAnnualInflation`, { height }); + const annualInflation = await invokeEndpoint(`${registeredRewardModule}_getAnnualInflation`, { + height, + }); return annualInflation; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException(`Request timed out when calling 'getAnnualInflation' with block height:${height}.`); + throw new TimeoutException( + `Request timed out when calling 'getAnnualInflation' with block height:${height}.`, + ); } - logger.warn(`Error returned when invoking '${registeredRewardModule}_getAnnualInflation' with block height:${height}.\n${err.stack}`); + logger.warn( + `Error returned when invoking '${registeredRewardModule}_getAnnualInflation' with block height:${height}.\n${err.stack}`, + ); throw err; } }; const getDefaultRewardAtHeight = async height => { try { - const defaultRewardResponse = await invokeEndpoint(`${registeredRewardModule}_getDefaultRewardAtHeight`, { height }); + const defaultRewardResponse = await invokeEndpoint( + `${registeredRewardModule}_getDefaultRewardAtHeight`, + { height }, + ); return defaultRewardResponse; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException(`Request timed out when calling 'getDefaultRewardAtHeight' for block height:${height}`); + throw new TimeoutException( + `Request timed out when calling 'getDefaultRewardAtHeight' for block height:${height}`, + ); } - logger.warn(`Error returned when invoking '${registeredRewardModule}_getDefaultRewardAtHeight' with height: ${height}.\n${err.stack}`); + logger.warn( + `Error returned when invoking '${registeredRewardModule}_getDefaultRewardAtHeight' with height: ${height}.\n${err.stack}`, + ); throw err; } }; diff --git a/services/blockchain-connector/shared/sdk/encoder.js b/services/blockchain-connector/shared/sdk/encoder.js index 877a60a60..53406b23a 100644 --- a/services/blockchain-connector/shared/sdk/encoder.js +++ b/services/blockchain-connector/shared/sdk/encoder.js @@ -21,15 +21,11 @@ const { } = require('lisk-service-framework'); const { parseInputBySchema } = require('../utils/parser'); -const { - getTransactionSchema, - getTransactionParamsSchema, - getCCMSchema, -} = require('./schema'); +const { getTransactionSchema, getTransactionParamsSchema, getCCMSchema } = require('./schema'); const logger = Logger(); -const encodeTransaction = (transaction) => { +const encodeTransaction = transaction => { // Handle the transaction params const txParamsSchema = getTransactionParamsSchema(transaction); const txSchema = getTransactionSchema(); @@ -52,15 +48,12 @@ const encodeTransaction = (transaction) => { throw new InvalidParamsException(err); } - const txBuffer = codec.encode( - txSchema, - { ...parsedTx, params: txParamsBuffer }, - ); + const txBuffer = codec.encode(txSchema, { ...parsedTx, params: txParamsBuffer }); return txBuffer.toString('hex'); }; -const encodeCCM = (ccm) => { +const encodeCCM = ccm => { const ccmSchema = getCCMSchema(); const parsedCCM = parseInputBySchema(ccm, ccmSchema); diff --git a/services/blockchain-connector/shared/sdk/endpoints.js b/services/blockchain-connector/shared/sdk/endpoints.js index fed49909f..b771458ec 100644 --- a/services/blockchain-connector/shared/sdk/endpoints.js +++ b/services/blockchain-connector/shared/sdk/endpoints.js @@ -157,7 +157,7 @@ const getBlockByID = async (id, includeGenesisAssets = false) => { return getGenesisBlock(includeGenesisAssets); } - const blockFromCache = await getBlockByIDFromCache(id); + const blockFromCache = await getBlockByIDFromCache(id).catch(() => null); if (blockFromCache) return blockFromCache; const block = await invokeEndpoint('chain_getBlockByID', { id }); @@ -215,7 +215,7 @@ const getEventsByHeight = async height => { const getTransactionByID = async id => { try { - const transactionFromCache = await getTransactionByIDFromCache(id); + const transactionFromCache = await getTransactionByIDFromCache(id).catch(() => null); if (transactionFromCache) return transactionFromCache; const transaction = await invokeEndpoint('chain_getTransactionByID', { id }); diff --git a/services/blockchain-connector/shared/sdk/endpoints_1.js b/services/blockchain-connector/shared/sdk/endpoints_1.js index ecb6f7956..8af83cff6 100644 --- a/services/blockchain-connector/shared/sdk/endpoints_1.js +++ b/services/blockchain-connector/shared/sdk/endpoints_1.js @@ -15,6 +15,7 @@ */ const { Exceptions: { TimeoutException }, + Signals, } = require('lisk-service-framework'); const { invokeEndpoint } = require('./client'); @@ -78,6 +79,7 @@ const getNodeInfo = async (isForceUpdate = false) => { try { if (isForceUpdate || !nodeInfo) { nodeInfo = await invokeEndpoint('system_getNodeInfo'); + Signals.get('systemNodeInfo').dispatch(nodeInfo); } return nodeInfo; } catch (err) { diff --git a/services/blockchain-connector/shared/sdk/events.js b/services/blockchain-connector/shared/sdk/events.js index bee163130..d01046384 100644 --- a/services/blockchain-connector/shared/sdk/events.js +++ b/services/blockchain-connector/shared/sdk/events.js @@ -17,10 +17,11 @@ const util = require('util'); const { Logger, Signals } = require('lisk-service-framework'); +const config = require('../../config'); + const { getApiClient } = require('./client'); const { formatEvent } = require('./formatter'); const { getRegisteredEvents, getEventsByHeight, getNodeInfo } = require('./endpoints'); -const config = require('../../config'); const { updateTokenInfo } = require('./token'); const logger = Logger(); @@ -42,7 +43,7 @@ const events = [ let eventsCounter; const logError = (method, err) => { - logger.warn(`Invocation for ${method} failed with error: ${err.message}.`); + logger.warn(`Invocation for ${method} failed with error: ${err.message}`); logger.debug(err.stack); }; @@ -54,41 +55,72 @@ const subscribeToAllRegisteredEvents = async () => { const registeredEvents = await getRegisteredEvents(); const allEvents = registeredEvents.concat(events); allEvents.forEach(event => { - apiClient.subscribe( - event, - async payload => { - // Force update necessary caches on new chain events - if (event.startsWith('chain_')) { - eventsCounter++; // Increase counter with every newBlock/deleteBlock - - await getNodeInfo(true).catch(err => logError('getNodeInfo', err)); - await updateTokenInfo().catch(err => logError('updateTokenInfo', err)); - } + apiClient.subscribe(event, async payload => { + // Force update necessary caches on new chain events + if (event.startsWith('chain_')) { + eventsCounter++; // Increase counter with every newBlock/deleteBlock - logger.debug(`Received event: ${event} with payload:\n${util.inspect(payload)}`); - Signals.get(event).dispatch(payload); - }, - ); + await getNodeInfo(true).catch(err => logError('getNodeInfo', err)); + await updateTokenInfo().catch(err => logError('updateTokenInfo', err)); + } + + logger.debug(`Received event: ${event} with payload:\n${util.inspect(payload)}`); + Signals.get(event).dispatch(payload); + }); logger.info(`Subscribed to the API client event: ${event}.`); }); }; -const getEventsByHeightFormatted = async (height) => { +const getEventsByHeightFormatted = async height => { const chainEvents = await getEventsByHeight(height); - const formattedEvents = chainEvents.map((event) => formatEvent(event)); + const formattedEvents = chainEvents.map(event => formatEvent(event)); return formattedEvents; }; // To ensure API Client is alive and receiving chain events -getNodeInfo().then(nodeInfo => { - setInterval(() => { - if (eventsCounter === 0) { - Signals.get('resetApiClient').dispatch(); - } else { - eventsCounter = 0; - } - }, config.connectionVerifyBlockInterval * nodeInfo.genesis.blockTime * 1000); -}); +let isNodeSynced = false; +let isGenesisBlockDownloaded = false; + +const ensureAPIClientLiveness = () => { + if (isNodeSynced && isGenesisBlockDownloaded) { + setInterval(() => { + if (typeof eventsCounter === 'number' && eventsCounter > 0) { + eventsCounter = 0; + } else { + if (typeof eventsCounter !== 'number') { + logger.warn( + `eventsCounter ended up with non-numeric value: ${JSON.stringify( + eventsCounter, + null, + '\t', + )}.`, + ); + eventsCounter = 0; + } + + Signals.get('resetApiClient').dispatch(); + logger.info("Dispatched 'resetApiClient' signal to re-instantiate the API client."); + } + }, config.clientConnVerifyInterval); + } else { + logger.info( + `Cannot start the events-based client liveness check yet. Either the node is not yet synced or the genesis block hasn't been downloaded yet.\nisNodeSynced: ${isNodeSynced}, isGenesisBlockDownloaded: ${isGenesisBlockDownloaded}`, + ); + } +}; + +const nodeIsSyncedListener = () => { + isNodeSynced = true; + ensureAPIClientLiveness(); +}; + +const genesisBlockDownloadedListener = () => { + isGenesisBlockDownloaded = true; + ensureAPIClientLiveness(); +}; + +Signals.get('nodeIsSynced').add(nodeIsSyncedListener); +Signals.get('genesisBlockDownloaded').add(genesisBlockDownloadedListener); module.exports = { events, diff --git a/services/blockchain-connector/shared/sdk/fee.js b/services/blockchain-connector/shared/sdk/fee.js index bf046813f..3799aaf10 100644 --- a/services/blockchain-connector/shared/sdk/fee.js +++ b/services/blockchain-connector/shared/sdk/fee.js @@ -35,7 +35,7 @@ const cacheFeeTokenID = async () => { logger.info(`Updated feeTokenID to ${feeTokenID}.`); } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'cacheFeeTokenID\'.'); + throw new TimeoutException("Request timed out when calling 'cacheFeeTokenID'."); } logger.warn(`Error occurred when calling 'cacheFeeTokenID':\n${err.stack}`); throw err; @@ -52,7 +52,7 @@ const cacheMinFeePerByte = async () => { logger.info(`Updated minFeePerByte to ${minFeePerByte}.`); } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'cacheMinFeePerByte\'.'); + throw new TimeoutException("Request timed out when calling 'cacheMinFeePerByte'."); } logger.warn(`Error occurred when calling 'cacheMinFeePerByte':\n${err.stack}`); throw err; diff --git a/services/blockchain-connector/shared/sdk/formatter.js b/services/blockchain-connector/shared/sdk/formatter.js index 7986bb69b..44f052588 100644 --- a/services/blockchain-connector/shared/sdk/formatter.js +++ b/services/blockchain-connector/shared/sdk/formatter.js @@ -15,7 +15,9 @@ */ const { inspect } = require('util'); const { codec } = require('@liskhq/lisk-codec'); -const { utils: { hash } } = require('@liskhq/lisk-cryptography'); +const { + utils: { hash }, +} = require('@liskhq/lisk-cryptography'); const { computeMinFee } = require('@liskhq/lisk-transactions'); const { Logger } = require('lisk-service-framework'); @@ -23,7 +25,7 @@ const { getBlockAssetDataSchemaByModule, getTransactionSchema, getTransactionParamsSchema, - getDataSchemaByEventName, + getDataSchemaByEvent, getEventSchema, } = require('./schema'); @@ -50,17 +52,20 @@ const formatTransaction = (transaction, additionalFee = 0) => { const txParamsSchema = getTransactionParamsSchema(transaction); // Encode transaction params to calculate transaction size - if (typeof transaction.params === 'object' && !Buffer.isBuffer(transaction.params)) { - transaction.params = codec.encode( - txParamsSchema, - parseInputBySchema(transaction.params, txParamsSchema), - ); + if (typeof transaction.params === 'object') { + transaction.params = Buffer.isBuffer(transaction.params) + ? transaction.params.toString('hex') + : codec + .encode(txParamsSchema, parseInputBySchema(transaction.params, txParamsSchema)) + .toString('hex'); } const schemaCompliantTransaction = parseInputBySchema(transaction, txSchema); // Calculate transaction min fee - const transactionParams = codec.decodeJSON(txParamsSchema, Buffer.from(transaction.params, 'hex')); - const schemaCompliantTransactionParams = codec.decode(txParamsSchema, Buffer.from(transaction.params, 'hex')); + const schemaCompliantTransactionParams = codec.decode( + txParamsSchema, + Buffer.from(transaction.params, 'hex'), + ); const nonEmptySignatureCount = transaction.signatures.filter(s => s).length; const transactionMinFee = computeMinFee( { ...schemaCompliantTransaction, params: schemaCompliantTransactionParams }, @@ -75,18 +80,15 @@ const formatTransaction = (transaction, additionalFee = 0) => { ); // Calculate transaction size - const transactionBuffer = codec.encode( - txSchema, - { - ...schemaCompliantTransaction, - fee: schemaCompliantTransaction.fee || transactionMinFee, - }, - ); + const transactionBuffer = codec.encode(txSchema, { + ...schemaCompliantTransaction, + fee: schemaCompliantTransaction.fee || transactionMinFee, + }); const transactionSize = transactionBuffer.length; const formattedTransaction = { ...transaction, - params: transactionParams, + params: codec.decodeJSON(txParamsSchema, Buffer.from(transaction.params, 'hex')), size: transactionSize, minFee: transactionMinFee, }; @@ -94,12 +96,12 @@ const formatTransaction = (transaction, additionalFee = 0) => { return parseToJSONCompatObj(formattedTransaction); }; -const formatBlock = (block) => { +const formatBlock = block => { const blockHeader = block.header; const blockAssets = block.assets.map(asset => { // Decode asset data in case of binary payload - if (typeof (asset.data) === 'string') { + if (typeof asset.data === 'string') { const assetModule = asset.module; const blockAssetDataSchema = getBlockAssetDataSchemaByModule(assetModule); const formattedAssetData = blockAssetDataSchema @@ -107,7 +109,9 @@ const formatBlock = (block) => { : asset.data; if (!blockAssetDataSchema) { - logger.error(`Unable to decode asset data. Block asset schema missing for module ${assetModule}.`); + logger.error( + `Unable to decode asset data. Block asset schema missing for module ${assetModule}.`, + ); } const formattedBlockAsset = { @@ -140,7 +144,7 @@ const formatEvent = (event, skipDecode) => { if (skipDecode) { eventData = event.data; } else { - const eventDataSchema = getDataSchemaByEventName(event.name); + const eventDataSchema = getDataSchemaByEvent(event); try { eventData = eventDataSchema ? codec.decodeJSON(eventDataSchema, Buffer.from(event.data, 'hex')) @@ -151,12 +155,12 @@ const formatEvent = (event, skipDecode) => { } if (!eventDataSchema) { - // TODO: Remove this after SDK exposes all event schemas (before tagging rc.0) - console.error(`Event data schema missing for ${event.module}:${event.name}.`); - logger.error(`Unable to decode event data. Event data schema missing for ${event.module}:${event.name}.`); + logger.error( + `Unable to decode event data. Event data schema missing for ${event.module}:${event.name}.`, + ); } else { - // TODO: Remove after SDK fixes the address format (before tagging rc.0) - Object.keys(eventDataSchema.properties).forEach((prop) => { + // TODO: Remove after SDK fixes the address format (https://github.com/LiskHQ/lisk-sdk/issues/7629) + Object.keys(eventDataSchema.properties).forEach(prop => { if (prop.endsWith('Address')) { eventData[prop] = getLisk32Address(eventData[prop].toString('hex')); } @@ -165,23 +169,22 @@ const formatEvent = (event, skipDecode) => { } const eventTopicMappings = EVENT_TOPIC_MAPPINGS_BY_MODULE[event.module] || {}; - // TODO: Remove after all transaction types are tested (before tagging rc.0) if (!(event.module in EVENT_TOPIC_MAPPINGS_BY_MODULE)) { - console.error(`EVENT_TOPIC_MAPPINGS_BY_MODULE missing for module: ${event.module}.`); - console.info(inspect(event)); + logger.error(`EVENT_TOPIC_MAPPINGS_BY_MODULE missing for module: ${event.module}.`); + logger.info(inspect(event)); } - const topics = event.name === EVENT_NAME_COMMAND_EXECUTION_RESULT - ? COMMAND_EXECUTION_RESULT_TOPICS - : eventTopicMappings[event.name]; + const topics = + event.name === EVENT_NAME_COMMAND_EXECUTION_RESULT + ? COMMAND_EXECUTION_RESULT_TOPICS + : eventTopicMappings[event.name]; - // TODO: Remove after all transaction types are tested (before tagging rc.0) if (!topics || topics.length === 0) { - console.error(`EVENT_TOPIC_MAPPINGS_BY_MODULE undefined for event: ${event.name}.`); - console.info(inspect(event)); + logger.error(`EVENT_TOPIC_MAPPINGS_BY_MODULE undefined for event: ${event.name}.`); + logger.info(inspect(event)); } else if (topics.length !== event.topics.length) { - console.error(`EVENT_TOPIC_MAPPINGS_BY_MODULE defined incorrectly for event: ${event.name}.`); - console.info(inspect(event)); + logger.error(`EVENT_TOPIC_MAPPINGS_BY_MODULE defined incorrectly for event: ${event.name}.`); + logger.info(inspect(event)); } let eventTopics; diff --git a/services/blockchain-connector/shared/sdk/genesisBlock.js b/services/blockchain-connector/shared/sdk/genesisBlock.js index 8eda1cff5..d06dbee22 100644 --- a/services/blockchain-connector/shared/sdk/genesisBlock.js +++ b/services/blockchain-connector/shared/sdk/genesisBlock.js @@ -47,7 +47,9 @@ const getGenesisBlock = async (isIncludeAssets = false) => { assets: isIncludeAssets ? block.assets : [], }; } catch (_) { - logger.debug('Genesis block snapshot retrieval was not possible, attempting to retrieve directly from the node.'); + logger.debug( + 'Genesis block snapshot retrieval was not possible, attempting to retrieve directly from the node.', + ); } const height = await getGenesisHeight(); @@ -56,7 +58,7 @@ const getGenesisBlock = async (isIncludeAssets = false) => { return block; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getGenesisBlock\'.'); + throw new TimeoutException("Request timed out when calling 'getGenesisBlock'."); } throw err; } @@ -84,7 +86,7 @@ const getGenesisConfig = async () => { return genesisConfig; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getGenesisConfig\'.'); + throw new TimeoutException("Request timed out when calling 'getGenesisConfig'."); } throw err; } @@ -110,12 +112,14 @@ const getGenesisAssets = async (params = {}) => { moduleData = moduleData.slice(params.offset, params.offset + params.limit); } - return [{ - ...assetByModule, - data: { - [params.subStore]: moduleData, + return [ + { + ...assetByModule, + data: { + [params.subStore]: moduleData, + }, }, - }]; + ]; } // This will only be executed when params.module is present. Return the module info if found @@ -140,17 +144,16 @@ const getGenesisAssetByModule = async (params = {}) => { } } */ -const getGenesisAssetsLength = async (params) => { +const getGenesisAssetsLength = async params => { const genesisAssets = await getGenesisAssets(params); const assetLengthMap = {}; // eslint-disable-next-line no-restricted-syntax for (const asset of genesisAssets) { - Object.keys(asset.data).forEach( - subStoreKey => { - if (!assetLengthMap[asset.module]) assetLengthMap[asset.module] = {}; - assetLengthMap[asset.module][subStoreKey] = asset.data[subStoreKey].length; - }); + Object.keys(asset.data).forEach(subStoreKey => { + if (!assetLengthMap[asset.module]) assetLengthMap[asset.module] = {}; + assetLengthMap[asset.module][subStoreKey] = asset.data[subStoreKey].length; + }); } return assetLengthMap; @@ -161,6 +164,7 @@ module.exports = { getGenesisBlockID, getGenesisBlock, getGenesisConfig, + getGenesisAssets, getGenesisAssetByModule, getGenesisAssetsLength, }; diff --git a/services/blockchain-connector/shared/sdk/index.js b/services/blockchain-connector/shared/sdk/index.js index a40f65233..76c18b272 100644 --- a/services/blockchain-connector/shared/sdk/index.js +++ b/services/blockchain-connector/shared/sdk/index.js @@ -13,6 +13,10 @@ * Removal or modification of this copyright notice is prohibited. * */ +const { Signals } = require('lisk-service-framework'); + +const config = require('../../config'); + const { getGenesisHeight, getGenesisBlockID, @@ -83,16 +87,9 @@ const { cacheRegisteredRewardModule, } = require('./dynamicReward'); -const { - getFeeTokenID, - getMinFeePerByte, - cacheFeeConstants, -} = require('./fee'); +const { getFeeTokenID, getMinFeePerByte, cacheFeeConstants } = require('./fee'); -const { - getAuthAccount, - getAuthMultiSigRegMsgSchema, -} = require('./auth'); +const { getAuthAccount, getAuthMultiSigRegMsgSchema } = require('./auth'); const { getChainAccount, @@ -119,18 +116,28 @@ const { formatTransaction } = require('./formatter'); const { encodeCCM } = require('./encoder'); const init = async () => { + // Cache all the schemas + setSchemas(await getSchemas()); + setMetadata(await getSystemMetadata()); + // Initialize the local cache await getNodeInfo(true); await cacheRegisteredRewardModule(); await cacheFeeConstants(); await updateTokenInfo(); - - // Cache all the schemas - setSchemas(await getSchemas()); - setMetadata(await getSystemMetadata()); + await getTokenInitializationFees(); + await getRewardTokenID(); + await getPosConstants(); + await getAllPosValidators(); // Download the genesis block, if applicable - await getGenesisBlock(); + await getGenesisBlock().then(() => { + Signals.get('genesisBlockDownloaded').dispatch(); + }); + + if (config.appExitDelay) { + setTimeout(() => process.exit(0), config.appExitDelay); + } }; module.exports = { diff --git a/services/blockchain-connector/shared/sdk/interoperability.js b/services/blockchain-connector/shared/sdk/interoperability.js index 4039eadaa..cbc80834b 100644 --- a/services/blockchain-connector/shared/sdk/interoperability.js +++ b/services/blockchain-connector/shared/sdk/interoperability.js @@ -26,48 +26,52 @@ const logger = Logger(); let mainchainID; let registrationFee; -const getChainAccount = async (chainID) => { +const getChainAccount = async chainID => { try { const chainAccount = await invokeEndpoint('interoperability_getChainAccount', { chainID }); return chainAccount; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getChainAccount\'.'); + throw new TimeoutException("Request timed out when calling 'getChainAccount'."); } - logger.warn(`Error returned when invoking 'interoperability_getChainAccount' with chainID: ${chainID}.\n${err.stack}`); + logger.warn( + `Error returned when invoking 'interoperability_getChainAccount' with chainID: ${chainID}.\n${err.stack}`, + ); throw err; } }; const getMainchainID = async () => { try { - const { chainID } = await getNodeInfo(); - if (!mainchainID) { + const { chainID } = await getNodeInfo(); const response = await invokeEndpoint('interoperability_getMainchainID', { chainID }); - mainchainID = response.error && response.error.message.includes('not registered to bus') - ? chainID - : response.mainchainID; + mainchainID = + response.error && response.error.message.includes('not registered to bus') + ? chainID + : response.mainchainID; } return mainchainID; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getMainchainID\'.'); + throw new TimeoutException("Request timed out when calling 'getMainchainID'."); } logger.warn(`Error returned when invoking 'interoperability_getMainchainID'.\n${err.stack}`); throw err; } }; -const getChannel = async (chainID) => { +const getChannel = async chainID => { try { const channelInfo = await invokeEndpoint('interoperability_getChannel', { chainID }); return channelInfo; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getChannel\'.'); + throw new TimeoutException("Request timed out when calling 'getChannel'."); } - logger.warn(`Error returned when invoking 'interoperability_getChannel' with chainID: ${chainID}.\n${err.stack}`); + logger.warn( + `Error returned when invoking 'interoperability_getChannel' with chainID: ${chainID}.\n${err.stack}`, + ); throw err; } }; @@ -80,9 +84,11 @@ const getRegistrationFee = async () => { return registrationFee; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getRegistrationFee\'.'); + throw new TimeoutException("Request timed out when calling 'getRegistrationFee'."); } - logger.warn(`Error returned when invoking 'interoperability_getRegistrationFee'.\n${err.stack}`); + logger.warn( + `Error returned when invoking 'interoperability_getRegistrationFee'.\n${err.stack}`, + ); throw err; } }; diff --git a/services/blockchain-connector/shared/sdk/legacy.js b/services/blockchain-connector/shared/sdk/legacy.js index 6afd9db05..dcde6eeb5 100644 --- a/services/blockchain-connector/shared/sdk/legacy.js +++ b/services/blockchain-connector/shared/sdk/legacy.js @@ -19,13 +19,13 @@ const { const { timeoutMessage, invokeEndpoint } = require('./client'); -const getLegacyAccount = async (publicKey) => { +const getLegacyAccount = async publicKey => { try { const legacyAccount = await invokeEndpoint('legacy_getLegacyAccount', { publicKey }); return legacyAccount; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getLegacyAccount\'.'); + throw new TimeoutException("Request timed out when calling 'getLegacyAccount'."); } throw err; } diff --git a/services/blockchain-connector/shared/sdk/peerCache.js b/services/blockchain-connector/shared/sdk/peerCache.js index 6fec300f5..1017cca79 100644 --- a/services/blockchain-connector/shared/sdk/peerCache.js +++ b/services/blockchain-connector/shared/sdk/peerCache.js @@ -37,9 +37,10 @@ const peerStore = { }, }; -const get = (type = 'peers') => new Promise((resolve) => { - resolve(peerStore[type]); -}); +const get = (type = 'peers') => + new Promise(resolve => { + resolve(peerStore[type]); + }); const refactorPeer = (orgPeer, state) => { const { ipAddress, options: { height } = {}, ...peer } = orgPeer; @@ -49,7 +50,7 @@ const refactorPeer = (orgPeer, state) => { return peer; }; -const addLocation = async (ipAddress) => { +const addLocation = async ipAddress => { try { const result = await GeoService.requestData(ipAddress); return result; @@ -60,23 +61,20 @@ const addLocation = async (ipAddress) => { const getNetworkPeers = async () => { const connectedPeers = await endpoints.getNetworkConnectedPeers(); - connectedPeers.data = connectedPeers - .map(orgPeer => refactorPeer(orgPeer, peerStates.CONNECTED)); + connectedPeers.data = connectedPeers.map(orgPeer => refactorPeer(orgPeer, peerStates.CONNECTED)); const disconnectedPeers = await endpoints.getNetworkDisconnectedPeers(); - disconnectedPeers.data = disconnectedPeers - .map(orgPeer => refactorPeer(orgPeer, peerStates.DISCONNECTED)); - - const data = [ - ...connectedPeers.data, - ...disconnectedPeers.data, - ]; - const peersWithLocation = await Promise.all(data.map( - async peer => { + disconnectedPeers.data = disconnectedPeers.map(orgPeer => + refactorPeer(orgPeer, peerStates.DISCONNECTED), + ); + + const data = [...connectedPeers.data, ...disconnectedPeers.data]; + const peersWithLocation = await Promise.all( + data.map(async peer => { peer.location = await addLocation(peer.ip); return peer; - }, - )); + }), + ); return peersWithLocation; }; @@ -96,24 +94,31 @@ const refreshStatistics = async () => { basicStats.disconnectedPeers = disconnected.length; const heightArr = connected.map(elem => elem.height); - heightArr.forEach(elem => { if (elem) heightStats[elem] = (heightStats[elem] || 0) + 1; }); + heightArr.forEach(elem => { + if (elem) heightStats[elem] = (heightStats[elem] || 0) + 1; + }); const coreVerArr = connected.map(elem => elem.version); - coreVerArr.forEach(elem => { if (elem) coreVerStats[elem] = (coreVerStats[elem] || 0) + 1; }); + coreVerArr.forEach(elem => { + if (elem) coreVerStats[elem] = (coreVerStats[elem] || 0) + 1; + }); const networkVerArr = connected.map(elem => elem.networkVersion); - networkVerArr - .forEach(elem => { if (elem) networkVerStats[elem] = (networkVerStats[elem] || 0) + 1; }); + networkVerArr.forEach(elem => { + if (elem) networkVerStats[elem] = (networkVerStats[elem] || 0) + 1; + }); const osArr = connected.map(elem => elem.os); - const mappedOs = osArr.map((elem) => { + const mappedOs = osArr.map(elem => { if (typeof elem === 'string' && elem.match(/^linux(.*)/)) { const splitOsString = elem.split('.'); elem = `${splitOsString[0]}.${splitOsString[1].split('-')[0]}`; } return elem; }); - mappedOs.forEach(elem => { if (elem) osStats[elem] = (osStats[elem] || 0) + 1; }); + mappedOs.forEach(elem => { + if (elem) osStats[elem] = (osStats[elem] || 0) + 1; + }); return { basic: basicStats, diff --git a/services/blockchain-connector/shared/sdk/pos.js b/services/blockchain-connector/shared/sdk/pos.js index 5bbec49a7..37474237b 100644 --- a/services/blockchain-connector/shared/sdk/pos.js +++ b/services/blockchain-connector/shared/sdk/pos.js @@ -15,6 +15,7 @@ */ const { Logger, + Signals, Exceptions: { TimeoutException }, } = require('lisk-service-framework'); @@ -26,39 +27,56 @@ const { getGenesisHeight } = require('./genesisBlock'); const logger = Logger(); -const getPosValidator = async (address) => { +let posModuleConstants; +let allPosValidators; + +const getPosValidator = async address => { try { const validator = await invokeEndpoint('pos_getValidator', { address }); return validator; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getPosValidator\'.'); + throw new TimeoutException("Request timed out when calling 'getPosValidator'."); } - logger.warn(`Error returned when invoking 'pos_getValidator' with address: ${address}.\n${err.stack}`); + logger.warn( + `Error returned when invoking 'pos_getValidator' with address: ${address}.\n${err.stack}`, + ); throw err; } }; -const getAllPosValidators = async () => { +const getAllPosValidators = async isForceReload => { try { - const validators = await invokeEndpoint('pos_getAllValidators'); - return validators; + if (!allPosValidators || isForceReload) { + const response = await invokeEndpoint('pos_getAllValidators'); + if (response && Array.isArray(response.validators)) { + allPosValidators = response; + logger.info( + `Reloaded PoS validators list with ${allPosValidators.validators.length} entries.`, + ); + } else { + return response; + } + } + return allPosValidators; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getAllPosValidators\'.'); + throw new TimeoutException("Request timed out when calling 'getAllPosValidators'."); } logger.warn(`Error returned when invoking 'pos_getAllValidators'.\n${err.stack}`); throw err; } }; -const getPosValidatorsByStake = async (limit) => { +Signals.get('reloadAllPosValidators').add(() => getAllPosValidators(true)); + +const getPosValidatorsByStake = async limit => { try { const validators = await invokeEndpoint('pos_getValidatorsByStake', { limit }); return validators; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getPosValidatorsByStake\'.'); + throw new TimeoutException("Request timed out when calling 'getPosValidatorsByStake'."); } logger.warn(`Error returned when invoking 'pos_getValidatorsByStake'.\n${err.stack}`); throw err; @@ -66,33 +84,40 @@ const getPosValidatorsByStake = async (limit) => { }; const getPosConstants = async () => { - try { - const response = await invokeEndpoint('pos_getConstants'); - if (response.error) throw new Error(response.error); - return response; - } catch (err) { - if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getPosConstants\'.'); + if (typeof posModuleConstants === 'undefined') { + try { + const response = await invokeEndpoint('pos_getConstants'); + + if (response.error) throw new Error(response.error); + posModuleConstants = response; + } catch (err) { + if (err.message.includes(timeoutMessage)) { + throw new TimeoutException("Request timed out when calling 'getPosConstants'."); + } + logger.warn(`Error returned when invoking 'pos_getConstants'.\n${err.stack}`); + throw err; } - logger.warn(`Error returned when invoking 'pos_getConstants'.\n${err.stack}`); - throw err; } + + return posModuleConstants; }; -const getPosPendingUnlocks = async (address) => { +const getPosPendingUnlocks = async address => { try { const response = await invokeEndpoint('pos_getPendingUnlocks', { address }); return response; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getPosPendingUnlocks\'.'); + throw new TimeoutException("Request timed out when calling 'getPosPendingUnlocks'."); } - logger.warn(`Error returned when invoking 'pos_getPendingUnlocks' with address: ${address}.\n${err.stack}`); + logger.warn( + `Error returned when invoking 'pos_getPendingUnlocks' with address: ${address}.\n${err.stack}`, + ); throw err; } }; -const getStaker = async (address) => { +const getStaker = async address => { try { const staker = await invokeEndpoint('pos_getStaker', { address }); @@ -106,9 +131,11 @@ const getStaker = async (address) => { return staker; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getStaker\'.'); + throw new TimeoutException("Request timed out when calling 'getStaker'."); } - logger.warn(`Error returned when invoking 'pos_getStaker' with address: ${address}.\n${err.stack}`); + logger.warn( + `Error returned when invoking 'pos_getStaker' with address: ${address}.\n${err.stack}`, + ); throw err; } }; @@ -119,9 +146,11 @@ const getPosClaimableRewards = async ({ address }) => { return claimableRewards; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getPosClaimableRewards\'.'); + throw new TimeoutException("Request timed out when calling 'getPosClaimableRewards'."); } - logger.warn(`Error returned when invoking 'pos_getClaimableRewards' with param: ${address}.\n${err.stack}`); + logger.warn( + `Error returned when invoking 'pos_getClaimableRewards' with param: ${address}.\n${err.stack}`, + ); throw err; } }; @@ -132,9 +161,11 @@ const getPosLockedReward = async ({ address, tokenID }) => { return lockedReward; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getPosLockedReward\'.'); + throw new TimeoutException("Request timed out when calling 'getPosLockedReward'."); } - logger.warn(`Error returned when invoking 'pos_getLockedReward' with address: ${address}, tokenID: ${tokenID}.\n${err.stack}`); + logger.warn( + `Error returned when invoking 'pos_getLockedReward' with address: ${address}, tokenID: ${tokenID}.\n${err.stack}`, + ); throw err; } }; @@ -143,12 +174,11 @@ const getPoSGenesisStakers = async () => { try { const genesisHeight = await getGenesisHeight(); const block = await getBlockByHeight(genesisHeight, true); - const { stakers = [] } = (block.assets - .find(asset => asset.module === MODULE_NAME_POS)).data; + const { stakers = [] } = block.assets.find(asset => asset.module === MODULE_NAME_POS).data; return stakers; } catch (error) { if (error.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getPoSGenesisStakers\'.'); + throw new TimeoutException("Request timed out when calling 'getPoSGenesisStakers'."); } throw error; } @@ -158,12 +188,11 @@ const getPoSGenesisValidators = async () => { try { const genesisHeight = await getGenesisHeight(); const block = await getBlockByHeight(genesisHeight, true); - const { validators = [] } = (block.assets - .find(asset => asset.module === MODULE_NAME_POS)).data; + const { validators = [] } = block.assets.find(asset => asset.module === MODULE_NAME_POS).data; return validators; } catch (error) { if (error.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getPoSGenesisValidators\'.'); + throw new TimeoutException("Request timed out when calling 'getPoSGenesisValidators'."); } throw error; } diff --git a/services/blockchain-connector/shared/sdk/schema.js b/services/blockchain-connector/shared/sdk/schema.js index ec5525f2b..8cd2243ef 100644 --- a/services/blockchain-connector/shared/sdk/schema.js +++ b/services/blockchain-connector/shared/sdk/schema.js @@ -1,24 +1,25 @@ /* -* LiskHQ/lisk-service -* Copyright © 2022 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2022 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const { EVENT_NAME_COMMAND_EXECUTION_RESULT } = require('./constants/names'); let schemas; let metadata; +const eventSchemaLookup = {}; -const setSchemas = (_schemas) => schemas = _schemas; +const setSchemas = _schemas => (schemas = _schemas); const getAccountSchema = () => schemas.account; @@ -34,34 +35,33 @@ const getTransactionSchema = () => schemas.transaction; const getCCMSchema = () => schemas.ccm; -const getTransactionParamsSchema = (transaction) => { +const getTransactionParamsSchema = transaction => { const moduleMetadata = metadata.modules.find(m => m.name === transaction.module); const { params: schema } = moduleMetadata.commands.find(c => c.name === transaction.command); return schema; }; -const setMetadata = (_metadata) => metadata = _metadata; +const setMetadata = _metadata => (metadata = _metadata); -const getBlockAssetDataSchemaByModule = (_module) => { +const getBlockAssetDataSchemaByModule = _module => { const moduleMetadata = metadata.modules.find(m => m.name === _module); const [{ data: schema } = {}] = moduleMetadata.assets; return schema; }; -const getDataSchemaByEventName = (eventName) => { - if (EVENT_NAME_COMMAND_EXECUTION_RESULT === eventName) return schemas.standardEvent; +const getDataSchemaByEvent = event => { + if (EVENT_NAME_COMMAND_EXECUTION_RESULT === event.name) return schemas.standardEvent; - // TODO: Optimize - for (let i = 0; i < metadata.modules.length; i++) { - const module = metadata.modules[i]; - - for (let eventIndex = 0; eventIndex < module.events.length; eventIndex++) { - const moduleEvent = module.events[eventIndex]; - if (moduleEvent.name === eventName) return module.events[eventIndex].data; - } + // Populate the eventSchemaLookup map with module events if not exists + if (Object.keys(eventSchemaLookup).length === 0) { + metadata.modules.forEach(module => { + module.events.forEach(moduleEvent => { + eventSchemaLookup[`${module.name}_${moduleEvent.name}`] = moduleEvent.data; + }); + }); } - return null; + return eventSchemaLookup[`${event.module}_${event.name}`] || null; }; module.exports = { @@ -76,6 +76,6 @@ module.exports = { getEventSchema, getTransactionSchema, getTransactionParamsSchema, - getDataSchemaByEventName, + getDataSchemaByEvent, getCCMSchema, }; diff --git a/services/blockchain-connector/shared/sdk/token.js b/services/blockchain-connector/shared/sdk/token.js index 5996751e0..f662c6433 100644 --- a/services/blockchain-connector/shared/sdk/token.js +++ b/services/blockchain-connector/shared/sdk/token.js @@ -1,19 +1,22 @@ /* -* LiskHQ/lisk-service -* Copyright © 2022 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ -const { Exceptions: { TimeoutException }, Logger } = require('lisk-service-framework'); + * LiskHQ/lisk-service + * Copyright © 2022 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ +const { + Exceptions: { TimeoutException }, + Logger, +} = require('lisk-service-framework'); const { timeoutMessage, invokeEndpoint } = require('./client'); const logger = Logger(); @@ -21,14 +24,15 @@ const logger = Logger(); let escrowedAmounts; let supportedTokens; let totalSupply; +let initializationFees; -const getTokenBalances = async (address) => { +const getTokenBalances = async address => { try { const balances = await invokeEndpoint('token_getBalances', { address }); return balances; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getTokenBalances\'.'); + throw new TimeoutException("Request timed out when calling 'getTokenBalances'."); } logger.warn(`Error returned when invoking 'token_getBalances'.\n${err.stack}`); throw err; @@ -41,7 +45,7 @@ const getTokenBalance = async ({ address, tokenID }) => { return balance; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getTokenBalance\'.'); + throw new TimeoutException("Request timed out when calling 'getTokenBalance'."); } logger.warn(`Error returned when invoking 'token_getBalance'.\n${err.stack}`); throw err; @@ -56,7 +60,7 @@ const getEscrowedAmounts = async (isForceUpdate = false) => { return escrowedAmounts; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getEscrowedAmounts\'.'); + throw new TimeoutException("Request timed out when calling 'getEscrowedAmounts'."); } logger.warn(`Error returned when invoking 'token_getEscrowedAmounts'.\n${err.stack}`); throw err; @@ -71,7 +75,7 @@ const getSupportedTokens = async (isForceUpdate = false) => { return supportedTokens; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getSupportedTokens\'.'); + throw new TimeoutException("Request timed out when calling 'getSupportedTokens'."); } logger.warn(`Error returned when invoking 'token_getSupportedTokens'.\n${err.stack}`); throw err; @@ -86,7 +90,7 @@ const getTotalSupply = async (isForceUpdate = false) => { return totalSupply; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getTotalSupply\'.'); + throw new TimeoutException("Request timed out when calling 'getTotalSupply'."); } logger.warn(`Error returned when invoking 'token_getTotalSupply'.\n${err.stack}`); throw err; @@ -95,12 +99,15 @@ const getTotalSupply = async (isForceUpdate = false) => { const getTokenInitializationFees = async () => { try { - const response = await invokeEndpoint('token_getInitializationFees'); - if (response.error) throw new Error(response.error); - return response; + if (!initializationFees) { + const response = await invokeEndpoint('token_getInitializationFees'); + if (response.error) throw new Error(response.error); + initializationFees = response; + } + return initializationFees; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getTokenInitializationFees\'.'); + throw new TimeoutException("Request timed out when calling 'getTokenInitializationFees'."); } logger.warn(`Error returned when invoking 'token_getInitializationFees'.\n${err.stack}`); throw err; @@ -112,7 +119,7 @@ const hasUserAccount = async ({ address, tokenID }) => { return invokeEndpoint('token_hasUserAccount', { address, tokenID }); } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'hasUserAccount\'.'); + throw new TimeoutException("Request timed out when calling 'hasUserAccount'."); } throw err; } @@ -123,7 +130,7 @@ const hasEscrowAccount = async ({ tokenID, escrowChainID }) => { return invokeEndpoint('token_hasEscrowAccount', { tokenID, escrowChainID }); } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'hasUserAccount\'.'); + throw new TimeoutException("Request timed out when calling 'hasUserAccount'."); } throw err; } diff --git a/services/blockchain-connector/shared/sdk/transactions.js b/services/blockchain-connector/shared/sdk/transactions.js index a35a3a54d..523b5c675 100644 --- a/services/blockchain-connector/shared/sdk/transactions.js +++ b/services/blockchain-connector/shared/sdk/transactions.js @@ -13,6 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ +const { Logger } = require('lisk-service-framework'); const { encodeTransaction } = require('./encoder'); const { formatTransaction, formatEvent } = require('./formatter'); const { @@ -23,29 +24,44 @@ const { dryRunTransaction, } = require('./endpoints'); -const getTransactionByIDFormatted = async (id) => { +const logger = Logger(); + +const getTransactionByIDFormatted = async id => { const transaction = await getTransactionByID(id); const formattedTransaction = formatTransaction(transaction); return formattedTransaction; }; -const getTransactionsByIDsFormatted = async (ids) => { +const getTransactionsByIDsFormatted = async ids => { const transactions = await getTransactionsByIDs(ids); - const formattedTransactions = transactions.map((t) => formatTransaction(t)); + const formattedTransactions = transactions.map(t => formatTransaction(t)); return formattedTransactions; }; const getTransactionsFromPoolFormatted = async () => { const transactions = await getTransactionsFromPool(); - const formattedTransactions = transactions.map((t) => formatTransaction(t)); - return formattedTransactions; + const formattedTransactions = transactions.map(t => { + try { + return formatTransaction(t); + } catch (error) { + logger.warn( + `Formatting transaction failed due to: ${error.message}\nTransaction: ${JSON.stringify( + t, + null, + '\t', + )}`, + ); + return null; + } + }); + + return formattedTransactions.filter(t => t); }; -const dryRunTransactionWrapper = async (params) => { +const dryRunTransactionWrapper = async params => { const { transaction, skipVerify, skipDecode, strict } = params; - const encodedTransaction = typeof transaction === 'object' - ? encodeTransaction(transaction) - : transaction; + const encodedTransaction = + typeof transaction === 'object' ? encodeTransaction(transaction) : transaction; const response = await dryRunTransaction({ transaction: encodedTransaction, skipVerify, strict }); response.events = response.events.map(event => formatEvent(event, skipDecode)); diff --git a/services/blockchain-connector/shared/sdk/validators.js b/services/blockchain-connector/shared/sdk/validators.js index d853f1b84..efee6ab0a 100644 --- a/services/blockchain-connector/shared/sdk/validators.js +++ b/services/blockchain-connector/shared/sdk/validators.js @@ -24,24 +24,29 @@ const logger = Logger(); const validateBLSKey = async ({ blsKey, proofOfPossession }) => { try { - const response = await invokeEndpoint('validators_validateBLSKey', { blsKey, proofOfPossession }); + const response = await invokeEndpoint('validators_validateBLSKey', { + blsKey, + proofOfPossession, + }); return response; } catch (err) { if (err.message.includes(timeoutMessage)) { - logger.warn(`Request timed out when calling 'validateBLSKey' with:\nblsKey: ${blsKey}\nproofOfPossession: ${proofOfPossession}`); - throw new TimeoutException('Request timed out when calling \'validateBLSKey\'.'); + logger.warn( + `Request timed out when calling 'validateBLSKey' with:\nblsKey: ${blsKey}\nproofOfPossession: ${proofOfPossession}`, + ); + throw new TimeoutException("Request timed out when calling 'validateBLSKey'."); } throw err; } }; -const getValidator = async (address) => { +const getValidator = async address => { try { const validatorInfo = await invokeEndpoint('validators_getValidator', { address }); return validatorInfo; } catch (err) { if (err.message.includes(timeoutMessage)) { - throw new TimeoutException('Request timed out when calling \'getValidator\'.'); + throw new TimeoutException("Request timed out when calling 'getValidator'."); } throw err; } diff --git a/services/blockchain-connector/shared/status.js b/services/blockchain-connector/shared/status.js index ccb9fc911..f2fd873da 100644 --- a/services/blockchain-connector/shared/status.js +++ b/services/blockchain-connector/shared/status.js @@ -1,18 +1,18 @@ /* -* LiskHQ/lisk-service -* Copyright © 2023 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const packageJson = require('../package.json'); const { getNetworkStatus } = require('./sdk'); diff --git a/services/blockchain-connector/shared/utils/account.js b/services/blockchain-connector/shared/utils/account.js index 367a82011..961cea894 100644 --- a/services/blockchain-connector/shared/utils/account.js +++ b/services/blockchain-connector/shared/utils/account.js @@ -18,10 +18,7 @@ const { getLisk32AddressFromPublicKey: getLisk32AddressFromPublicKeyHelper, getLisk32AddressFromAddress, }, - legacyAddress: { - getLegacyAddressFromPublicKey, - - }, + legacyAddress: { getLegacyAddressFromPublicKey }, } = require('@liskhq/lisk-cryptography'); const getLegacyFormatAddressFromPublicKey = publicKey => { @@ -29,12 +26,15 @@ const getLegacyFormatAddressFromPublicKey = publicKey => { return legacyAddress; }; -const getLisk32AddressFromPublicKey = publicKey => getLisk32AddressFromPublicKeyHelper(Buffer.from(publicKey, 'hex')); +const getLisk32AddressFromPublicKey = publicKey => + getLisk32AddressFromPublicKeyHelper(Buffer.from(publicKey, 'hex')); -const getLisk32AddressFromHexAddress = address => getLisk32AddressFromAddress(Buffer.from(address, 'hex')); +const getLisk32AddressFromHexAddress = address => + getLisk32AddressFromAddress(Buffer.from(address, 'hex')); -// TODO: Remove once SDK returns address in Lisk32 format -const getLisk32Address = address => address.startsWith('lsk') ? address : getLisk32AddressFromHexAddress(address); +// TODO: Remove once SDK returns address in Lisk32 format (https://github.com/LiskHQ/lisk-sdk/issues/7629) +const getLisk32Address = address => + address.startsWith('lsk') ? address : getLisk32AddressFromHexAddress(address); module.exports = { getLegacyAddressFromPublicKey: getLegacyFormatAddressFromPublicKey, diff --git a/services/blockchain-connector/shared/utils/download.js b/services/blockchain-connector/shared/utils/download.js index ef537727b..7ffb6dcc0 100644 --- a/services/blockchain-connector/shared/utils/download.js +++ b/services/blockchain-connector/shared/utils/download.js @@ -30,88 +30,94 @@ const { read, exists } = require('./fs'); const logger = Logger(); -const getHTTPProtocolByURL = (url) => url.startsWith('https') ? https : http; +const getHTTPProtocolByURL = url => (url.startsWith('https') ? https : http); -const downloadAndExtractTarball = (url, directoryPath) => new Promise((resolve, reject) => { - logger.info(`Downloading and extracting file from ${url} to ${directoryPath}.`); - getHTTPProtocolByURL(url).get(url, (response) => { - if (response.statusCode === 200) { - response.pipe(tar.extract({ cwd: directoryPath })); - response.on('error', async (err) => reject(new Error(err))); - response.on('end', async () => { - logger.info('File downloaded successfully.'); - resolve(); - }); - } else { - const errMessage = `Download failed with HTTP status code: ${response.statusCode} (${response.statusMessage}).`; - logger.error(errMessage); - if (response.statusCode === 404) reject(new NotFoundException(errMessage)); - reject(new Error(errMessage)); - } +const downloadAndExtractTarball = (url, directoryPath) => + new Promise((resolve, reject) => { + logger.info(`Downloading and extracting file from ${url} to ${directoryPath}.`); + getHTTPProtocolByURL(url).get(url, response => { + if (response.statusCode === 200) { + response.pipe(tar.extract({ cwd: directoryPath })); + response.on('error', async err => reject(new Error(err))); + response.on('end', async () => { + logger.info('File downloaded successfully.'); + resolve(); + }); + } else { + const errMessage = `Download failed with HTTP status code: ${response.statusCode} (${response.statusMessage}).`; + logger.error(errMessage); + if (response.statusCode === 404) reject(new NotFoundException(errMessage)); + reject(new Error(errMessage)); + } + }); }); -}); -const downloadJSONFile = (fileUrl, filePath) => new Promise((resolve, reject) => { - logger.info(`Downloading JSON file from ${fileUrl} as ${filePath}`); - request(fileUrl) - .then(async response => { - const block = typeof response === 'string' ? JSON.parse(response).data : response.data; - fs.writeFile(filePath, JSON.stringify(block), () => { - logger.info('File downloaded successfully'); - resolve(); - }); - }) - .catch(err => reject(new Error(err))); -}); +const downloadJSONFile = (fileUrl, filePath) => + new Promise((resolve, reject) => { + logger.info(`Downloading JSON file from ${fileUrl} as ${filePath}.`); + request(fileUrl) + .then(async response => { + const block = typeof response === 'string' ? JSON.parse(response).data : response.data; + fs.writeFile(filePath, JSON.stringify(block), () => { + logger.info('File downloaded successfully.'); + resolve(); + }); + }) + .catch(err => reject(new Error(err))); + }); -const downloadAndUnzipFile = (fileUrl, filePath) => new Promise((resolve, reject) => { - logger.info(`Downloading and extracting file from ${fileUrl} as ${filePath}`); - getHTTPProtocolByURL(fileUrl).get(fileUrl, (response) => { - if (response.statusCode === 200) { - const unzip = zlib.createUnzip(); - const writeFile = fs.createWriteStream(filePath); - response.pipe(unzip).pipe(writeFile); - response.on('error', async (err) => reject(new Error(err))); - response.on('end', async () => { - logger.info('File downloaded successfully'); - resolve(); - }); - } else { - const errMessage = `Download failed with HTTP status code: ${response.statusCode} (${response.statusMessage})`; - logger.error(errMessage); - if (response.statusCode === 404) reject(new NotFoundException(errMessage)); - reject(new Error(errMessage)); - } +const downloadAndUnzipFile = (fileUrl, filePath) => + new Promise((resolve, reject) => { + logger.info(`Downloading and extracting file from ${fileUrl} as ${filePath}.`); + getHTTPProtocolByURL(fileUrl).get(fileUrl, response => { + if (response.statusCode === 200) { + const unzip = zlib.createUnzip(); + const writeFile = fs.createWriteStream(filePath); + response.pipe(unzip).pipe(writeFile); + response.on('error', async err => reject(new Error(err))); + response.on('end', async () => { + logger.info('File downloaded successfully.'); + resolve(); + }); + } else { + const errMessage = `Download failed with HTTP status code: ${response.statusCode} (${response.statusMessage})`; + logger.error(errMessage); + if (response.statusCode === 404) reject(new NotFoundException(errMessage)); + reject(new Error(errMessage)); + } + }); }); -}); -const downloadFile = (url, dirPath) => new Promise((resolve, reject) => { - logger.info(`Downloading file from ${url} to ${dirPath}`); +const downloadFile = (url, dirPath) => + new Promise((resolve, reject) => { + logger.info(`Downloading file from ${url} to ${dirPath}.`); - getHTTPProtocolByURL(url).get(url, (response) => { - if (response.statusCode === 200) { - const pathWithoutProtocol = url.replace(/(^\w+:|^)\/\//, '').split('/'); - const fileName = pathWithoutProtocol.pop(); - const writeStream = fs.createWriteStream(`${dirPath}/${fileName}`); - response.pipe(writeStream); - response.on('error', async (err) => reject(new Error(err))); - response.on('end', async () => { - logger.info('File downloaded successfully'); - resolve(); - }); - } else { - const errMessage = `Download failed with HTTP status code: ${response.statusCode} (${response.statusMessage})`; - logger.error(errMessage); - if (response.statusCode === 404) reject(new NotFoundException(errMessage)); - reject(new Error(errMessage)); - } + getHTTPProtocolByURL(url).get(url, response => { + if (response.statusCode === 200) { + const pathWithoutProtocol = url.replace(/(^\w+:|^)\/\//, '').split('/'); + const fileName = pathWithoutProtocol.pop(); + const writeStream = fs.createWriteStream(`${dirPath}/${fileName}`); + response.pipe(writeStream); + response.on('error', async err => reject(new Error(err))); + response.on('end', async () => { + logger.info('File downloaded successfully.'); + resolve(); + }); + } else { + const errMessage = `Download failed with HTTP status code: ${response.statusCode} (${response.statusMessage})`; + logger.error(errMessage); + if (response.statusCode === 404) reject(new NotFoundException(errMessage)); + reject(new Error(errMessage)); + } + }); }); -}); const verifyFileChecksum = async (filePath, checksumPath) => { // Validate existance of both files if (!(await exists(filePath)) || !(await exists(checksumPath))) { - logger.info(`Checksum verification failed. One of the following files does not exist:\nfilePath:${filePath}\nchecksumPath:${checksumPath}`); + logger.info( + `Checksum verification failed. One of the following files does not exist:\nfilePath:${filePath}\nchecksumPath:${checksumPath}`, + ); return false; } // Read checksum hash @@ -121,7 +127,7 @@ const verifyFileChecksum = async (filePath, checksumPath) => { const fileStream = fs.createReadStream(filePath); const dataHash = crypto.createHash('sha256'); const fileHash = await new Promise((resolve, reject) => { - fileStream.on('data', (datum) => { + fileStream.on('data', datum => { dataHash.update(datum); }); fileStream.on('error', error => { @@ -134,7 +140,9 @@ const verifyFileChecksum = async (filePath, checksumPath) => { const fileChecksum = fileHash.toString('hex'); if (fileChecksum !== expectedChecksum) { - logger.info(`Checksum verification failed for file:${filePath}\nExpected: ${expectedChecksum}, Actual: ${fileChecksum}`); + logger.info( + `Checksum verification failed for file:${filePath}\nExpected: ${expectedChecksum}, Actual: ${fileChecksum}`, + ); return false; } diff --git a/services/blockchain-connector/shared/utils/fs.js b/services/blockchain-connector/shared/utils/fs.js index 9a3f6ecb3..c0cc4cd97 100644 --- a/services/blockchain-connector/shared/utils/fs.js +++ b/services/blockchain-connector/shared/utils/fs.js @@ -25,15 +25,16 @@ const { const logger = Logger(); -const extractTarBall = async (filePath, directoryPath) => new Promise((resolve, reject) => { - const fileStream = fs.createReadStream(filePath); - fileStream.pipe(tar.extract({ cwd: directoryPath })); - fileStream.on('error', async (err) => reject(new Error(err))); - fileStream.on('end', async () => { - logger.debug('File extracted successfully.'); - resolve(); +const extractTarBall = async (filePath, directoryPath) => + new Promise((resolve, reject) => { + const fileStream = fs.createReadStream(filePath); + fileStream.pipe(tar.extract({ cwd: directoryPath })); + fileStream.on('error', async err => reject(new Error(err))); + fileStream.on('end', async () => { + logger.debug('File extracted successfully.'); + resolve(); + }); }); -}); module.exports = { exists, diff --git a/services/blockchain-connector/shared/utils/parser.js b/services/blockchain-connector/shared/utils/parser.js index a59705158..e2ae35007 100644 --- a/services/blockchain-connector/shared/utils/parser.js +++ b/services/blockchain-connector/shared/utils/parser.js @@ -13,7 +13,9 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { address: { getAddressFromLisk32Address } } = require('@liskhq/lisk-cryptography'); +const { + address: { getAddressFromLisk32Address }, +} = require('@liskhq/lisk-cryptography'); const parseToJSONCompatObj = obj => { if (typeof obj === 'boolean' || !obj) return obj; @@ -21,16 +23,20 @@ const parseToJSONCompatObj = obj => { if (['string', 'number'].includes(typeof obj)) return obj; if (obj instanceof Buffer) return Buffer.from(obj).toString('hex'); if (typeof obj === 'bigint') return String(obj); - if (typeof obj === 'object' && Array.isArray(obj)) return (() => { obj.forEach((o, i) => obj[i] = parseToJSONCompatObj(o)); return obj; })(); + if (typeof obj === 'object' && Array.isArray(obj)) + return (() => { + obj.forEach((o, i) => (obj[i] = parseToJSONCompatObj(o))); + return obj; + })(); - Object.entries(obj) - .forEach(([k, v]) => { - if (v instanceof Buffer) obj[k] = Buffer.from(v).toString('hex'); - else if (typeof v === 'bigint') obj[k] = String(v); - else if (typeof v === 'object' && Array.isArray(v)) obj[k].forEach((o, i) => obj[k][i] = parseToJSONCompatObj(o)); - else if (typeof v === 'object' && v !== null) obj[k] = parseToJSONCompatObj(v); - else obj[k] = v; - }); + Object.entries(obj).forEach(([k, v]) => { + if (v instanceof Buffer) obj[k] = Buffer.from(v).toString('hex'); + else if (typeof v === 'bigint') obj[k] = String(v); + else if (typeof v === 'object' && Array.isArray(v)) + obj[k].forEach((o, i) => (obj[k][i] = parseToJSONCompatObj(o))); + else if (typeof v === 'object' && v !== null) obj[k] = parseToJSONCompatObj(v); + else obj[k] = v; + }); return obj; }; @@ -58,13 +64,15 @@ const parseInputBySchema = (input, schema) => { if (type === 'array') { acc[key] = currValue.map(item => parseInputBySchema(item, itemsSchema)); } else { - const innerSchema = (typeof currValue === 'object') ? schema.properties[key] : { dataType, format }; + const innerSchema = + typeof currValue === 'object' ? schema.properties[key] : { dataType, format }; acc[key] = parseInputBySchema(currValue, innerSchema); } return acc; }, {}); return formattedObj; - } if (schemaType === 'array') { + } + if (schemaType === 'array') { const formattedArray = input.map(item => parseInputBySchema(item, schemaItemsSchema)); return formattedArray; } diff --git a/services/blockchain-connector/shared/utils/waitForIt.js b/services/blockchain-connector/shared/utils/waitForIt.js deleted file mode 100644 index c090f6e65..000000000 --- a/services/blockchain-connector/shared/utils/waitForIt.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * LiskHQ/lisk-service - * Copyright © 2022 Lisk Foundation - * - * See the LICENSE file at the top-level directory of this distribution - * for licensing information. - * - * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, - * no part of this software, including this file, may be copied, modified, - * propagated, or distributed except according to the terms contained in the - * LICENSE file. - * - * Removal or modification of this copyright notice is prohibited. - * - */ -const { Logger } = require('lisk-service-framework'); - -const logger = Logger(); - -const waitForIt = (fn, intervalMs = 1000) => new Promise((resolve) => { - const checkIfReady = async (that) => { - try { - const result = await fn(); - clearInterval(that); - if (result !== undefined) resolve(result); - } catch (err) { - logger.debug(`Waiting for ${intervalMs}ms ...`); - } - }; - const hInterval = setInterval(checkIfReady, intervalMs, this); - checkIfReady(hInterval); -}); - -module.exports = waitForIt; diff --git a/services/blockchain-connector/tests/constants/blocks.js b/services/blockchain-connector/tests/constants/blocks.js index 95365910a..04c2c8817 100644 --- a/services/blockchain-connector/tests/constants/blocks.js +++ b/services/blockchain-connector/tests/constants/blocks.js @@ -33,21 +33,27 @@ const blockWithTransaction = Object.freeze({ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', + signature: + '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', id: 'c1c7c28f5b123135cb5a25f210390f200cd0ed7cc901c0b5997f084e2998c9cc', }, transactions: [ { module: 'token', command: 'transfer', - params: '0a0804000000000000001080c8afa0251a1402604d9e57a39772fa12f2a860ecf6c1e9cae91122075465737420747828c096b102', - nonce: '0', fee: '100000000', + nonce: '1', senderPublicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', signatures: [ - 'a7e332b49db6d36c1024a24afbfd6eec2451e41c1cf751a8c609863ffa3e529ef4b8a34cecff29e9fa4bf30de4ce26f58c5d8a06587582a9129a6765064d3404', + 'c7fd1abf9a552fa9c91b4121c87ae2c97cb0fc0aecc87d0ee8b1aa742238eef4a6815ddba31e21144c9652a7bd5c05577ae1100eac34fba43da6fc4879b8f206', ], - id: '66870fa27b22c361094ff2d72a794b3d7e531c02a488271c38d02180c05e3c69', + params: { + amount: '1000000000000', + recipientAddress: 'lskv6v53emsaen6cwbbk226wusdpa6ojdonunka4x', + data: '', + tokenID: '0400000000000000', + }, + id: 'd96c777b67576ddf4cd933a97a60b4311881e68e3c8bef1393ac0020ec8a506c', }, ], assets: [ @@ -78,7 +84,8 @@ const decodedBlockWithTransaction = Object.freeze({ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', + signature: + '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', id: 'c1c7c28f5b123135cb5a25f210390f200cd0ed7cc901c0b5997f084e2998c9cc', }, assets: [ @@ -93,22 +100,21 @@ const decodedBlockWithTransaction = Object.freeze({ { module: 'token', command: 'transfer', - params: { - tokenID: '0400000000000000', - amount: '10000000000', - recipientAddress: 'lskz4upsnrwk75wmfurf6kbxsne2nkjqd3yzwdaup', - data: 'Test tx', - accountInitializationFee: '5000000', - }, - nonce: '0', fee: '100000000', + nonce: '1', senderPublicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', signatures: [ - 'a7e332b49db6d36c1024a24afbfd6eec2451e41c1cf751a8c609863ffa3e529ef4b8a34cecff29e9fa4bf30de4ce26f58c5d8a06587582a9129a6765064d3404', + 'c7fd1abf9a552fa9c91b4121c87ae2c97cb0fc0aecc87d0ee8b1aa742238eef4a6815ddba31e21144c9652a7bd5c05577ae1100eac34fba43da6fc4879b8f206', ], - id: '66870fa27b22c361094ff2d72a794b3d7e531c02a488271c38d02180c05e3c69', - size: 178, - minFee: '177000', + params: { + tokenID: '0400000000000000', + amount: '1000000000000', + recipientAddress: 'lskv6v53emsaen6cwbbk226wusdpa6ojdonunka4x', + data: '', + }, + id: 'd96c777b67576ddf4cd933a97a60b4311881e68e3c8bef1393ac0020ec8a506c', + size: 167, + minFee: '166000', }, ], }); @@ -133,7 +139,8 @@ const blockWithoutTransaction = Object.freeze({ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: '274585e5e93fefa239766d7ca2720fed9118c6c53e95d3ec8d47bbe6c3194d7fe86d6e2d3e8d440e5637da0d1212d6d58985cbc21eb3536e7e67f56bd0582e06', + signature: + '274585e5e93fefa239766d7ca2720fed9118c6c53e95d3ec8d47bbe6c3194d7fe86d6e2d3e8d440e5637da0d1212d6d58985cbc21eb3536e7e67f56bd0582e06', id: '1363799498535e4e565673855e1a740da99bf910fcaf7b9b9fdf3de7e14a836b', }, transactions: [], @@ -165,7 +172,8 @@ const decodedBlockWithoutTransaction = Object.freeze({ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: '274585e5e93fefa239766d7ca2720fed9118c6c53e95d3ec8d47bbe6c3194d7fe86d6e2d3e8d440e5637da0d1212d6d58985cbc21eb3536e7e67f56bd0582e06', + signature: + '274585e5e93fefa239766d7ca2720fed9118c6c53e95d3ec8d47bbe6c3194d7fe86d6e2d3e8d440e5637da0d1212d6d58985cbc21eb3536e7e67f56bd0582e06', id: '1363799498535e4e565673855e1a740da99bf910fcaf7b9b9fdf3de7e14a836b', }, assets: [ @@ -207,7 +215,8 @@ const invalidBlock = Object.freeze({ transactions: [], }); -const invalidEncodedBlock = '80210a197db9206180122202d7c1de74a7353a8bea6f1af1620e5bbb9f6170fa4b5376267f8fb3d0e314d322a141348bdced232cf3c74742d8f3d96f436de3220e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8553a20e626f31527f88edd955c3ce5b6eea63f8c1d2fb6ddd329eac0b81d9ab0919b77422041e6b1c0cd1eb398e64a0af03f1b6547096fb005669b35985776d8f1c2564107480050005a20f89987de86e18d8391339c3b92c796ae7d0f7a75f8d57b2392539cc3c39e5ffe6206080012001a006a40efb32235a979a770225cc996b8419c135d10c61a789b5672f9b943637eb735b46cd37b39bfa598831932f15ff7e52a955fbe4756c3e0a83e0da8dd54065e74041a16080f12120a10a21eee43f81c4bc447ee5f'; +const invalidEncodedBlock = + '80210a197db9206180122202d7c1de74a7353a8bea6f1af1620e5bbb9f6170fa4b5376267f8fb3d0e314d322a141348bdced232cf3c74742d8f3d96f436de3220e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8553a20e626f31527f88edd955c3ce5b6eea63f8c1d2fb6ddd329eac0b81d9ab0919b77422041e6b1c0cd1eb398e64a0af03f1b6547096fb005669b35985776d8f1c2564107480050005a20f89987de86e18d8391339c3b92c796ae7d0f7a75f8d57b2392539cc3c39e5ffe6206080012001a006a40efb32235a979a770225cc996b8419c135d10c61a789b5672f9b943637eb735b46cd37b39bfa598831932f15ff7e52a955fbe4756c3e0a83e0da8dd54065e74041a16080f12120a10a21eee43f81c4bc447ee5f'; const genesisBlock = { header: { diff --git a/services/blockchain-connector/tests/constants/ccm.js b/services/blockchain-connector/tests/constants/ccm.js index 2bcaaa420..e5bf7adbe 100644 --- a/services/blockchain-connector/tests/constants/ccm.js +++ b/services/blockchain-connector/tests/constants/ccm.js @@ -20,11 +20,13 @@ const decodedCCM = Object.freeze({ fee: '10000000', sendingChainID: '02000000', receivingChainID: '02000001', - params: '0a0802000000000000001080d0dbc3f4021a14fc18da54f6ce01bf31195548460361dfdb83c2052214888592ae41888c267826d7870206d3016a1863042a00', + params: + '0a0802000000000000001080d0dbc3f4021a14fc18da54f6ce01bf31195548460361dfdb83c2052214888592ae41888c267826d7870206d3016a1863042a00', status: 0, }); -const encodedCCM = '0a05746f6b656e12127472616e7366657243726f7373436861696e18012080ade2042a04020000003204020000013a3f0a0802000000000000001080d0dbc3f4021a14fc18da54f6ce01bf31195548460361dfdb83c2052214888592ae41888c267826d7870206d3016a1863042a004000'; +const encodedCCM = + '0a05746f6b656e12127472616e7366657243726f7373436861696e18012080ade2042a04020000003204020000013a3f0a0802000000000000001080d0dbc3f4021a14fc18da54f6ce01bf31195548460361dfdb83c2052214888592ae41888c267826d7870206d3016a1863042a004000'; const invalidCCM = Object.freeze({ module: 'token', diff --git a/services/blockchain-connector/tests/constants/parser.js b/services/blockchain-connector/tests/constants/parser.js index 7a94881d4..79facc958 100644 --- a/services/blockchain-connector/tests/constants/parser.js +++ b/services/blockchain-connector/tests/constants/parser.js @@ -193,10 +193,7 @@ const liskAccount = Object.freeze({ fieldNumber: 2, }, }, - required: [ - 'delegateAddress', - 'amount', - ], + required: ['delegateAddress', 'amount'], }, }, unlocking: { @@ -218,24 +215,14 @@ const liskAccount = Object.freeze({ fieldNumber: 3, }, }, - required: [ - 'delegateAddress', - 'amount', - 'unvoteHeight', - ], + required: ['delegateAddress', 'amount', 'unvoteHeight'], }, }, }, fieldNumber: 5, }, }, - required: [ - 'address', - 'token', - 'sequence', - 'keys', - 'dpos', - ], + required: ['address', 'token', 'sequence', 'keys', 'dpos'], }, }); @@ -254,7 +241,8 @@ const liskBlock = Object.freeze({ maxHeightPrevoted: 18211676, seedReveal: 'bbe7d7e3afb79ff40551b3535c1fbd6b', }, - signature: 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', + signature: + 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', id: 'b179c1f9551f292938fe33f66e910cd78820a78a156efc5e0e14b19a53ef1363', }, payload: [], @@ -273,7 +261,8 @@ const liskBlock = Object.freeze({ maxHeightPrevoted: 18211676, seedReveal: 'bbe7d7e3afb79ff40551b3535c1fbd6b', }, - signature: 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', + signature: + 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', id: 'b179c1f9551f292938fe33f66e910cd78820a78a156efc5e0e14b19a53ef1363', }, payload: [], @@ -294,10 +283,7 @@ const liskBlock = Object.freeze({ fieldNumber: 2, }, }, - required: [ - 'header', - 'payload', - ], + required: ['header', 'payload'], }, }); @@ -315,23 +301,36 @@ const liskBlockHeader = Object.freeze({ maxHeightPrevoted: 18211676, seedReveal: 'bbe7d7e3afb79ff40551b3535c1fbd6b', }, - signature: 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', + signature: + 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', id: 'b179c1f9551f292938fe33f66e910cd78820a78a156efc5e0e14b19a53ef1363', }, expected: { version: 2, timestamp: 1649419370, height: 18211765, - previousBlockID: Buffer.from('82919375aeffdd90f32465cab6df95bdbc0c87698f17a539baad1b8575db4437', 'hex'), - transactionRoot: Buffer.from('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'hex'), - generatorPublicKey: Buffer.from('6cb825715058d2e821aa4af75fbd0da52181910d9fda90fabe73cd533eeb6acb', 'hex'), + previousBlockID: Buffer.from( + '82919375aeffdd90f32465cab6df95bdbc0c87698f17a539baad1b8575db4437', + 'hex', + ), + transactionRoot: Buffer.from( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + 'hex', + ), + generatorPublicKey: Buffer.from( + '6cb825715058d2e821aa4af75fbd0da52181910d9fda90fabe73cd533eeb6acb', + 'hex', + ), reward: BigInt('100000000'), asset: { maxHeightPreviouslyForged: 18211671, maxHeightPrevoted: 18211676, seedReveal: 'bbe7d7e3afb79ff40551b3535c1fbd6b', }, - signature: Buffer.from('b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', 'hex'), + signature: Buffer.from( + 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', + 'hex', + ), id: 'b179c1f9551f292938fe33f66e910cd78820a78a156efc5e0e14b19a53ef1363', }, schema: { @@ -530,11 +529,7 @@ const liskBlockHeaderAsset = Object.freeze({ schema: { $id: '/genesisBlock/header/asset', type: 'object', - required: [ - 'accounts', - 'initDelegates', - 'initRounds', - ], + required: ['accounts', 'initDelegates', 'initRounds'], properties: { accounts: { type: 'array', @@ -650,10 +645,7 @@ const liskBlockHeaderAsset = Object.freeze({ fieldNumber: 2, }, }, - required: [ - 'delegateAddress', - 'amount', - ], + required: ['delegateAddress', 'amount'], }, }, unlocking: { @@ -675,24 +667,14 @@ const liskBlockHeaderAsset = Object.freeze({ fieldNumber: 3, }, }, - required: [ - 'delegateAddress', - 'amount', - 'unvoteHeight', - ], + required: ['delegateAddress', 'amount', 'unvoteHeight'], }, }, }, fieldNumber: 5, }, }, - required: [ - 'address', - 'token', - 'sequence', - 'keys', - 'dpos', - ], + required: ['address', 'token', 'sequence', 'keys', 'dpos'], }, }, initDelegates: { @@ -742,11 +724,7 @@ const liskBlockHeaderAssetV3 = Object.freeze({ fieldNumber: 3, }, }, - required: [ - 'maxHeightPreviouslyForged', - 'maxHeightPrevoted', - 'seedReveal', - ], + required: ['maxHeightPreviouslyForged', 'maxHeightPrevoted', 'seedReveal'], }, }); @@ -772,9 +750,15 @@ const liskTransaction = Object.freeze({ assetID: 0, nonce: BigInt('4'), fee: BigInt('1000000'), - senderPublicKey: Buffer.from('5133af7944acf5278b0310a11c06134f80ab4546d77d1b0e027c8430a7d2bb92', 'hex'), + senderPublicKey: Buffer.from( + '5133af7944acf5278b0310a11c06134f80ab4546d77d1b0e027c8430a7d2bb92', + 'hex', + ), signatures: [ - Buffer.from('98a9ee2cde8354d014cfe6367d430be2713e102f37d92ab91f03db780407e5bf6d818a45c21c9f5518638dfc3c5365fc2d497b928e0b9d6337988df46a663a02', 'hex'), + Buffer.from( + '98a9ee2cde8354d014cfe6367d430be2713e102f37d92ab91f03db780407e5bf6d818a45c21c9f5518638dfc3c5365fc2d497b928e0b9d6337988df46a663a02', + 'hex', + ), ], asset: { amount: '800000000', @@ -786,14 +770,7 @@ const liskTransaction = Object.freeze({ schema: { $id: 'lisk/transaction', type: 'object', - required: [ - 'moduleID', - 'assetID', - 'nonce', - 'fee', - 'senderPublicKey', - 'asset', - ], + required: ['moduleID', 'assetID', 'nonce', 'fee', 'senderPublicKey', 'asset'], properties: { moduleID: { dataType: 'uint32', @@ -853,11 +830,7 @@ const liskTransactionAssets = Object.freeze([ $id: 'lisk/transfer-asset', title: 'Transfer transaction asset', type: 'object', - required: [ - 'amount', - 'recipientAddress', - 'data', - ], + required: ['amount', 'recipientAddress', 'data'], properties: { amount: { dataType: 'uint64', @@ -898,11 +871,7 @@ const liskTransactionAssets = Object.freeze([ schema: { $id: 'lisk/keys/register', type: 'object', - required: [ - 'numberOfSignatures', - 'optionalKeys', - 'mandatoryKeys', - ], + required: ['numberOfSignatures', 'optionalKeys', 'mandatoryKeys'], properties: { numberOfSignatures: { dataType: 'uint32', @@ -949,9 +918,7 @@ const liskTransactionAssets = Object.freeze([ schema: { $id: 'lisk/dpos/register', type: 'object', - required: [ - 'username', - ], + required: ['username'], properties: { username: { dataType: 'string', @@ -1010,9 +977,7 @@ const liskTransactionAssets = Object.freeze([ schema: { $id: 'lisk/dpos/vote', type: 'object', - required: [ - 'votes', - ], + required: ['votes'], properties: { votes: { type: 'array', @@ -1020,10 +985,7 @@ const liskTransactionAssets = Object.freeze([ maxItems: 20, items: { type: 'object', - required: [ - 'delegateAddress', - 'amount', - ], + required: ['delegateAddress', 'amount'], properties: { delegateAddress: { dataType: 'bytes', @@ -1098,9 +1060,7 @@ const liskTransactionAssets = Object.freeze([ schema: { $id: 'lisk/dpos/unlock', type: 'object', - required: [ - 'unlockObjects', - ], + required: ['unlockObjects'], properties: { unlockObjects: { type: 'array', @@ -1108,11 +1068,7 @@ const liskTransactionAssets = Object.freeze([ maxItems: 20, items: { type: 'object', - required: [ - 'delegateAddress', - 'amount', - 'unvoteHeight', - ], + required: ['delegateAddress', 'amount', 'unvoteHeight'], properties: { delegateAddress: { dataType: 'bytes', @@ -1154,7 +1110,8 @@ const liskTransactionAssets = Object.freeze([ maxHeightPrevoted: 18027210, seedReveal: '6187c9991e64617cab4c54aa26e72431', }, - signature: 'f2d578a2b3f4d1244ac13b280be66080192943270c9be6b2304b7f2d3adf6c3c87d9faca7971b33aeb42c21fc58e9e26a5beffbad7dccc21ab859b89585b920b', + signature: + 'f2d578a2b3f4d1244ac13b280be66080192943270c9be6b2304b7f2d3adf6c3c87d9faca7971b33aeb42c21fc58e9e26a5beffbad7dccc21ab859b89585b920b', }, header2: { version: 2, @@ -1169,7 +1126,8 @@ const liskTransactionAssets = Object.freeze([ maxHeightPrevoted: 18142247, seedReveal: '6187c9991e64617cab4c54aa26e72431', }, - signature: '4e01276f227080fdb91565567511744fb45b9aaa791cf277ba2124f751ad9214d81858dc1b6318f61b0002916484a139aebfaa6f60b7da7d792e160fbeee0608', + signature: + '4e01276f227080fdb91565567511744fb45b9aaa791cf277ba2124f751ad9214d81858dc1b6318f61b0002916484a139aebfaa6f60b7da7d792e160fbeee0608', }, }, expected: { @@ -1177,40 +1135,61 @@ const liskTransactionAssets = Object.freeze([ version: 2, timestamp: 1647573700, height: 18027287, - previousBlockID: Buffer.from('0b6b36182d28c6d88ecbc03427e4e9b3623a987873bb3696ffb77bbdf033b888', 'hex'), - transactionRoot: Buffer.from('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'hex'), - generatorPublicKey: Buffer.from('d26f57478f8d30784ba36658873f84d5134da7eee31ada7d29183a4fe9cdafde', 'hex'), + previousBlockID: Buffer.from( + '0b6b36182d28c6d88ecbc03427e4e9b3623a987873bb3696ffb77bbdf033b888', + 'hex', + ), + transactionRoot: Buffer.from( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + 'hex', + ), + generatorPublicKey: Buffer.from( + 'd26f57478f8d30784ba36658873f84d5134da7eee31ada7d29183a4fe9cdafde', + 'hex', + ), reward: BigInt('100000000'), asset: { maxHeightPreviouslyForged: 0, maxHeightPrevoted: 18027210, seedReveal: Buffer.from('6187c9991e64617cab4c54aa26e72431', 'hex'), }, - signature: Buffer.from('f2d578a2b3f4d1244ac13b280be66080192943270c9be6b2304b7f2d3adf6c3c87d9faca7971b33aeb42c21fc58e9e26a5beffbad7dccc21ab859b89585b920b', 'hex'), + signature: Buffer.from( + 'f2d578a2b3f4d1244ac13b280be66080192943270c9be6b2304b7f2d3adf6c3c87d9faca7971b33aeb42c21fc58e9e26a5beffbad7dccc21ab859b89585b920b', + 'hex', + ), }, header2: { version: 2, timestamp: 1648724430, height: 18142315, - previousBlockID: Buffer.from('2c2765f67dda9c1e57d6bd3d8ca8da3db8a9354bf579d93e79d88635c0ecc6b6', 'hex'), - transactionRoot: Buffer.from('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'hex'), - generatorPublicKey: Buffer.from('d26f57478f8d30784ba36658873f84d5134da7eee31ada7d29183a4fe9cdafde', 'hex'), + previousBlockID: Buffer.from( + '2c2765f67dda9c1e57d6bd3d8ca8da3db8a9354bf579d93e79d88635c0ecc6b6', + 'hex', + ), + transactionRoot: Buffer.from( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + 'hex', + ), + generatorPublicKey: Buffer.from( + 'd26f57478f8d30784ba36658873f84d5134da7eee31ada7d29183a4fe9cdafde', + 'hex', + ), reward: BigInt('100000000'), asset: { maxHeightPreviouslyForged: 0, maxHeightPrevoted: 18142247, seedReveal: Buffer.from('6187c9991e64617cab4c54aa26e72431', 'hex'), }, - signature: Buffer.from('4e01276f227080fdb91565567511744fb45b9aaa791cf277ba2124f751ad9214d81858dc1b6318f61b0002916484a139aebfaa6f60b7da7d792e160fbeee0608', 'hex'), + signature: Buffer.from( + '4e01276f227080fdb91565567511744fb45b9aaa791cf277ba2124f751ad9214d81858dc1b6318f61b0002916484a139aebfaa6f60b7da7d792e160fbeee0608', + 'hex', + ), }, }, schema: { $id: 'lisk/dpos/pom', type: 'object', - required: [ - 'header1', - 'header2', - ], + required: ['header1', 'header2'], properties: { header1: { $id: 'block-header1', @@ -1261,11 +1240,7 @@ const liskTransactionAssets = Object.freeze([ fieldNumber: 3, }, }, - required: [ - 'maxHeightPreviouslyForged', - 'maxHeightPrevoted', - 'seedReveal', - ], + required: ['maxHeightPreviouslyForged', 'maxHeightPrevoted', 'seedReveal'], }, signature: { dataType: 'bytes', @@ -1333,11 +1308,7 @@ const liskTransactionAssets = Object.freeze([ fieldNumber: 3, }, }, - required: [ - 'maxHeightPreviouslyForged', - 'maxHeightPrevoted', - 'seedReveal', - ], + required: ['maxHeightPreviouslyForged', 'maxHeightPrevoted', 'seedReveal'], }, signature: { dataType: 'bytes', @@ -1374,9 +1345,7 @@ const liskTransactionAssets = Object.freeze([ $id: 'lisk/legacyAccount/reclaim', title: 'Reclaim transaction asset', type: 'object', - required: [ - 'amount', - ], + required: ['amount'], properties: { amount: { dataType: 'uint64', @@ -1385,7 +1354,6 @@ const liskTransactionAssets = Object.freeze([ }, }, }, - ]); module.exports = { diff --git a/services/blockchain-connector/tests/constants/transactions.js b/services/blockchain-connector/tests/constants/transactions.js index 95a576fe5..2b2465de3 100644 --- a/services/blockchain-connector/tests/constants/transactions.js +++ b/services/blockchain-connector/tests/constants/transactions.js @@ -16,35 +16,39 @@ const transaction = Object.freeze({ module: 'token', command: 'transfer', - nonce: '0', fee: '100000000', + nonce: '1', senderPublicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', - params: '0a0804000000000000001080c8afa0251a1402604d9e57a39772fa12f2a860ecf6c1e9cae91122075465737420747828c096b102', signatures: [ - 'a7e332b49db6d36c1024a24afbfd6eec2451e41c1cf751a8c609863ffa3e529ef4b8a34cecff29e9fa4bf30de4ce26f58c5d8a06587582a9129a6765064d3404', + 'c7fd1abf9a552fa9c91b4121c87ae2c97cb0fc0aecc87d0ee8b1aa742238eef4a6815ddba31e21144c9652a7bd5c05577ae1100eac34fba43da6fc4879b8f206', ], - id: '66870fa27b22c361094ff2d72a794b3d7e531c02a488271c38d02180c05e3c69', + params: { + amount: '1000000000000', + recipientAddress: 'lskv6v53emsaen6cwbbk226wusdpa6ojdonunka4x', + data: '', + tokenID: '0400000000000000', + }, + id: 'd96c777b67576ddf4cd933a97a60b4311881e68e3c8bef1393ac0020ec8a506c', }); const decodedTransaction = Object.freeze({ module: 'token', command: 'transfer', - nonce: '0', fee: '100000000', + nonce: '1', senderPublicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', + signatures: [ + 'c7fd1abf9a552fa9c91b4121c87ae2c97cb0fc0aecc87d0ee8b1aa742238eef4a6815ddba31e21144c9652a7bd5c05577ae1100eac34fba43da6fc4879b8f206', + ], params: { tokenID: '0400000000000000', - amount: '10000000000', - recipientAddress: 'lskz4upsnrwk75wmfurf6kbxsne2nkjqd3yzwdaup', - data: 'Test tx', - accountInitializationFee: '5000000', + amount: '1000000000000', + recipientAddress: 'lskv6v53emsaen6cwbbk226wusdpa6ojdonunka4x', + data: '', }, - signatures: [ - 'a7e332b49db6d36c1024a24afbfd6eec2451e41c1cf751a8c609863ffa3e529ef4b8a34cecff29e9fa4bf30de4ce26f58c5d8a06587582a9129a6765064d3404', - ], - id: '66870fa27b22c361094ff2d72a794b3d7e531c02a488271c38d02180c05e3c69', - size: 178, - minFee: '177000', + id: 'd96c777b67576ddf4cd933a97a60b4311881e68e3c8bef1393ac0020ec8a506c', + size: 167, + minFee: '166000', }); const invalidTransaction = Object.freeze({ @@ -61,9 +65,11 @@ const invalidTransaction = Object.freeze({ id: 'a6ba9d89d8e57bc921dd56417313a01fa7834f12cdbcebdfda58c7b385397d96', }); -const encodedTransaction = '0a05746f6b656e12087472616e7366657218002080c2d72f2a203972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c32340a0804000000000000001080c8afa0251a1402604d9e57a39772fa12f2a860ecf6c1e9cae91122075465737420747828c096b1023a40a7e332b49db6d36c1024a24afbfd6eec2451e41c1cf751a8c609863ffa3e529ef4b8a34cecff29e9fa4bf30de4ce26f58c5d8a06587582a9129a6765064d3404'; +const encodedTransaction = + '0a05746f6b656e12087472616e7366657218012080c2d72f2a203972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c32290a0804000000000000001080a094a58d1d1a141284b458bbcd8ea1dcc6a630abc37a2654ce698722003a40c7fd1abf9a552fa9c91b4121c87ae2c97cb0fc0aecc87d0ee8b1aa742238eef4a6815ddba31e21144c9652a7bd5c05577ae1100eac34fba43da6fc4879b8f206'; -const invalidEncodedTransaction = '08021000180420c09a0c2a2041e9303d6e871e066f58f4900422b802cf98ee9035a070f92baa1aa7b55728a8321e08ad9ddce602121460db70ee3f962d518096127ed73b8b8ac9441a281a003a40fb02e7a125d20909a449be226cb8f7cc17085b98414584e3422d3405bd83d0dc0aa108ecaf1af01825dbbb632d85bf6bd0f7bbbc9fd81519485679dda78f7006'; +const invalidEncodedTransaction = + '08021000180420c09a0c2a2041e9303d6e871e066f58f4900422b802cf98ee9035a070f92baa1aa7b55728a8321e08ad9ddce602121460db70ee3f962d518096127ed73b8b8ac9441a281a003a40fb02e7a125d20909a449be226cb8f7cc17085b98414584e3422d3405bd83d0dc0aa108ecaf1af01825dbbb632d85bf6bd0f7bbbc9fd81519485679dda78f7006'; module.exports = { transaction, diff --git a/services/blockchain-connector/tests/functional/download.test.js b/services/blockchain-connector/tests/functional/download.test.js index 856bef297..bbe0e3045 100644 --- a/services/blockchain-connector/tests/functional/download.test.js +++ b/services/blockchain-connector/tests/functional/download.test.js @@ -44,12 +44,13 @@ describe('Functional tests for download utility', () => { }); describe('Test downloadAndExtractTarball method', () => { - const [{ genesisBlockUrl }] = config.networks.LISK.filter(network => network.name === 'testnet'); - xit('should download and extract tar file -> valid url', async () => { + const [{ genesisBlockUrl }] = config.networks.LISK.filter( + network => network.name === 'testnet', + ); + it('should download and extract tar file -> valid url', async () => { const filePath = `${testDir}/genesis_block.json`; expect(exists(filePath)).resolves.toBe(false); - await downloadAndExtractTarball(genesisBlockUrl, testDir); - expect(exists(filePath)).resolves.toBe(true); + expect(downloadAndExtractTarball(genesisBlockUrl, testDir)).resolves.toBe(undefined); }); it('should throw error -> invalid url', async () => { @@ -71,8 +72,9 @@ describe('Functional tests for download utility', () => { }); describe('Test downloadJSONFile method', () => { - xit('should download JSON file -> valid url', async () => { - const url = 'https://raw.githubusercontent.com/LiskHQ/lisk-service/development/services/gateway/apis/http-version3/swagger/apiJson.json'; + it('should download JSON file -> valid url', async () => { + const url = + 'https://raw.githubusercontent.com/LiskHQ/lisk-service/development/services/gateway/apis/http-version3/swagger/apiJson.json'; const filePath = `${testDir}/apiJson.json`; expect(exists(filePath)).resolves.toBe(false); await downloadJSONFile(url, filePath); @@ -80,8 +82,8 @@ describe('Functional tests for download utility', () => { }); it('should throw error -> invalid url', async () => { - const url = 'https://downloads.lisk.com/lisk/testnet/genesis_block.json'; - const filePath = `${testDir}/genesis_block.json`; + const url = 'invalid-url'; + const filePath = `${testDir}/block.json`; expect(downloadJSONFile(url, filePath)).rejects.toThrow(); }); @@ -102,8 +104,10 @@ describe('Functional tests for download utility', () => { }); describe('Test downloadAndUnzipFile method', () => { - xit('should download and unzip file -> valid url', async () => { - const [{ genesisBlockUrl }] = config.networks.LISK.filter(network => network.name === 'testnet'); + it('should download and unzip file -> valid url', async () => { + const [{ genesisBlockUrl }] = config.networks.LISK.filter( + network => network.name === 'testnet', + ); const filePath = `${testDir}/genesis_block.json`; expect(exists(filePath)).resolves.toBe(false); await downloadAndUnzipFile(genesisBlockUrl, filePath); @@ -134,7 +138,8 @@ describe('Functional tests for download utility', () => { describe('Test downloadFile method', () => { it('should download file -> valid url', async () => { - const url = 'https://raw.githubusercontent.com/LiskHQ/lisk-service/development/services/gateway/apis/http-version3/swagger/apiJson.json'; + const url = + 'https://raw.githubusercontent.com/LiskHQ/lisk-service/development/services/gateway/apis/http-version3/swagger/apiJson.json'; const filePath = `${testDir}/apiJson.json`; expect(exists(filePath)).resolves.toBe(false); await downloadFile(url, testDir); diff --git a/services/blockchain-connector/tests/functional/encoder.test.js b/services/blockchain-connector/tests/functional/encoder.test.js index 4efe13268..10a999e20 100644 --- a/services/blockchain-connector/tests/functional/encoder.test.js +++ b/services/blockchain-connector/tests/functional/encoder.test.js @@ -15,9 +15,7 @@ */ const { ServiceBroker } = require('moleculer'); -const { - invalidBlock, -} = require('../constants/blocks'); +const { invalidBlock } = require('../constants/blocks'); const { decodedTransaction, @@ -25,11 +23,7 @@ const { encodedTransaction, } = require('../constants/transactions'); -const { - decodedCCM, - encodedCCM, - invalidCCM, -} = require('../constants/ccm'); +const { decodedCCM, encodedCCM, invalidCCM } = require('../constants/ccm'); const config = require('../../config'); @@ -43,15 +37,19 @@ const broker = new ServiceBroker({ beforeAll(() => broker.start()); afterAll(() => broker.stop()); -xdescribe('Encode transaction', () => { +describe('Encode transaction', () => { it('should encode transaction', async () => { - const result = await broker.call('connector.encodeTransaction', { transaction: decodedTransaction }); + const result = await broker.call('connector.encodeTransaction', { + transaction: decodedTransaction, + }); expect(typeof result).toBe('string'); expect(result).toEqual(encodedTransaction); }); it('should throw error when encoding invalid transaction', async () => { - expect(broker.call('connector.encodeTransaction', { transaction: invalidTransaction })).rejects.toThrow(); + expect( + broker.call('connector.encodeTransaction', { transaction: invalidTransaction }), + ).rejects.toThrow(); }); it('should throw error when encoding invalid block', async () => { diff --git a/services/blockchain-connector/tests/functional/formatter.test.js b/services/blockchain-connector/tests/functional/formatter.test.js index 8b758c823..30bc7cb50 100644 --- a/services/blockchain-connector/tests/functional/formatter.test.js +++ b/services/blockchain-connector/tests/functional/formatter.test.js @@ -24,15 +24,9 @@ const { invalidEncodedTransaction, } = require('../constants/blocks'); -const { - transaction, - decodedTransaction, -} = require('../constants/transactions'); +const { transaction, decodedTransaction } = require('../constants/transactions'); -const { - decodedTransferEvent, - transferEventInput, -} = require('../constants/events'); +const { decodedTransferEvent, transferEventInput } = require('../constants/events'); const config = require('../../config'); @@ -43,17 +37,17 @@ const broker = new ServiceBroker({ logger: console, }); -xdescribe('Functional tests for formatter', () => { +describe('Functional tests for formatter', () => { beforeAll(() => broker.start()); afterAll(() => broker.stop()); - it('format Transaction', async () => { + it('should format Transaction', async () => { const result = await broker.call('connector.formatTransaction', { transaction }); expect(Object.keys(result)).toEqual(Object.keys(decodedTransaction)); expect(result).toMatchObject(decodedTransaction); }); - it('format block with transaction', async () => { + it('should format block with transaction', async () => { const result = await broker.call('connector.formatBlock', { block: blockWithTransaction }); expect(result).toMatchObject({ header: expect.any(Object), @@ -63,14 +57,16 @@ xdescribe('Functional tests for formatter', () => { expect(result.transactions.length).toBe(1); expect(Object.keys(result.header)).toEqual(Object.keys(decodedBlockWithTransaction.header)); - expect(Object.keys(result.assets[0])) - .toEqual(Object.keys(decodedBlockWithTransaction.assets[0])); - expect(Object.keys(result.transactions[0])) - .toEqual(Object.keys(decodedBlockWithTransaction.transactions[0])); + expect(Object.keys(result.assets[0])).toEqual( + Object.keys(decodedBlockWithTransaction.assets[0]), + ); + expect(Object.keys(result.transactions[0])).toEqual( + Object.keys(decodedBlockWithTransaction.transactions[0]), + ); expect(result).toMatchObject(decodedBlockWithTransaction); }); - it('format block without transactions', async () => { + it('should format block without transactions', async () => { const result = await broker.call('connector.formatBlock', { block: blockWithoutTransaction }); expect(result).toMatchObject({ header: expect.any(Object), @@ -78,13 +74,22 @@ xdescribe('Functional tests for formatter', () => { transactions: expect.any(Object), }); expect(Object.keys(result.header)).toEqual(Object.keys(decodedBlockWithoutTransaction.header)); - expect(Object.keys(result.assets[0])) - .toEqual(Object.keys(decodedBlockWithoutTransaction.assets[0])); + expect(Object.keys(result.assets[0])).toEqual( + Object.keys(decodedBlockWithoutTransaction.assets[0]), + ); expect(result.transactions.length).toBe(0); expect(result).toMatchObject(decodedBlockWithoutTransaction); }); - it('format badge event payload', async () => { + it('should format subscription event payload of block without transaction', async () => { + const result = await broker.call('connector.formatAPIClientEventPayload', { + eventName: 'app_newBlock', + payload: { block: blockWithoutTransaction }, + }); + expect(result).toMatchObject(decodedBlockWithoutTransaction); + }); + + it('should format subscription event payload of block with transaction', async () => { const result = await broker.call('connector.formatAPIClientEventPayload', { eventName: 'app_newBlock', payload: { block: blockWithTransaction }, @@ -92,14 +97,22 @@ xdescribe('Functional tests for formatter', () => { expect(result).toMatchObject(decodedBlockWithTransaction); }); - it('format event payload for token:transferEvent', async () => { + it('should format event payload for token:transferEvent', async () => { const result = await broker.call('connector.formatEvent', { event: transferEventInput, }); expect(result).toMatchObject(decodedTransferEvent); }); - it('format response', async () => { + it('should format response when requested with block without transaction', async () => { + const result = await broker.call('connector.formatResponse', { + endpoint: 'app_getBlockByHeight', + response: blockWithoutTransaction, + }); + expect(result).toMatchObject(decodedBlockWithoutTransaction); + }); + + it('should format response when requested with block with transaction', async () => { const result = await broker.call('connector.formatResponse', { endpoint: 'app_getBlockByHeight', response: blockWithTransaction, @@ -107,11 +120,13 @@ xdescribe('Functional tests for formatter', () => { expect(result).toMatchObject(decodedBlockWithTransaction); }); - it('throws error when decoding invalid encoded transaction', async () => { - expect(broker.call('connector.formatTransaction', { encodedTransaction: invalidEncodedTransaction })).rejects.toThrow(); + it('should throw error when decoding invalid encoded transaction', async () => { + expect( + broker.call('connector.formatTransaction', { encodedTransaction: invalidEncodedTransaction }), + ).rejects.toThrow(); }); - it('throws error when decoding invalid encoded block', async () => { + it('should throw error when decoding invalid encoded block', async () => { expect(broker.call('connector.formatBlock', { block: invalidEncodedBlock })).rejects.toThrow(); }); }); diff --git a/services/blockchain-connector/tests/functional/fs.test.js b/services/blockchain-connector/tests/functional/fs.test.js index b7333340f..b0714b7bc 100644 --- a/services/blockchain-connector/tests/functional/fs.test.js +++ b/services/blockchain-connector/tests/functional/fs.test.js @@ -15,13 +15,7 @@ */ const { resolve, dirname } = require('path'); -const { - exists, - extractTarBall, - mkdir, - read, - rm, -} = require('../../shared/utils/fs'); +const { exists, extractTarBall, mkdir, read, rm } = require('../../shared/utils/fs'); const { genesisBlock } = require('../constants/blocks'); @@ -50,7 +44,7 @@ describe('Tests filesystem utilities', () => { }); describe('Test extractTarBall method', () => { - xit('should extract tar file', async () => { + it('should extract tar file', async () => { const outputPath = `${testDir}/genesis_block.json`; expect(exists(outputPath)).resolves.toBe(false); @@ -90,7 +84,7 @@ describe('Tests filesystem utilities', () => { }); describe('Test read method', () => { - xit('should read data from file', async () => { + it('should read data from file', async () => { expect(exists(JsonfilePath)).resolves.toBe(true); // Read data from file const result = await read(JsonfilePath); diff --git a/services/blockchain-connector/tests/functional/genesisBlock.test.js b/services/blockchain-connector/tests/functional/genesisBlock.test.js index 9a6f9f653..4ea8c6bf6 100644 --- a/services/blockchain-connector/tests/functional/genesisBlock.test.js +++ b/services/blockchain-connector/tests/functional/genesisBlock.test.js @@ -39,7 +39,9 @@ describe('Genesis Block import tests', () => { xit('Verify if genesis block is downloaded successfully', async () => { const { chainID } = await broker.call('connector.getNetworkStatus'); - genesisBlockFilePath = path.resolve(`${__dirname}/../../data/${chainID}/genesis_block.json.tar.gz`); + genesisBlockFilePath = path.resolve( + `${__dirname}/../../data/${chainID}/genesis_block.json.tar.gz`, + ); const isExists = await exists(genesisBlockFilePath); expect(isExists).toBe(true); @@ -50,28 +52,35 @@ describe('Genesis Block import tests', () => { const isExists = await exists(genesisBlockSHAFilePath); expect(isExists).toBe(true); - const expectedHash = (fs.readFileSync(genesisBlockSHAFilePath, 'utf8')).split(' ')[0]; + const expectedHash = fs.readFileSync(genesisBlockSHAFilePath, 'utf8').split(' ')[0]; const fileStream = fs.createReadStream(genesisBlockFilePath); const dataHash = crypto.createHash('sha256'); const fileHash = await new Promise(resolve => { - fileStream.on('data', (data) => { dataHash.update(data); }); - fileStream.on('end', () => { resolve(dataHash.digest().toString('hex')); }); + fileStream.on('data', data => { + dataHash.update(data); + }); + fileStream.on('end', () => { + resolve(dataHash.digest().toString('hex')); + }); }); expect(expectedHash).toEqual(fileHash); }); }); -xdescribe('Test getGenesisAssets method', () => { +describe('Test getGenesisAssets method', () => { it('should return token module data when called with module:token', async () => { const response = await broker.call('connector.getGenesisAssetByModule', { module: moduleName }); expect(Object.keys(response).length).toBe(4); }); it('should return token module userSubstore data when called with module:token and subStore:userSubstore', async () => { - const response = await broker.call('connector.getGenesisAssetByModule', { module: moduleName, subStore: subStoreName }); + const response = await broker.call('connector.getGenesisAssetByModule', { + module: moduleName, + subStore: subStoreName, + }); expect(Object.keys(response).length).toBe(1); expect(Object.keys(response)[0]).toBe(subStoreName); expect(response[subStoreName].length).toBeGreaterThan(1); @@ -79,7 +88,12 @@ xdescribe('Test getGenesisAssets method', () => { it('should return token module userSubstore data when called with module:token, subStore:userSubstore, offset:0, limit: 10', async () => { const limit = 10; - const response = await broker.call('connector.getGenesisAssetByModule', { module: moduleName, subStore: subStoreName, offset: 0, limit }); + const response = await broker.call('connector.getGenesisAssetByModule', { + module: moduleName, + subStore: subStoreName, + offset: 0, + limit, + }); expect(Object.keys(response).length).toBe(1); expect(Object.keys(response)[0]).toBe(subStoreName); expect(response[subStoreName].length).toBeGreaterThanOrEqual(1); @@ -87,7 +101,7 @@ xdescribe('Test getGenesisAssets method', () => { }); }); -xdescribe('Test getGenesisAssetsLength method', () => { +describe('Test getGenesisAssetsLength method', () => { it('should return all modules when called without any params', async () => { const response = await broker.call('connector.getGenesisAssetsLength'); expect(Object.keys(response).length).toBeGreaterThan(1); @@ -100,7 +114,10 @@ xdescribe('Test getGenesisAssetsLength method', () => { }); it('should return token module userSubstore length when called with module:token and subStore:userSubstore', async () => { - const response = await broker.call('connector.getGenesisAssetsLength', { module: moduleName, subStore: subStoreName }); + const response = await broker.call('connector.getGenesisAssetsLength', { + module: moduleName, + subStore: subStoreName, + }); expect(Object.keys(response).length).toBe(1); expect(Object.keys(response)[0]).toBe(moduleName); expect(Object.keys(response[moduleName])[0]).toBe(subStoreName); diff --git a/services/blockchain-connector/tests/unit/delay.test.js b/services/blockchain-connector/tests/unit/delay.test.js index 2bf960d67..eb77da03a 100644 --- a/services/blockchain-connector/tests/unit/delay.test.js +++ b/services/blockchain-connector/tests/unit/delay.test.js @@ -30,6 +30,6 @@ describe('Test delay method', () => { await delay(delayMs); const endTime = Date.now(); const millisDifference = endTime - startTime; - expect(millisDifference).toBeGreaterThanOrEqual(delayMs); + expect(millisDifference).toBeGreaterThanOrEqual(delayMs - 1); }); }); diff --git a/services/blockchain-connector/tests/unit/download.test.js b/services/blockchain-connector/tests/unit/download.test.js index c7f71a895..caaa8a2bb 100644 --- a/services/blockchain-connector/tests/unit/download.test.js +++ b/services/blockchain-connector/tests/unit/download.test.js @@ -18,7 +18,9 @@ const { verifyFileChecksum } = require('../../shared/utils/download'); const genesisBlockFilePath = resolve(`${dirname(__dirname)}/constants/genesis_block.json`); const checksumFilePath = resolve(`${dirname(__dirname)}/constants/genesis_block.json.SHA256`); -const invalidChecksumFilePath = resolve(`${dirname(__dirname)}/constants/invalid_genesis_block.json.SHA256`); +const invalidChecksumFilePath = resolve( + `${dirname(__dirname)}/constants/invalid_genesis_block.json.SHA256`, +); describe('Test verifyFileChecksum method', () => { it('should return true in case of valid checksum', async () => { diff --git a/services/blockchain-connector/tests/unit/parser.test.js b/services/blockchain-connector/tests/unit/parser.test.js index 27061893b..0d7982f8f 100644 --- a/services/blockchain-connector/tests/unit/parser.test.js +++ b/services/blockchain-connector/tests/unit/parser.test.js @@ -13,10 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - parseToJSONCompatObj, - parseInputBySchema, -} = require('../../shared/utils/parser'); +const { parseToJSONCompatObj, parseInputBySchema } = require('../../shared/utils/parser'); const { liskAccount, @@ -31,16 +28,25 @@ const { describe('Unit tests for parse utilities', () => { describe('parseToJSONCompatObj', () => { it('should parse buffer', async () => { - const bufferData = Buffer.from('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'hex'); + const bufferData = Buffer.from( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + 'hex', + ); const parsedResult = parseToJSONCompatObj(bufferData); expect(typeof parsedResult).toBe('string'); - expect(parsedResult).toEqual('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'); + expect(parsedResult).toEqual( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + ); }); it('should parse string', async () => { - const parsedResult = parseToJSONCompatObj('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'); + const parsedResult = parseToJSONCompatObj( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + ); expect(typeof parsedResult).toBe('string'); - expect(parsedResult).toEqual('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'); + expect(parsedResult).toEqual( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + ); }); it('should parse number', async () => { @@ -85,11 +91,13 @@ describe('Unit tests for parse utilities', () => { }); it('should parse array of object', async () => { - const data = [{ - delegateAddress: Buffer.from('8a9494ab112fb99ffd0ae8b653c4ed4e27f87fcb', 'hex'), - amount: BigInt(2000000000), - unvoteHeight: 934107, - }]; + const data = [ + { + delegateAddress: Buffer.from('8a9494ab112fb99ffd0ae8b653c4ed4e27f87fcb', 'hex'), + amount: BigInt(2000000000), + unvoteHeight: 934107, + }, + ]; const parsedResult = parseToJSONCompatObj(data); expect(parsedResult).toBeInstanceOf(Array); expect(parsedResult[0]).toMatchObject({ diff --git a/services/blockchain-connector/tests/unit/waitForIt.test.js b/services/blockchain-connector/tests/unit/waitForIt.test.js deleted file mode 100644 index a1f69c945..000000000 --- a/services/blockchain-connector/tests/unit/waitForIt.test.js +++ /dev/null @@ -1,68 +0,0 @@ -/* - * LiskHQ/lisk-service - * Copyright © 2023 Lisk Foundation - * - * See the LICENSE file at the top-level directory of this distribution - * for licensing information. - * - * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, - * no part of this software, including this file, may be copied, modified, - * propagated, or distributed except according to the terms contained in the - * LICENSE file. - * - * Removal or modification of this copyright notice is prohibited. - * - */ -const delay = require('../../shared/utils/delay'); -const waitForIt = require('../../shared/utils/waitForIt'); - -let testValue = false; - -describe('Test waitForIt method', () => { - it('should wait for the function to return response', async () => { - const testFn = () => testValue = true; - expect(testValue).toBe(false); - await waitForIt(testFn); - expect(testValue).toBe(true); - }); - - it('should wait for the test function to return response with delay of 1000ms', async () => { - const delayMs = 1000; - const testFn = async () => { - await delay(delayMs); - return true; - }; - const startTime = Date.now(); - await waitForIt(testFn); - const endTime = Date.now(); - const millisDifference = endTime - startTime; - expect(millisDifference).toBeGreaterThanOrEqual(delayMs); - }); - - it('should wait for the mocked function to return response', async () => { - const testFn = jest.fn().mockReturnValue(true); - - expect(testFn).toHaveBeenCalledTimes(0); - await waitForIt(testFn); - expect(testFn).toHaveBeenCalledTimes(1); - await waitForIt(testFn); - expect(testFn).toHaveBeenCalledTimes(2); - }); - - it('should throw error when passing invalid function', async () => { - const testFn = 'invalid'; - expect(waitForIt(testFn)).rejects.toThrow(); - }); - - it('should throw error when passing function as null', async () => { - expect(waitForIt(null)).rejects.toThrow(); - }); - - it('should throw error when passing function as undefined', async () => { - expect(waitForIt(undefined)).rejects.toThrow(); - }); - - it('should throw error when passing function as empty string', async () => { - expect(waitForIt('')).rejects.toThrow(); - }); -}); diff --git a/services/blockchain-connector/yarn.lock b/services/blockchain-connector/yarn.lock index 4df340c27..4eec1c369 100644 --- a/services/blockchain-connector/yarn.lock +++ b/services/blockchain-connector/yarn.lock @@ -4,109 +4,109 @@ "@ampproject/remapping@^2.2.0": version "2.2.1" - resolved "https://npm.lisk.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://npm.lisk.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://npm.lisk.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" - resolved "https://npm.lisk.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" - resolved "https://npm.lisk.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953" + integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" - resolved "https://npm.lisk.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://npm.lisk.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -114,14 +114,14 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" - resolved "https://npm.lisk.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== "@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": version "7.23.0" - resolved "https://npm.lisk.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: "@babel/template" "^7.22.15" @@ -129,29 +129,29 @@ "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" - resolved "https://npm.lisk.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" - resolved "https://npm.lisk.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.22.15": version "7.22.15" - resolved "https://npm.lisk.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -161,28 +161,28 @@ "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" - resolved "https://npm.lisk.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: "@babel/types" "^7.22.5" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" - resolved "https://npm.lisk.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" - resolved "https://npm.lisk.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" - resolved "https://npm.lisk.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" @@ -191,641 +191,658 @@ "@babel/helper-simple-access@^7.22.5": version "7.22.5" - resolved "https://npm.lisk.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: "@babel/types" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": version "7.22.5" - resolved "https://npm.lisk.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: "@babel/types" "^7.22.5" "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" - resolved "https://npm.lisk.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" - resolved "https://npm.lisk.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" - resolved "https://npm.lisk.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== dependencies: "@babel/helper-function-name" "^7.22.5" "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://npm.lisk.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://npm.lisk.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" + integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" - resolved "https://npm.lisk.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://npm.lisk.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" - resolved "https://npm.lisk.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" - resolved "https://npm.lisk.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://npm.lisk.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "https://npm.lisk.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://npm.lisk.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" - resolved "https://npm.lisk.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://npm.lisk.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" - resolved "https://npm.lisk.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://npm.lisk.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" - resolved "https://npm.lisk.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://npm.lisk.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://npm.lisk.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://npm.lisk.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://npm.lisk.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" - resolved "https://npm.lisk.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" - resolved "https://npm.lisk.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" + integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://npm.lisk.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" + integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://npm.lisk.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://npm.lisk.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://npm.lisk.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://npm.lisk.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://npm.lisk.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://npm.lisk.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://npm.lisk.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://npm.lisk.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://npm.lisk.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://npm.lisk.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://npm.lisk.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://npm.lisk.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.14.0": - version "7.22.20" - resolved "https://npm.lisk.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a" + integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ== dependencies: - "@babel/compat-data" "^7.22.20" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -837,65 +854,64 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" core-js-compat "^3.31.0" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" - resolved "https://npm.lisk.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -904,65 +920,70 @@ "@babel/regjsgen@^0.8.0": version "0.8.0" - resolved "https://npm.lisk.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.8.4": - version "7.23.1" - resolved "https://npm.lisk.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" + integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": +"@babel/template@^7.22.15", "@babel/template@^7.3.3": version "7.22.15" - resolved "https://npm.lisk.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: "@babel/code-frame" "^7.22.13" "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://npm.lisk.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "https://npm.lisk.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@fastify/busboy@^1.0.0": version "1.2.1" - resolved "https://npm.lisk.com/@fastify/busboy/-/busboy-1.2.1.tgz#9c6db24a55f8b803b5222753b24fe3aea2ba9ca3" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-1.2.1.tgz#9c6db24a55f8b803b5222753b24fe3aea2ba9ca3" integrity sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q== dependencies: text-decoding "^1.0.0" +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "@ioredis/commands@^1.1.1": version "1.2.0" - resolved "https://npm.lisk.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== "@isaacs/cliui@^8.0.2": @@ -979,7 +1000,7 @@ "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://npm.lisk.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -990,149 +1011,171 @@ "@istanbuljs/schema@^0.1.2": version "0.1.3" - resolved "https://npm.lisk.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://npm.lisk.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://npm.lisk.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://npm.lisk.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://npm.lisk.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://npm.lisk.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://npm.lisk.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://npm.lisk.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://npm.lisk.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://npm.lisk.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" "@jest/transform@^27.5.1": version "27.5.1" - resolved "https://npm.lisk.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== dependencies: "@babel/core" "^7.1.0" @@ -1151,9 +1194,30 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + "@jest/types@^27.5.1": version "27.5.1" - resolved "https://npm.lisk.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" @@ -1162,9 +1226,21 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" - resolved "https://npm.lisk.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" @@ -1173,95 +1249,135 @@ "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" - resolved "https://npm.lisk.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://npm.lisk.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" - resolved "https://npm.lisk.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://npm.lisk.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://npm.lisk.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" -"@liskhq/lisk-api-client@6.0.0-rc.1": - version "6.0.0-rc.1" - resolved "https://npm.lisk.com/@liskhq/lisk-api-client/-/lisk-api-client-6.0.0-rc.1.tgz#b0611b7b8f76369f5de499a63118fb1085da23a8" - integrity sha512-sZ59KXjTLUSSeAgx4JSCBRy6E2CaPXkJSeQRIWwfgw5nUw/q1VYGqbtxrMwo8WhRuMqg4X1uHy4HaBQIeftGjw== +"@liskhq/lisk-api-client@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-api-client/-/lisk-api-client-6.0.1.tgz#5b78a48c3c98b047391e07114eb05887709a6f85" + integrity sha512-eyyZz0ZAUiGKCX9armNkEpYVmb/yz2JhKL6OygDUtbPO7X7V6Ofu7XH+mBoPdtPEyNhi59idSnJuOclpZ5kWtw== dependencies: - "@liskhq/lisk-codec" "^0.4.0-rc.1" - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" - "@liskhq/lisk-transactions" "^6.0.0-rc.1" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-codec" "^0.4.0" + "@liskhq/lisk-cryptography" "^4.0.0" + "@liskhq/lisk-transactions" "^6.0.0" + "@liskhq/lisk-validator" "^0.8.0" isomorphic-ws "4.0.1" ws "8.11.0" zeromq "6.0.0-beta.6" -"@liskhq/lisk-codec@0.4.0-rc.1", "@liskhq/lisk-codec@^0.4.0-rc.1": - version "0.4.0-rc.1" - resolved "https://npm.lisk.com/@liskhq/lisk-codec/-/lisk-codec-0.4.0-rc.1.tgz#fbffec74bd54efb820758cc00ca9737d913b452e" - integrity sha512-o5vPFhh2siETT9lDWu+ZJo/Ni5/EYtvUoi3k1kWaJ/X6YF03J4L2GZoRVzZKnXPMPuUDJyT131gUjM0Z3BPgSA== +"@liskhq/lisk-codec@0.4.0", "@liskhq/lisk-codec@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-codec/-/lisk-codec-0.4.0.tgz#0b512f7bc835f921d728ead04d498b1a7a647cd1" + integrity sha512-03mgvftrWK5KfjBl/VSceEBtcr2wA4NLGnuBsoxKiwL/Bolfd1f3rdXbQgUKzeY4UJEoDGHN6jRPbXLHH/yUnw== dependencies: - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" - "@liskhq/lisk-utils" "^0.4.0-rc.0" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-cryptography" "^4.0.0" + "@liskhq/lisk-utils" "^0.4.0" + "@liskhq/lisk-validator" "^0.8.0" -"@liskhq/lisk-cryptography@4.0.0-rc.1", "@liskhq/lisk-cryptography@^4.0.0-rc.1": - version "4.0.0-rc.1" - resolved "https://npm.lisk.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0-rc.1.tgz#b8df408aa1a94362091eda06b0a38577e4db5ead" - integrity sha512-e9ubCGSi8OzOJ21i8Mlc7Zsu+b2ofMGsC0QegzhQSf9Vf5+qAk2CHUR0X/+kT8wvSIpN6krfbz81sfzDPq/PBQ== +"@liskhq/lisk-codec@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-codec/-/lisk-codec-0.5.0.tgz#39ae557c30d2cc11b449f6db34054928fcf98e78" + integrity sha512-IW8s3s1JvHZMx2SmMh8MJyUE7D9gJGJyJq5s8xxWik4IOTN/zRdNFK2m1qIgL+6T8SchEKS4P8r/Xpnl5KUeiw== + dependencies: + "@liskhq/lisk-cryptography" "^4.1.0" + "@liskhq/lisk-utils" "^0.4.0" + "@liskhq/lisk-validator" "^0.9.0" + +"@liskhq/lisk-cryptography@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0.tgz#f8752053f5512a6257a6b59a9ae45567e4ff5053" + integrity sha512-246hoey+sKx0/2GrECXfsjTmhv5PaD0z/vYpV1zTL4qPOHaDNqbKsSLg/uAt2OfM7et1KoG76jpYzaiifqCJiw== dependencies: - "@liskhq/lisk-passphrase" "^4.0.0-rc.0" + "@liskhq/lisk-passphrase" "^4.0.0" buffer-reverse "1.0.1" hash-wasm "4.9.0" tweetnacl "1.0.3" -"@liskhq/lisk-passphrase@^4.0.0-rc.0": - version "4.0.0-rc.0" - resolved "https://npm.lisk.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.0.0-rc.0.tgz#78fe583229c96d76258906375e34ff84a413be05" - integrity sha512-m87nhvUpOlSLr5NRV2M4INtg0IjjFF7Bte96Iq6X1dhzOjlmPg/QUQa7MFUzQu3NEWWHnpwON8QQK1FUE6ixYw== +"@liskhq/lisk-cryptography@^4.0.0", "@liskhq/lisk-cryptography@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.1.0.tgz#8621bcb61008adb5faee4d148a91e1da068ab3cc" + integrity sha512-5//E14nlqyvOE21uwB8zCCYe0JmeEVCQ6gg/TjboKYEct/OX0GkK5gyb6tqJr8ApaQxRaL5WqPt2VOwxf564VA== + dependencies: + "@liskhq/lisk-passphrase" "^4.1.0" + buffer-reverse "1.0.1" + hash-wasm "4.9.0" + tweetnacl "1.0.3" + +"@liskhq/lisk-passphrase@^4.0.0", "@liskhq/lisk-passphrase@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.1.0.tgz#d9a72a9c9d4cdb557a25b84bffe73d579155f723" + integrity sha512-1VdpEp+OGiyCF0Fjtgcc+SLlHeIflzya49GzIXcXjFNf19VgkUu/eIDM8XHxSdj/5KzpL+yD07OYCh+LdoAkfA== dependencies: bip39 "3.0.3" -"@liskhq/lisk-transactions@6.0.0-rc.1", "@liskhq/lisk-transactions@^6.0.0-rc.1": - version "6.0.0-rc.1" - resolved "https://npm.lisk.com/@liskhq/lisk-transactions/-/lisk-transactions-6.0.0-rc.1.tgz#4d4583487ae778aac8ffcb622227da99ef5940b7" - integrity sha512-zfgdkS0ySaiSK4j7NNcrXqatk2gViTvBqjFBgGviqA4xUlSZWFaHYIgRzxkOKvDT1EsA5YUk2Z2ARj5xMZVvzw== +"@liskhq/lisk-transactions@6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-transactions/-/lisk-transactions-6.0.0.tgz#6bcd43b1cd3a7787f98fe41d1abd8ed26c180e7b" + integrity sha512-HnvPxtoglIR1qHohIXg7K9HCiU0naMcz2+wZUH1jwgDwugCNaypLSTNat1dI7/5MHn8MpohHun0a1tWmJZYH/A== dependencies: - "@liskhq/lisk-codec" "^0.4.0-rc.1" - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-codec" "^0.4.0" + "@liskhq/lisk-cryptography" "^4.0.0" + "@liskhq/lisk-validator" "^0.8.0" -"@liskhq/lisk-utils@^0.4.0-rc.0": - version "0.4.0-rc.0" - resolved "https://npm.lisk.com/@liskhq/lisk-utils/-/lisk-utils-0.4.0-rc.0.tgz#6337e1d7e8ca766bbc7ea07408eaf34b2e51bd93" - integrity sha512-oMTRwkWWBNqZABXQTFxvo6L/vyAeYka9MlNGNZE7ObaAO8JjxHRukQDZAX36+NcrvREsp1yNQF8YW1xFs+XIvg== +"@liskhq/lisk-transactions@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-transactions/-/lisk-transactions-6.1.0.tgz#4225151b11fb1c1c272d8d01566f3ef45470d450" + integrity sha512-v3DS2O7mSDHMqRRI8ilgFaizjH9zZ/PDBdiMviAzJ16ZPCqqYJ7Dwm6Blp7fAOPCgLwRJTVwLNCgeFiMYjo6Kg== + dependencies: + "@liskhq/lisk-codec" "^0.5.0" + "@liskhq/lisk-cryptography" "^4.1.0" + "@liskhq/lisk-validator" "^0.9.0" + +"@liskhq/lisk-utils@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-utils/-/lisk-utils-0.4.0.tgz#84a8281d6f1db0605e286fcc41721965df474a71" + integrity sha512-rzZZrh36GVSqB65Y4LjaZIe2AVLUH8zXNDNBX0MXM7pI5BhBesDmDpVS2qVLoF7lhyBmUPk9SrARI0wK9/+z9g== dependencies: lodash.clonedeep "4.5.0" -"@liskhq/lisk-validator@0.8.0-rc.1", "@liskhq/lisk-validator@^0.8.0-rc.1": - version "0.8.0-rc.1" - resolved "https://npm.lisk.com/@liskhq/lisk-validator/-/lisk-validator-0.8.0-rc.1.tgz#f723bd1667e61c4c5bec680343342c1f8191ff67" - integrity sha512-gLFa+5scCVPWc6cZEx5cALx6gRmF51xH/Szg7YeWi6uJkcQBSlT3ephvAUEVOWcRQ4SL7XadM/vWE0wXvoqqeA== +"@liskhq/lisk-validator@0.8.0", "@liskhq/lisk-validator@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-validator/-/lisk-validator-0.8.0.tgz#af62c4ef9cc71b2bd696eb70dca89ca7411c96c3" + integrity sha512-aChkjwuwBBzvDIQhyCRozOvQ0fTWjzAOLZJi3i53+1op6J3f6LZYG6ffA6q/x6W1/tQbApSoc2GJWrSCjmFpFw== dependencies: - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" + "@liskhq/lisk-cryptography" "^4.0.0" + ajv "8.1.0" + ajv-formats "2.1.1" + debug "4.3.4" + semver "7.5.2" + validator "13.7.0" + +"@liskhq/lisk-validator@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-validator/-/lisk-validator-0.9.0.tgz#2dc6a4627accab44d4393302b527ac8d2244e94f" + integrity sha512-47zqZxkYDvrtweLK2zWhA6169jjKY1EKJhj3+fQ1lDnqyLjfQwHFJ0qEsY1kFWBYQWI6KRGbOJcnGLsDnGdIfg== + dependencies: + "@liskhq/lisk-cryptography" "^4.1.0" ajv "8.1.0" ajv-formats "2.1.1" debug "4.3.4" @@ -1274,51 +1390,55 @@ dependencies: debug "^3.1.0" -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://npm.lisk.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: + "@gar/promisify" "^1.1.3" semver "^7.3.5" -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://npm.lisk.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://npm.lisk.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://npm.lisk.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" - resolved "https://npm.lisk.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://npm.lisk.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@tootallnate/once@2": version "2.0.0" - resolved "https://npm.lisk.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://npm.lisk.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -1327,163 +1447,139 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://npm.lisk.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://npm.lisk.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://npm.lisk.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" "@types/cookie@^0.4.1": version "0.4.1" - resolved "https://npm.lisk.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://npm.lisk.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://npm.lisk.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://npm.lisk.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://npm.lisk.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://npm.lisk.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://npm.lisk.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/node@11.11.6": version "11.11.6" - resolved "https://npm.lisk.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://npm.lisk.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://npm.lisk.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://npm.lisk.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://npm.lisk.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" JSONStream@^1.3.1: version "1.3.5" - resolved "https://npm.lisk.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://npm.lisk.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - abbrev@^1.0.0: version "1.1.1" - resolved "https://npm.lisk.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== accepts@~1.3.4: version "1.3.8" - resolved "https://npm.lisk.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://npm.lisk.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://npm.lisk.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://npm.lisk.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://npm.lisk.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - agent-base@6, agent-base@^6.0.2: version "6.0.2" - resolved "https://npm.lisk.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^4.2.1: version "4.5.0" - resolved "https://npm.lisk.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== dependencies: humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://npm.lisk.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -1491,14 +1587,14 @@ aggregate-error@^3.0.0: ajv-formats@2.1.1: version "2.1.1" - resolved "https://npm.lisk.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv@8.1.0: version "8.1.0" - resolved "https://npm.lisk.com/ajv/-/ajv-8.1.0.tgz#45d5d3d36c7cdd808930cc3e603cf6200dbeb736" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.1.0.tgz#45d5d3d36c7cdd808930cc3e603cf6200dbeb736" integrity sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ== dependencies: fast-deep-equal "^3.1.1" @@ -1508,7 +1604,7 @@ ajv@8.1.0: ajv@^8.0.0: version "8.12.0" - resolved "https://npm.lisk.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" @@ -1518,14 +1614,14 @@ ajv@^8.0.0: ansi-escapes@^4.2.1: version "4.3.2" - resolved "https://npm.lisk.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^5.0.1: version "5.0.1" - resolved "https://npm.lisk.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: @@ -1535,21 +1631,21 @@ ansi-regex@^6.0.1: ansi-styles@^3.2.1: version "3.2.1" - resolved "https://npm.lisk.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://npm.lisk.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://npm.lisk.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.1.0: @@ -1559,7 +1655,7 @@ ansi-styles@^6.1.0: anymatch@^3.0.3: version "3.1.3" - resolved "https://npm.lisk.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -1567,12 +1663,12 @@ anymatch@^3.0.3: "aproba@^1.0.3 || ^2.0.0": version "2.0.0" - resolved "https://npm.lisk.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== are-we-there-yet@^3.0.0: version "3.0.1" - resolved "https://npm.lisk.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" @@ -1580,14 +1676,14 @@ are-we-there-yet@^3.0.0: argparse@^1.0.7: version "1.0.10" - resolved "https://npm.lisk.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" args@^5.0.3: version "5.0.3" - resolved "https://npm.lisk.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" + resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== dependencies: camelcase "5.0.0" @@ -1597,7 +1693,7 @@ args@^5.0.3: array-buffer-byte-length@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== dependencies: call-bind "^1.0.2" @@ -1605,7 +1701,7 @@ array-buffer-byte-length@^1.0.0: array.prototype.reduce@^1.0.6: version "1.0.6" - resolved "https://npm.lisk.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== dependencies: call-bind "^1.0.2" @@ -1616,7 +1712,7 @@ array.prototype.reduce@^1.0.6: arraybuffer.prototype.slice@^1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== dependencies: array-buffer-byte-length "^1.0.0" @@ -1629,29 +1725,31 @@ arraybuffer.prototype.slice@^1.0.2: assert-plus@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== asynckit@^0.4.0: version "0.4.0" - resolved "https://npm.lisk.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://npm.lisk.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://npm.lisk.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.3.0, babel-jest@^27.5.1: +babel-jest@^27.3.0: version "27.5.1" - resolved "https://npm.lisk.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== dependencies: "@jest/transform" "^27.5.1" @@ -1663,9 +1761,22 @@ babel-jest@^27.3.0, babel-jest@^27.5.1: graceful-fs "^4.2.9" slash "^3.0.0" +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-plugin-istanbul@^6.1.1: version "6.1.1" - resolved "https://npm.lisk.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -1676,7 +1787,7 @@ babel-plugin-istanbul@^6.1.1: babel-plugin-jest-hoist@^27.5.1: version "27.5.1" - resolved "https://npm.lisk.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== dependencies: "@babel/template" "^7.3.3" @@ -1684,33 +1795,43 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://npm.lisk.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" + integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.4" - resolved "https://npm.lisk.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz#1fac2b1dcef6274e72b3c72977ed8325cb330591" - integrity sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg== +babel-plugin-polyfill-corejs3@^0.8.5: + version "0.8.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.32.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://npm.lisk.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" + integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" - resolved "https://npm.lisk.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" @@ -1728,46 +1849,54 @@ babel-preset-current-node-syntax@^1.0.0: babel-preset-jest@^27.5.1: version "27.5.1" - resolved "https://npm.lisk.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== dependencies: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" - resolved "https://npm.lisk.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://npm.lisk.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base64id@2.0.0, base64id@~2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^7.6.2: version "7.6.2" - resolved "https://npm.lisk.com/better-sqlite3/-/better-sqlite3-7.6.2.tgz#47cd8cad5b9573cace535f950ac321166bc31384" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-7.6.2.tgz#47cd8cad5b9573cace535f950ac321166bc31384" integrity sha512-S5zIU1Hink2AH4xPsN0W43T1/AJ5jrPh7Oy07ocuW/AKYYY02GWzz9NH0nbSMn/gw6fDZ5jZ1QsHt1BXAwJ6Lg== dependencies: bindings "^1.5.0" prebuild-install "^7.1.0" better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://npm.lisk.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" big-json@^3.1.0: version "3.2.0" - resolved "https://npm.lisk.com/big-json/-/big-json-3.2.0.tgz#e6053de9e719db428cf6e89ad9f7d05ba8c8be9b" + resolved "https://registry.yarnpkg.com/big-json/-/big-json-3.2.0.tgz#e6053de9e719db428cf6e89ad9f7d05ba8c8be9b" integrity sha512-2Etdurszm1CAFxqpH08lItXyf5CI1OBKRn7imCeI8Lh+a2UvdN2WpuSduxB/3ccao6v93SxiS5fIlE/v1QLoPg== dependencies: JSONStream "^1.3.1" @@ -1779,14 +1908,14 @@ big-json@^3.1.0: bindings@^1.5.0: version "1.5.0" - resolved "https://npm.lisk.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" bip39@3.0.3: version "3.0.3" - resolved "https://npm.lisk.com/bip39/-/bip39-3.0.3.tgz#4a8b79067d6ed2e74f9199ac994a2ab61b176760" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.3.tgz#4a8b79067d6ed2e74f9199ac994a2ab61b176760" integrity sha512-P0dKrz4g0V0BjXfx7d9QNkJ/Txcz/k+hM9TnjqjUaXtuOfAvxXSw2rJw8DX0e3ZPwnK/IgDxoRqf0bvoVCqbMg== dependencies: "@types/node" "11.11.6" @@ -1796,7 +1925,7 @@ bip39@3.0.3: bl@^4.0.3: version "4.1.0" - resolved "https://npm.lisk.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -1805,12 +1934,12 @@ bl@^4.0.3: bluebird@^3.7.2: version "3.7.2" - resolved "https://npm.lisk.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== body-parser@^1.19.0: version "1.20.2" - resolved "https://npm.lisk.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" @@ -1828,7 +1957,7 @@ body-parser@^1.19.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://npm.lisk.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1836,53 +1965,48 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://npm.lisk.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2: version "3.0.2" - resolved "https://npm.lisk.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://npm.lisk.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.10, browserslist@^4.21.9: - version "4.22.0" - resolved "https://npm.lisk.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: version "2.1.1" - resolved "https://npm.lisk.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-from@^1.0.0: version "1.1.2" - resolved "https://npm.lisk.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-reverse@1.0.1: version "1.0.1" - resolved "https://npm.lisk.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" - integrity sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A= + resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" + integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== buffer@^5.5.0: version "5.7.1" - resolved "https://npm.lisk.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -1890,7 +2014,7 @@ buffer@^5.5.0: bull@^3.29.3: version "3.29.3" - resolved "https://npm.lisk.com/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" integrity sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg== dependencies: cron-parser "^2.13.0" @@ -1906,63 +2030,70 @@ bull@^3.29.3: bytes@3.1.2: version "3.1.2" - resolved "https://npm.lisk.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacache@^17.0.0: - version "17.1.4" - resolved "https://npm.lisk.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" - integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" lru-cache "^7.7.1" - minipass "^7.0.3" + minipass "^3.1.6" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" p-map "^4.0.0" - ssri "^10.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" tar "^6.1.11" - unique-filename "^3.0.0" + unique-filename "^2.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://npm.lisk.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" - resolved "https://npm.lisk.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@5.0.0: version "5.0.0" - resolved "https://npm.lisk.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== camelcase@^5.3.1: version "5.3.1" - resolved "https://npm.lisk.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0: version "6.3.0" - resolved "https://npm.lisk.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://npm.lisk.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" - resolved "https://npm.lisk.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1971,7 +2102,7 @@ chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: chalk@^4.0.0: version "4.1.2" - resolved "https://npm.lisk.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1979,27 +2110,27 @@ chalk@^4.0.0: char-regex@^1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chownr@^1.1.1: version "1.1.4" - resolved "https://npm.lisk.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chownr@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== ci-info@^3.2.0: - version "3.8.0" - resolved "https://npm.lisk.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" - resolved "https://npm.lisk.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" @@ -2007,134 +2138,134 @@ cipher-base@^1.0.1, cipher-base@^1.0.3: cjs-module-lexer@^1.0.0: version "1.2.3" - resolved "https://npm.lisk.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== clean-stack@^2.0.0: version "2.2.0" - resolved "https://npm.lisk.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cliui@^7.0.2: - version "7.0.4" - resolved "https://npm.lisk.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: version "1.1.2" - resolved "https://npm.lisk.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== co@^4.6.0: version "4.6.0" - resolved "https://npm.lisk.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: version "1.0.2" - resolved "https://npm.lisk.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== color-convert@^1.9.0: version "1.9.3" - resolved "https://npm.lisk.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://npm.lisk.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://npm.lisk.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://npm.lisk.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-support@^1.1.3: version "1.1.3" - resolved "https://npm.lisk.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colorette@2.0.19: version "2.0.19" - resolved "https://npm.lisk.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== colors@1.4.0: version "1.4.0" - resolved "https://npm.lisk.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== combined-stream@^1.0.8: version "1.0.8" - resolved "https://npm.lisk.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^10.0.0: version "10.0.1" - resolved "https://npm.lisk.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== concat-map@0.0.1: version "0.0.1" - resolved "https://npm.lisk.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== console-control-strings@^1.1.0: version "1.1.0" - resolved "https://npm.lisk.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== content-type@~1.0.5: version "1.0.5" - resolved "https://npm.lisk.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: +convert-source-map@^1.4.0: version "1.9.0" - resolved "https://npm.lisk.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-source-map@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie@~0.4.1: version "0.4.2" - resolved "https://npm.lisk.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.31.0, core-js-compat@^3.32.2: - version "3.32.2" - resolved "https://npm.lisk.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" - integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.34.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.34.0.tgz#61a4931a13c52f8f08d924522bba65f8c94a5f17" + integrity sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA== dependencies: - browserslist "^4.21.10" + browserslist "^4.22.2" core-util-is@~1.0.0: version "1.0.3" - resolved "https://npm.lisk.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cors@~2.8.5: version "2.8.5" - resolved "https://npm.lisk.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -2142,7 +2273,7 @@ cors@~2.8.5: create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" - resolved "https://npm.lisk.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" @@ -2153,7 +2284,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: create-hmac@^1.1.4: version "1.1.7" - resolved "https://npm.lisk.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" @@ -2163,9 +2294,22 @@ create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" - resolved "https://npm.lisk.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== dependencies: is-nan "^1.3.0" @@ -2173,109 +2317,78 @@ cron-parser@^2.13.0: cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://npm.lisk.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://npm.lisk.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://npm.lisk.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://npm.lisk.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://npm.lisk.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" - resolved "https://npm.lisk.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== debug@2.6.9: version "2.6.9" - resolved "https://npm.lisk.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" - resolved "https://npm.lisk.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^3.1.0: version "3.2.7" - resolved "https://npm.lisk.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debuglog@^1.0.0: version "1.0.1" - resolved "https://npm.lisk.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://npm.lisk.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== decompress-response@^6.0.0: version "6.0.0" - resolved "https://npm.lisk.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://npm.lisk.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" - resolved "https://npm.lisk.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deepmerge@^4.2.2: version "4.3.1" - resolved "https://npm.lisk.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://npm.lisk.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" - resolved "https://npm.lisk.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" @@ -2284,79 +2397,67 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, de delayed-stream@~1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== denque@^1.1.0: version "1.5.1" - resolved "https://npm.lisk.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== denque@^2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== depd@2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== destroy@1.2.0: version "1.2.0" - resolved "https://npm.lisk.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.0: version "2.0.2" - resolved "https://npm.lisk.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== detect-newline@^3.0.0: version "3.1.0" - resolved "https://npm.lisk.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://npm.lisk.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://npm.lisk.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== ee-first@1.1.1: version "1.1.1" - resolved "https://npm.lisk.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://npm.lisk.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://npm.lisk.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://npm.lisk.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: @@ -2366,27 +2467,27 @@ emoji-regex@^9.2.2: encodeurl@~1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encoding@^0.1.13: version "0.1.13" - resolved "https://npm.lisk.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://npm.lisk.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://npm.lisk.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -2396,13 +2497,13 @@ engine.io-client@~6.5.2: engine.io-parser@~5.2.1: version "5.2.1" - resolved "https://npm.lisk.com/engine.io-parser/-/engine.io-parser-5.2.1.tgz#9f213c77512ff1a6cc0c7a86108a7ffceb16fcfb" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.1.tgz#9f213c77512ff1a6cc0c7a86108a7ffceb16fcfb" integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://npm.lisk.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -2417,41 +2518,41 @@ engine.io@~6.5.2: env-paths@^2.2.0: version "2.2.1" - resolved "https://npm.lisk.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== err-code@^2.0.2: version "2.0.3" - resolved "https://npm.lisk.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-ex@^1.3.1: version "1.3.2" - resolved "https://npm.lisk.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://npm.lisk.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -2461,7 +2562,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -2475,25 +2576,25 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://npm.lisk.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://npm.lisk.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -2502,73 +2603,57 @@ es-to-primitive@^1.2.1: es6-error@^4.1.1: version "4.1.1" - resolved "https://npm.lisk.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== escalade@^3.1.1: version "3.1.1" - resolved "https://npm.lisk.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@~1.0.3: version "1.0.3" - resolved "https://npm.lisk.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://npm.lisk.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://npm.lisk.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" - resolved "https://npm.lisk.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" - resolved "https://npm.lisk.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://npm.lisk.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - esutils@^2.0.2: version "2.0.3" - resolved "https://npm.lisk.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@^1.8.1, etag@~1.8.1: version "1.8.1" - resolved "https://npm.lisk.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter2@^6.4.9: version "6.4.9" - resolved "https://npm.lisk.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== execa@^5.0.0: version "5.1.1" - resolved "https://npm.lisk.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -2583,66 +2668,67 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" - resolved "https://npm.lisk.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expand-template@^2.0.3: version "2.0.3" - resolved "https://npm.lisk.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" exponential-backoff@^3.1.1: version "3.1.1" - resolved "https://npm.lisk.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== fast-deep-equal@^3.1.1: version "3.1.3" - resolved "https://npm.lisk.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fastest-validator@^1.10.1, fastest-validator@^1.17.0: version "1.17.0" - resolved "https://npm.lisk.com/fastest-validator/-/fastest-validator-1.17.0.tgz#0c032e9c42c40a237d24b20be187f732ebdcc062" + resolved "https://registry.yarnpkg.com/fastest-validator/-/fastest-validator-1.17.0.tgz#0c032e9c42c40a237d24b20be187f732ebdcc062" integrity sha512-37U/JDP72QSFqcvNnO81f0Aeu9og+5I3mc55b2v2RbV0S2I7KvQEdBtrFeIvaYVgam1bDUgy9F9AK9HolByogA== fb-watchman@^2.0.0: version "2.0.2" - resolved "https://npm.lisk.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" file-uri-to-path@1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^7.0.1: version "7.0.1" - resolved "https://npm.lisk.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://npm.lisk.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -2650,33 +2736,25 @@ find-up@^4.0.0, find-up@^4.1.0: flatted@^3.2.7: version "3.2.9" - resolved "https://npm.lisk.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" - resolved "https://npm.lisk.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== for-each@^0.3.3: version "0.3.3" - resolved "https://npm.lisk.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://npm.lisk.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://npm.lisk.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -2684,34 +2762,34 @@ form-data@^3.0.0: fresh@0.5.2, fresh@^0.5.2: version "0.5.2" - resolved "https://npm.lisk.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== from2@^2.3.0: version "2.3.0" - resolved "https://npm.lisk.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" fs-constants@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@^8.1.0: version "8.1.0" - resolved "https://npm.lisk.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^2.0.0: +fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" @@ -2725,22 +2803,22 @@ fs-minipass@^3.0.0: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2: version "2.3.3" - resolved "https://npm.lisk.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://npm.lisk.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" - resolved "https://npm.lisk.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" @@ -2750,12 +2828,12 @@ function.prototype.name@^1.1.6: functions-have-names@^1.2.3: version "1.2.3" - resolved "https://npm.lisk.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@^4.0.3: version "4.0.4" - resolved "https://npm.lisk.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -2769,49 +2847,49 @@ gauge@^4.0.3: generate-function@^2.3.1: version "2.3.1" - resolved "https://npm.lisk.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== dependencies: is-property "^1.0.2" gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://npm.lisk.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://npm.lisk.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://npm.lisk.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" - resolved "https://npm.lisk.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-port@^5.1.1: version "5.1.1" - resolved "https://npm.lisk.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== get-stream@^6.0.0: version "6.0.1" - resolved "https://npm.lisk.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -2819,28 +2897,17 @@ get-symbol-description@^1.0.0: getopts@2.3.0: version "2.3.0" - resolved "https://npm.lisk.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4" + resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4" integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA== github-from-package@0.0.0: version "0.0.0" - resolved "https://npm.lisk.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - -glob@^10.2.2: - version "10.3.10" - resolved "https://npm.lisk.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" - resolved "https://npm.lisk.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -2850,84 +2917,88 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^11.1.0: version "11.12.0" - resolved "https://npm.lisk.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globalthis@^1.0.3: version "1.0.3" - resolved "https://npm.lisk.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" gopd@^1.0.1: version "1.0.1" - resolved "https://npm.lisk.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" - resolved "https://npm.lisk.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://npm.lisk.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://npm.lisk.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" - resolved "https://npm.lisk.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://npm.lisk.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has-unicode@^2.0.1: version "2.0.1" - resolved "https://npm.lisk.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has@^1.0.3: - version "1.0.3" - resolved "https://npm.lisk.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== hash-base@^3.0.0: version "3.1.0" - resolved "https://npm.lisk.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: inherits "^2.0.4" @@ -2936,29 +3007,29 @@ hash-base@^3.0.0: hash-wasm@4.9.0: version "4.9.0" - resolved "https://npm.lisk.com/hash-wasm/-/hash-wasm-4.9.0.tgz#7e9dcc9f7d6bd0cc802f2a58f24edce999744206" + resolved "https://registry.yarnpkg.com/hash-wasm/-/hash-wasm-4.9.0.tgz#7e9dcc9f7d6bd0cc802f2a58f24edce999744206" integrity sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w== -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://npm.lisk.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" - resolved "https://npm.lisk.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-cache-semantics@^4.1.1: +http-cache-semantics@^4.1.0: version "4.1.1" - resolved "https://npm.lisk.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-errors@2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -2967,18 +3038,9 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://npm.lisk.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://npm.lisk.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -2987,12 +3049,12 @@ http-proxy-agent@^5.0.0: http-status-codes@^1.4.0: version "1.4.0" - resolved "https://npm.lisk.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" + resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://npm.lisk.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -3000,38 +3062,38 @@ https-proxy-agent@^5.0.0: human-signals@^2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://npm.lisk.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" iconv-lite@0.4.24: version "0.4.24" - resolved "https://npm.lisk.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" - resolved "https://npm.lisk.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" ieee754@^1.1.13: version "1.2.1" - resolved "https://npm.lisk.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== import-local@^3.0.2: version "3.1.0" - resolved "https://npm.lisk.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" @@ -3039,49 +3101,54 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://npm.lisk.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://npm.lisk.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflight@^1.0.4: version "1.0.6" - resolved "https://npm.lisk.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://npm.lisk.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@~1.3.0: version "1.3.8" - resolved "https://npm.lisk.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://npm.lisk.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: version "2.2.0" - resolved "https://npm.lisk.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== into-stream@^5.1.0: version "5.1.1" - resolved "https://npm.lisk.com/into-stream/-/into-stream-5.1.1.tgz#f9a20a348a11f3c13face22763f2d02e127f4db8" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-5.1.1.tgz#f9a20a348a11f3c13face22763f2d02e127f4db8" integrity sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA== dependencies: from2 "^2.3.0" @@ -3089,7 +3156,7 @@ into-stream@^5.1.0: ioredis@^4.27.0: version "4.28.5" - resolved "https://npm.lisk.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== dependencies: cluster-key-slot "^1.1.0" @@ -3106,7 +3173,7 @@ ioredis@^4.27.0: ioredis@^5.3.2: version "5.3.2" - resolved "https://npm.lisk.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== dependencies: "@ioredis/commands" "^1.1.1" @@ -3121,17 +3188,17 @@ ioredis@^5.3.2: ip@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== ipaddr.js@^2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" - resolved "https://npm.lisk.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: call-bind "^1.0.2" @@ -3140,19 +3207,19 @@ is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://npm.lisk.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" - resolved "https://npm.lisk.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://npm.lisk.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -3160,41 +3227,41 @@ is-boolean-object@^1.1.0: is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://npm.lisk.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://npm.lisk.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" - resolved "https://npm.lisk.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" - resolved "https://npm.lisk.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-lambda@^1.0.1: version "1.0.1" - resolved "https://npm.lisk.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-nan@^1.3.0: version "1.3.2" - resolved "https://npm.lisk.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== dependencies: call-bind "^1.0.0" @@ -3202,34 +3269,29 @@ is-nan@^1.3.0: is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://npm.lisk.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://npm.lisk.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://npm.lisk.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://npm.lisk.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== is-regex@^1.1.4: version "1.1.4" - resolved "https://npm.lisk.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -3237,82 +3299,82 @@ is-regex@^1.1.4: is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-stream@^2.0.0: version "2.0.1" - resolved "https://npm.lisk.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://npm.lisk.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://npm.lisk.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: version "1.1.12" - resolved "https://npm.lisk.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: which-typed-array "^1.1.11" is-typedarray@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-weakref@^1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" isarray@^2.0.5: version "2.0.5" - resolved "https://npm.lisk.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isarray@~1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isomorphic-ws@4.0.1: version "4.0.1" - resolved "https://npm.lisk.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== isstream@^0.1.2: version "0.1.2" - resolved "https://npm.lisk.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://npm.lisk.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" - resolved "https://npm.lisk.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" @@ -3321,9 +3383,20 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" - resolved "https://npm.lisk.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -3332,7 +3405,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "https://npm.lisk.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -3341,164 +3414,140 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.1.3: version "3.1.6" - resolved "https://npm.lisk.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jackspeak@^2.3.5: - version "2.3.5" - resolved "https://npm.lisk.com/jackspeak/-/jackspeak-2.3.5.tgz#443f237f9eeeb0d7c6ec34835ef5289bb4acb068" - integrity sha512-Ratx+B8WeXLAtRJn26hrhY8S1+Jz6pxPMrkrdkgb/NstTNiqMhX0/oFVu5wX+g5n6JlEu2LPsDJmY8nRP4+alw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== jest-haste-map@^27.5.1: version "27.5.1" - resolved "https://npm.lisk.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== dependencies: "@jest/types" "^27.5.1" @@ -3516,199 +3565,197 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" - resolved "https://npm.lisk.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^27.5.1: version "27.5.1" - resolved "https://npm.lisk.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" jest-serializer@^27.5.1: version "27.5.1" - resolved "https://npm.lisk.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== dependencies: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" jest-util@^27.5.1: version "27.5.1" - resolved "https://npm.lisk.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== dependencies: "@jest/types" "^27.5.1" @@ -3718,118 +3765,109 @@ jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" jest-when@^3.5.1: version "3.6.0" - resolved "https://npm.lisk.com/jest-when/-/jest-when-3.6.0.tgz#b46ee408d68f671447b218f2ae6bd93fb5028acf" + resolved "https://registry.yarnpkg.com/jest-when/-/jest-when-3.6.0.tgz#b46ee408d68f671447b218f2ae6bd93fb5028acf" integrity sha512-+cZWTy0ekAJo7M9Om0Scdor1jm3wDiYJWmXE8U22UVnkH54YCXAuaqz3P+up/FdtOg8g4wHOxV7Thd7nKhT6Dg== jest-worker@^27.5.1: version "27.5.1" - resolved "https://npm.lisk.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://npm.lisk.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" - resolved "https://npm.lisk.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://npm.lisk.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://npm.lisk.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" - resolved "https://npm.lisk.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://npm.lisk.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-buffer@3.0.1: version "3.0.1" - resolved "https://npm.lisk.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-colorizer@^2.2.2: version "2.2.2" - resolved "https://npm.lisk.com/json-colorizer/-/json-colorizer-2.2.2.tgz#07c2ac8cef36558075948e1566c6cfb4ac1668e6" + resolved "https://registry.yarnpkg.com/json-colorizer/-/json-colorizer-2.2.2.tgz#07c2ac8cef36558075948e1566c6cfb4ac1668e6" integrity sha512-56oZtwV1piXrQnRNTtJeqRv+B9Y/dXAYLqBBaYl/COcUdoZxgLBLAO88+CnkbT6MxNs0c5E9mPBIb2sFcNz3vw== dependencies: chalk "^2.4.1" @@ -3837,63 +3875,63 @@ json-colorizer@^2.2.2: json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://npm.lisk.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stream-stringify@^2.0.1: version "2.0.4" - resolved "https://npm.lisk.com/json-stream-stringify/-/json-stream-stringify-2.0.4.tgz#f97521d151ece5e78a38bf2e4253cf79c98fed44" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-2.0.4.tgz#f97521d151ece5e78a38bf2e4253cf79c98fed44" integrity sha512-gIPoa6K5w6j/RnQ3fOtmvICKNJGViI83A7dnTIL+0QJ/1GKuNvCPFvbFWxt0agruF4iGgDFJvge4Gua4ZoiggQ== json5@^2.2.3: version "2.2.3" - resolved "https://npm.lisk.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^4.0.0: version "4.0.0" - resolved "https://npm.lisk.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsonparse@^1.2.0: version "1.3.1" - resolved "https://npm.lisk.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== keyv-lru@^3.0.4: version "3.0.4" - resolved "https://npm.lisk.com/keyv-lru/-/keyv-lru-3.0.4.tgz#95ec97077a18d9a6ceb16a48b6530c26c5ce9099" + resolved "https://registry.yarnpkg.com/keyv-lru/-/keyv-lru-3.0.4.tgz#95ec97077a18d9a6ceb16a48b6530c26c5ce9099" integrity sha512-4XALKaBM/3nZr0o0Hskq+SPS2tBkfZXYQRDl0SqywIimZf0wrrMEgSfoOM7eNuKXnICIOHs3exPucGKDYAp/8g== dependencies: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://npm.lisk.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" kleur@^3.0.3: version "3.0.3" - resolved "https://npm.lisk.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== kleur@^4.1.4, kleur@^4.1.5: version "4.1.5" - resolved "https://npm.lisk.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== knex@^2.4.0, knex@^2.5.1: version "2.5.1" - resolved "https://npm.lisk.com/knex/-/knex-2.5.1.tgz#a6c6b449866cf4229f070c17411f23871ba52ef9" + resolved "https://registry.yarnpkg.com/knex/-/knex-2.5.1.tgz#a6c6b449866cf4229f070c17411f23871ba52ef9" integrity sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA== dependencies: colorette "2.0.19" @@ -3913,26 +3951,26 @@ knex@^2.4.0, knex@^2.5.1: leven@2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== leven@^3.1.0: version "3.1.0" - resolved "https://npm.lisk.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://npm.lisk.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -3958,49 +3996,49 @@ lines-and-columns@^1.1.6: locate-path@^5.0.0: version "5.0.0" - resolved "https://npm.lisk.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" lodash.clonedeep@4.5.0: version "4.5.0" - resolved "https://npm.lisk.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://npm.lisk.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.defaults@^4.2.0: version "4.2.0" - resolved "https://npm.lisk.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== lodash.flatten@^4.4.0: version "4.4.0" - resolved "https://npm.lisk.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== lodash.get@^4.4.2: version "4.4.2" - resolved "https://npm.lisk.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== lodash.isarguments@^3.1.0: version "3.1.0" - resolved "https://npm.lisk.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" - resolved "https://npm.lisk.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log4js@^6.5.2: version "6.9.1" - resolved "https://npm.lisk.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== dependencies: date-format "^4.0.14" @@ -4011,31 +4049,31 @@ log4js@^6.5.2: long@^5.2.1: version "5.2.3" - resolved "https://npm.lisk.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== lru-cache@^5.1.1: version "5.1.1" - resolved "https://npm.lisk.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://npm.lisk.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lru-cache@^7.14.1, lru-cache@^7.7.1: version "7.18.3" - resolved "https://npm.lisk.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== lru-cache@^8.0.0: version "8.0.5" - resolved "https://npm.lisk.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== "lru-cache@^9.1.1 || ^10.0.0": @@ -4045,42 +4083,43 @@ lru-cache@^8.0.0: make-dir@^4.0.0: version "4.0.0" - resolved "https://npm.lisk.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: semver "^7.5.3" -make-fetch-happen@^11.0.3: - version "11.1.1" - resolved "https://npm.lisk.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== dependencies: agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0" is-lambda "^1.0.1" lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-fetch "^3.0.0" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" negotiator "^0.6.3" promise-retry "^2.0.1" socks-proxy-agent "^7.0.0" - ssri "^10.0.0" + ssri "^9.0.0" makeerror@1.0.12: version "1.0.12" - resolved "https://npm.lisk.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" md5.js@^1.3.4: version "1.3.5" - resolved "https://npm.lisk.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" @@ -4089,17 +4128,17 @@ md5.js@^1.3.4: media-typer@0.3.0: version "0.3.0" - resolved "https://npm.lisk.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== merge-stream@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== micromatch@^4.0.4: version "4.0.5" - resolved "https://npm.lisk.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -4107,63 +4146,63 @@ micromatch@^4.0.4: mime-db@1.52.0: version "1.52.0" - resolved "https://npm.lisk.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://npm.lisk.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://npm.lisk.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^3.1.0: version "3.1.0" - resolved "https://npm.lisk.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" - resolved "https://npm.lisk.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.1: - version "9.0.3" - resolved "https://npm.lisk.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.3: version "1.2.8" - resolved "https://npm.lisk.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://npm.lisk.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: - minipass "^7.0.3" + minipass "^3.1.6" minipass-sized "^1.0.3" minizlib "^2.1.2" optionalDependencies: @@ -4171,45 +4210,40 @@ minipass-fetch@^3.0.0: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://npm.lisk.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://npm.lisk.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://npm.lisk.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" -minipass@^3.0.0: +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" - resolved "https://npm.lisk.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" minipass@^5.0.0: version "5.0.0" - resolved "https://npm.lisk.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: - version "7.0.3" - resolved "https://npm.lisk.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" - integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== - minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" - resolved "https://npm.lisk.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -4217,18 +4251,18 @@ minizlib@^2.1.1, minizlib@^2.1.2: mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" - resolved "https://npm.lisk.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^1.0.3: +mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://npm.lisk.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://npm.lisk.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -4243,9 +4277,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.21: - version "0.14.31" - resolved "https://npm.lisk.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -4260,40 +4294,40 @@ moleculer@^0.14.21: moment-timezone@^0.5.31: version "0.5.43" - resolved "https://npm.lisk.com/moment-timezone/-/moment-timezone-0.5.43.tgz#3dd7f3d0c67f78c23cd1906b9b2137a09b3c4790" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.43.tgz#3dd7f3d0c67f78c23cd1906b9b2137a09b3c4790" integrity sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ== dependencies: moment "^2.29.4" moment@^2.29.4: version "2.29.4" - resolved "https://npm.lisk.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== mri@1.1.4: version "1.1.4" - resolved "https://npm.lisk.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== ms@2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" - resolved "https://npm.lisk.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" - resolved "https://npm.lisk.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mysql2@^3.5.2: - version "3.6.1" - resolved "https://npm.lisk.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -4306,19 +4340,19 @@ mysql2@^3.5.2: named-placeholders@^1.1.3: version "1.1.3" - resolved "https://npm.lisk.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351" integrity sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w== dependencies: lru-cache "^7.14.1" napi-build-utils@^1.0.1: version "1.0.2" - resolved "https://npm.lisk.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== nats@^1.4.12: version "1.4.12" - resolved "https://npm.lisk.com/nats/-/nats-1.4.12.tgz#11a988d5041d95dfb1b6ac1e37c0cfb57b171579" + resolved "https://registry.yarnpkg.com/nats/-/nats-1.4.12.tgz#11a988d5041d95dfb1b6ac1e37c0cfb57b171579" integrity sha512-Jf4qesEF0Ay0D4AMw3OZnKMRTQm+6oZ5q8/m4gpy5bTmiDiK6wCXbZpzEslmezGpE93LV3RojNEG6dpK/mysLQ== dependencies: nuid "^1.1.4" @@ -4326,24 +4360,24 @@ nats@^1.4.12: natural-compare@^1.4.0: version "1.4.0" - resolved "https://npm.lisk.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" - resolved "https://npm.lisk.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://npm.lisk.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" node-cron@^2.0.3: version "2.0.3" - resolved "https://npm.lisk.com/node-cron/-/node-cron-2.0.3.tgz#b9649784d0d6c00758410eef22fa54a10e3f602d" + resolved "https://registry.yarnpkg.com/node-cron/-/node-cron-2.0.3.tgz#b9649784d0d6c00758410eef22fa54a10e3f602d" integrity sha512-eJI+QitXlwcgiZwNNSRbqsjeZMp5shyajMR81RZCqeW0ZDEj4zU9tpd4nTh/1JsBiKbF8d08FCewiipDmVIYjg== dependencies: opencollective-postinstall "^2.0.0" @@ -4351,26 +4385,26 @@ node-cron@^2.0.3: node-fetch@^2.6.7: version "2.7.0" - resolved "https://npm.lisk.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-gyp-build@^4.1.0: - version "4.6.1" - resolved "https://npm.lisk.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" - integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + version "4.7.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.7.1.tgz#cd7d2eb48e594874053150a9418ac85af83ca8f7" + integrity sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg== node-gyp@^9.4.0: - version "9.4.0" - resolved "https://npm.lisk.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" - integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== dependencies: env-paths "^2.2.0" exponential-backoff "^3.1.1" glob "^7.1.4" graceful-fs "^4.2.6" - make-fetch-happen "^11.0.3" + make-fetch-happen "^10.0.3" nopt "^6.0.0" npmlog "^6.0.0" rimraf "^3.0.2" @@ -4380,36 +4414,36 @@ node-gyp@^9.4.0: node-int64@^0.4.0: version "0.4.0" - resolved "https://npm.lisk.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://npm.lisk.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== nopt@^6.0.0: version "6.0.0" - resolved "https://npm.lisk.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: abbrev "^1.0.0" normalize-path@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://npm.lisk.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" npmlog@^6.0.0: version "6.0.2" - resolved "https://npm.lisk.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: are-we-there-yet "^3.0.0" @@ -4419,42 +4453,37 @@ npmlog@^6.0.0: nuid@^1.1.4: version "1.1.6" - resolved "https://npm.lisk.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" + resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://npm.lisk.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" - resolved "https://npm.lisk.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://npm.lisk.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" - resolved "https://npm.lisk.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://npm.lisk.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" object.getownpropertydescriptors@^2.1.6: version "2.1.7" - resolved "https://npm.lisk.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== dependencies: array.prototype.reduce "^1.0.6" @@ -4465,81 +4494,88 @@ object.getownpropertydescriptors@^2.1.6: on-finished@2.4.1: version "2.4.1" - resolved "https://npm.lisk.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://npm.lisk.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.2: version "5.1.2" - resolved "https://npm.lisk.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" opencollective-postinstall@^2.0.0: version "2.0.3" - resolved "https://npm.lisk.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== p-finally@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-is-promise@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== p-limit@^2.2.0: version "2.3.0" - resolved "https://npm.lisk.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" - resolved "https://npm.lisk.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-map@^2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-map@^4.0.0: version "4.0.0" - resolved "https://npm.lisk.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-timeout@^3.2.0: version "3.2.0" - resolved "https://npm.lisk.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" p-try@^2.0.0: version "2.2.0" - resolved "https://npm.lisk.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parse-json@^5.2.0: version "5.2.0" - resolved "https://npm.lisk.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -4547,34 +4583,29 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://npm.lisk.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" - resolved "https://npm.lisk.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://npm.lisk.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://npm.lisk.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://npm.lisk.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://npm.lisk.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-scurry@^1.10.1: @@ -4587,12 +4618,12 @@ path-scurry@^1.10.1: path-to-regexp@^3.1.0: version "3.2.0" - resolved "https://npm.lisk.com/path-to-regexp/-/path-to-regexp-3.2.0.tgz#fa7877ecbc495c601907562222453c43cc204a5f" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.2.0.tgz#fa7877ecbc495c601907562222453c43cc204a5f" integrity sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA== pbkdf2@^3.0.9: version "3.1.2" - resolved "https://npm.lisk.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" @@ -4603,34 +4634,34 @@ pbkdf2@^3.0.9: pg-connection-string@2.6.1: version "2.6.1" - resolved "https://npm.lisk.com/pg-connection-string/-/pg-connection-string-2.6.1.tgz#78c23c21a35dd116f48e12e23c0965e8d9e2cbfb" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.1.tgz#78c23c21a35dd116f48e12e23c0965e8d9e2cbfb" integrity sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg== picocolors@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" - resolved "https://npm.lisk.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pirates@^4.0.4: version "4.0.6" - resolved "https://npm.lisk.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^4.2.0: version "4.2.0" - resolved "https://npm.lisk.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" prebuild-install@^7.1.0, prebuild-install@^7.1.1: version "7.1.1" - resolved "https://npm.lisk.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== dependencies: detect-libc "^2.0.0" @@ -4646,18 +4677,18 @@ prebuild-install@^7.1.0, prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://npm.lisk.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" prettyjson@^1.2.1: version "1.2.5" - resolved "https://npm.lisk.com/prettyjson/-/prettyjson-1.2.5.tgz#ef3cfffcc70505c032abc59785884b4027031835" + resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.5.tgz#ef3cfffcc70505c032abc59785884b4027031835" integrity sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw== dependencies: colors "1.4.0" @@ -4665,12 +4696,17 @@ prettyjson@^1.2.1: process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://npm.lisk.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + promise-retry@^2.0.1: version "2.0.1" - resolved "https://npm.lisk.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" @@ -4678,7 +4714,7 @@ promise-retry@^2.0.1: promise.prototype.finally@^3.1.2: version "3.1.7" - resolved "https://npm.lisk.com/promise.prototype.finally/-/promise.prototype.finally-3.1.7.tgz#9d163f58edf3004d14878c988a22b1cb45e03407" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.7.tgz#9d163f58edf3004d14878c988a22b1cb45e03407" integrity sha512-iL9OcJRUZcCE5xn6IwhZxO+eMM0VEXjkETHy+Nk+d9q3s7kxVtPg+mBlMO+ZGxNKNMODyKmy/bOyt/yhxTnvEw== dependencies: call-bind "^1.0.2" @@ -4689,64 +4725,64 @@ promise.prototype.finally@^3.1.2: prompts@^2.0.1: version "2.4.2" - resolved "https://npm.lisk.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://npm.lisk.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://npm.lisk.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" - resolved "https://npm.lisk.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" qs@^6.11.0: version "6.11.2" - resolved "https://npm.lisk.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://npm.lisk.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - randombytes@^2.0.1: version "2.1.0" - resolved "https://npm.lisk.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@~1.2.1: version "1.2.1" - resolved "https://npm.lisk.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.2: version "2.5.2" - resolved "https://npm.lisk.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -4756,7 +4792,7 @@ raw-body@2.5.2: rc@^1.2.7: version "1.2.8" - resolved "https://npm.lisk.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -4764,14 +4800,14 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^17.0.1: - version "17.0.2" - resolved "https://npm.lisk.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== "readable-stream@2 || 3", readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" - resolved "https://npm.lisk.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -4780,7 +4816,7 @@ react-is@^17.0.1: readable-stream@^2.0.0: version "2.3.8" - resolved "https://npm.lisk.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -4793,62 +4829,62 @@ readable-stream@^2.0.0: rechoir@^0.8.0: version "0.8.0" - resolved "https://npm.lisk.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: resolve "^1.20.0" recursive-watch@^1.1.4: version "1.1.4" - resolved "https://npm.lisk.com/recursive-watch/-/recursive-watch-1.1.4.tgz#7a340f860dd715836a592f008cceba5a1dd0b734" + resolved "https://registry.yarnpkg.com/recursive-watch/-/recursive-watch-1.1.4.tgz#7a340f860dd715836a592f008cceba5a1dd0b734" integrity sha512-fWejAmdLi7B/jipBUjTLnqId+PK+573fbGNbdaNA/AiAnQAx6OYOLCGWRs0W5+PyM1rLzZSWK2f40QpHSR49PQ== dependencies: ttl "^1.3.0" redis-commands@1.7.0: version "1.7.0" - resolved "https://npm.lisk.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" - resolved "https://npm.lisk.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60= + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== redis-parser@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ= + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== dependencies: redis-errors "^1.0.0" regenerate-unicode-properties@^10.1.0: version "10.1.1" - resolved "https://npm.lisk.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "https://npm.lisk.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.14.0: version "0.14.0" - resolved "https://npm.lisk.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== regenerator-transform@^0.15.2: version "0.15.2" - resolved "https://npm.lisk.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" regexp.prototype.flags@^1.5.1: version "1.5.1" - resolved "https://npm.lisk.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" @@ -4857,7 +4893,7 @@ regexp.prototype.flags@^1.5.1: regexpu-core@^5.3.1: version "5.3.2" - resolved "https://npm.lisk.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: "@babel/regjsgen" "^0.8.0" @@ -4869,52 +4905,47 @@ regexpu-core@^5.3.1: regjsparser@^0.9.1: version "0.9.1" - resolved "https://npm.lisk.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" require-all@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/require-all/-/require-all-3.0.0.tgz#473d49704be310115ce124f77383b1ebd8671312" - integrity sha1-Rz1JcEvjEBFc4ST3c4Ox69hnExI= + resolved "https://registry.yarnpkg.com/require-all/-/require-all-3.0.0.tgz#473d49704be310115ce124f77383b1ebd8671312" + integrity sha512-jPGN876lc5exWYrMcgZSd7U42P0PmVQzxnQB13fCSzmyGnqQWW4WUz5DosZ/qe24hz+5o9lSvW2epBNZ1xa6Fw== require-directory@^2.1.1: version "2.1.1" - resolved "https://npm.lisk.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://npm.lisk.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://npm.lisk.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^5.0.0: version "5.0.0" - resolved "https://npm.lisk.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://npm.lisk.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.14.2, resolve@^1.20.0: - version "1.22.6" - resolved "https://npm.lisk.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -4922,24 +4953,24 @@ resolve@^1.14.2, resolve@^1.20.0: retry@^0.12.0: version "0.12.0" - resolved "https://npm.lisk.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== rfdc@^1.3.0: version "1.3.0" - resolved "https://npm.lisk.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" - resolved "https://npm.lisk.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" - resolved "https://npm.lisk.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" @@ -4947,7 +4978,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: version "1.0.1" - resolved "https://npm.lisk.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== dependencies: call-bind "^1.0.2" @@ -4957,17 +4988,17 @@ safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://npm.lisk.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://npm.lisk.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" @@ -4976,38 +5007,31 @@ safe-regex-test@^1.0.0: "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://npm.lisk.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://npm.lisk.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@7.5.2: version "7.5.2" - resolved "https://npm.lisk.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== dependencies: lru-cache "^6.0.0" semver@^6.3.0, semver@^6.3.1: version "6.3.1" - resolved "https://npm.lisk.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.5.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.5.4" - resolved "https://npm.lisk.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" send@0.18.0: version "0.18.0" - resolved "https://npm.lisk.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -5026,12 +5050,12 @@ send@0.18.0: seq-queue@^0.0.5: version "0.0.5" - resolved "https://npm.lisk.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" - integrity sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4= + resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" + integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== serve-static@^1.14.1: version "1.15.0" - resolved "https://npm.lisk.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -5041,12 +5065,22 @@ serve-static@^1.14.1: set-blocking@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" - resolved "https://npm.lisk.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== dependencies: define-data-property "^1.0.1" @@ -5055,12 +5089,12 @@ set-function-name@^2.0.0, set-function-name@^2.0.1: setprototypeof@1.2.0: version "1.2.0" - resolved "https://npm.lisk.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" - resolved "https://npm.lisk.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" @@ -5068,19 +5102,19 @@ sha.js@^2.4.0, sha.js@^2.4.8: shebang-command@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: version "1.0.4" - resolved "https://npm.lisk.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -5089,7 +5123,7 @@ side-channel@^1.0.4: signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://npm.lisk.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: @@ -5099,17 +5133,17 @@ signal-exit@^4.0.1: signals@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/signals/-/signals-1.0.0.tgz#65f0c1599352b35372ecaae5a250e6107376ed69" - integrity sha1-ZfDBWZNSs1Ny7KrlolDmEHN27Wk= + resolved "https://registry.yarnpkg.com/signals/-/signals-1.0.0.tgz#65f0c1599352b35372ecaae5a250e6107376ed69" + integrity sha512-dE3lBiqgrgIvpGHYBy6/kiYKfh0HXRmbg0ocakBKiOefbal6ZeTtNlQlxsu9ADkNzv5OmRwRKu+IaTPSqJdZDg== simple-concat@^1.0.0: version "1.0.1" - resolved "https://npm.lisk.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^4.0.0: version "4.0.1" - resolved "https://npm.lisk.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: decompress-response "^6.0.0" @@ -5118,29 +5152,29 @@ simple-get@^4.0.0: sisteransi@^1.0.5: version "1.0.5" - resolved "https://npm.lisk.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "https://npm.lisk.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== smart-buffer@^4.2.0: version "4.2.0" - resolved "https://npm.lisk.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socket.io-adapter@~2.5.2: version "2.5.2" - resolved "https://npm.lisk.com/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz#5de9477c9182fdc171cd8c8364b9a8894ec75d12" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz#5de9477c9182fdc171cd8c8364b9a8894ec75d12" integrity sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA== dependencies: ws "~8.11.0" socket.io-client@^4.0.1: version "4.7.2" - resolved "https://npm.lisk.com/socket.io-client/-/socket.io-client-4.7.2.tgz#f2f13f68058bd4e40f94f2a1541f275157ff2c08" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.2.tgz#f2f13f68058bd4e40f94f2a1541f275157ff2c08" integrity sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w== dependencies: "@socket.io/component-emitter" "~3.1.0" @@ -5150,7 +5184,7 @@ socket.io-client@^4.0.1: socket.io-parser@~4.2.4: version "4.2.4" - resolved "https://npm.lisk.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== dependencies: "@socket.io/component-emitter" "~3.1.0" @@ -5158,7 +5192,7 @@ socket.io-parser@~4.2.4: socket.io@^4.4.1: version "4.7.2" - resolved "https://npm.lisk.com/socket.io/-/socket.io-4.7.2.tgz#22557d76c3f3ca48f82e73d68b7add36a22df002" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.2.tgz#22557d76c3f3ca48f82e73d68b7add36a22df002" integrity sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw== dependencies: accepts "~1.3.4" @@ -5171,7 +5205,7 @@ socket.io@^4.4.1: socks-proxy-agent@^7.0.0: version "7.0.0" - resolved "https://npm.lisk.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: agent-base "^6.0.2" @@ -5180,72 +5214,67 @@ socks-proxy-agent@^7.0.0: socks@^2.6.2: version "2.7.1" - resolved "https://npm.lisk.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: ip "^2.0.0" smart-buffer "^4.2.0" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://npm.lisk.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" - resolved "https://npm.lisk.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://npm.lisk.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" - resolved "https://npm.lisk.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sqlstring@^2.3.2: version "2.3.3" - resolved "https://npm.lisk.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== -ssri@^10.0.0: - version "10.0.5" - resolved "https://npm.lisk.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== dependencies: - minipass "^7.0.3" + minipass "^3.1.1" stack-trace@0.0.10: version "0.0.10" - resolved "https://npm.lisk.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== stack-utils@^2.0.3: version "2.0.6" - resolved "https://npm.lisk.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" standard-as-callback@^2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== statuses@2.0.1: version "2.0.1" - resolved "https://npm.lisk.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== streamroller@^3.1.5: version "3.1.5" - resolved "https://npm.lisk.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== dependencies: date-format "^4.0.14" @@ -5254,33 +5283,24 @@ streamroller@^3.1.5: string-length@^4.0.1: version "4.0.2" - resolved "https://npm.lisk.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://npm.lisk.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://npm.lisk.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - string.prototype.trim@^1.2.8: version "1.2.8" - resolved "https://npm.lisk.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" @@ -5289,7 +5309,7 @@ string.prototype.trim@^1.2.8: string.prototype.trimend@^1.0.7: version "1.0.7" - resolved "https://npm.lisk.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" @@ -5298,7 +5318,7 @@ string.prototype.trimend@^1.0.7: string.prototype.trimstart@^1.0.7: version "1.0.7" - resolved "https://npm.lisk.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" @@ -5307,21 +5327,21 @@ string.prototype.trimstart@^1.0.7: string_decoder@^1.1.1: version "1.3.0" - resolved "https://npm.lisk.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://npm.lisk.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://npm.lisk.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" @@ -5335,66 +5355,53 @@ strip-ansi@^7.0.1: strip-bom@^4.0.0: version "4.0.0" - resolved "https://npm.lisk.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://npm.lisk.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://npm.lisk.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== supports-color@^5.3.0: version "5.5.0" - resolved "https://npm.lisk.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" - resolved "https://npm.lisk.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0: version "8.1.1" - resolved "https://npm.lisk.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://npm.lisk.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://npm.lisk.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" - resolved "https://npm.lisk.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -5404,7 +5411,7 @@ tar-fs@^2.0.0: tar-stream@^2.1.4: version "2.2.0" - resolved "https://npm.lisk.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -5415,7 +5422,7 @@ tar-stream@^2.1.4: tar@^6.1.11, tar@^6.1.2: version "6.2.0" - resolved "https://npm.lisk.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: chownr "^2.0.0" @@ -5427,20 +5434,12 @@ tar@^6.1.11, tar@^6.1.2: tarn@^3.0.2: version "3.0.2" - resolved "https://npm.lisk.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" + resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://npm.lisk.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" - resolved "https://npm.lisk.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -5449,17 +5448,12 @@ test-exclude@^6.0.0: text-decoding@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" + resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://npm.lisk.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - through2@^3.0.1: version "3.0.2" - resolved "https://npm.lisk.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== dependencies: inherits "^2.0.4" @@ -5467,100 +5461,83 @@ through2@^3.0.1: "through@>=2.2.7 <3": version "2.3.8" - resolved "https://npm.lisk.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tildify@2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== tiny-lru@^1.6.1: version "1.6.4" - resolved "https://npm.lisk.com/tiny-lru/-/tiny-lru-1.6.4.tgz#ee5226a29a7b734ef8aee47673dd5079bf987441" + resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-1.6.4.tgz#ee5226a29a7b734ef8aee47673dd5079bf987441" integrity sha512-Et+J3Css66XPSLWjLF9wmgbECsGiExlEL+jxsFerTQF6N6dpxswDTPAfIrAbQKO5c1uhgq2xvo5zMk1W+kBDNA== tmpl@1.0.5: version "1.0.5" - resolved "https://npm.lisk.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://npm.lisk.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://npm.lisk.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://npm.lisk.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://npm.lisk.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" - resolved "https://npm.lisk.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== ts-nkeys@^1.0.16: version "1.0.16" - resolved "https://npm.lisk.com/ts-nkeys/-/ts-nkeys-1.0.16.tgz#b0c6e7c4f16f976c7e7ddb6982fc789a2f971248" + resolved "https://registry.yarnpkg.com/ts-nkeys/-/ts-nkeys-1.0.16.tgz#b0c6e7c4f16f976c7e7ddb6982fc789a2f971248" integrity sha512-1qrhAlavbm36wtW+7NtKOgxpzl+70NTF8xlz9mEhiA5zHMlMxjj3sEVKWm3pGZhHXE0Q3ykjrj+OSRVaYw+Dqg== dependencies: tweetnacl "^1.0.3" ttl@^1.3.0: version "1.3.1" - resolved "https://npm.lisk.com/ttl/-/ttl-1.3.1.tgz#d8fa510bedb6a956d85b60ec56a57339ae0d5b2c" + resolved "https://registry.yarnpkg.com/ttl/-/ttl-1.3.1.tgz#d8fa510bedb6a956d85b60ec56a57339ae0d5b2c" integrity sha512-+bGy9iDAqg3WSfc2ZrprToSPJhZjqy7vUv9wupQzsiv+BVPVx1T2a6G4T0290SpQj+56Toaw9BiLO5j5Bd7QzA== tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://npm.lisk.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@1.0.3, tweetnacl@^1.0.3: version "1.0.3" - resolved "https://npm.lisk.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== type-detect@4.0.8: version "4.0.8" - resolved "https://npm.lisk.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.21.3: version "0.21.3" - resolved "https://npm.lisk.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-is@~1.6.18: version "1.6.18" - resolved "https://npm.lisk.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -5568,7 +5545,7 @@ type-is@~1.6.18: typed-array-buffer@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== dependencies: call-bind "^1.0.2" @@ -5577,7 +5554,7 @@ typed-array-buffer@^1.0.0: typed-array-byte-length@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== dependencies: call-bind "^1.0.2" @@ -5587,7 +5564,7 @@ typed-array-byte-length@^1.0.0: typed-array-byte-offset@^1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== dependencies: available-typed-arrays "^1.0.5" @@ -5598,7 +5575,7 @@ typed-array-byte-offset@^1.0.0: typed-array-length@^1.0.4: version "1.0.4" - resolved "https://npm.lisk.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: call-bind "^1.0.2" @@ -5607,19 +5584,19 @@ typed-array-length@^1.0.4: typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "https://npm.lisk.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" tz-offset@0.0.1: version "0.0.1" - resolved "https://npm.lisk.com/tz-offset/-/tz-offset-0.0.1.tgz#fef920257024d3583ed9072a767721a18bdb8a76" + resolved "https://registry.yarnpkg.com/tz-offset/-/tz-offset-0.0.1.tgz#fef920257024d3583ed9072a767721a18bdb8a76" integrity sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -5627,14 +5604,19 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" @@ -5642,46 +5624,41 @@ unicode-match-property-ecmascript@^2.0.0: unicode-match-property-value-ecmascript@^2.1.0: version "2.1.0" - resolved "https://npm.lisk.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" - resolved "https://npm.lisk.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://npm.lisk.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== dependencies: - unique-slug "^4.0.0" + unique-slug "^3.0.0" -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://npm.lisk.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== dependencies: imurmurhash "^0.1.4" universalify@^0.1.0: version "0.1.2" - resolved "https://npm.lisk.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://npm.lisk.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" - resolved "https://npm.lisk.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== update-browserslist-db@^1.0.13: version "1.0.13" - resolved "https://npm.lisk.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" @@ -5689,27 +5666,19 @@ update-browserslist-db@^1.0.13: uri-js@^4.2.2: version "4.4.1" - resolved "https://npm.lisk.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://npm.lisk.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://npm.lisk.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util.promisify@^1.0.1: version "1.1.2" - resolved "https://npm.lisk.com/util.promisify/-/util.promisify-1.1.2.tgz#02b3dbadbb80071eee4c43aed58747afdfc516db" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.2.tgz#02b3dbadbb80071eee4c43aed58747afdfc516db" integrity sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA== dependencies: call-bind "^1.0.2" @@ -5722,96 +5691,51 @@ util.promisify@^1.0.1: uuid@^8.3.0: version "8.3.2" - resolved "https://npm.lisk.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://npm.lisk.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" validator@13.7.0: version "13.7.0" - resolved "https://npm.lisk.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== vary@^1: version "1.1.2" - resolved "https://npm.lisk.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://npm.lisk.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://npm.lisk.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" - resolved "https://npm.lisk.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://npm.lisk.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://npm.lisk.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://npm.lisk.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://npm.lisk.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://npm.lisk.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://npm.lisk.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://npm.lisk.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://npm.lisk.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -5820,34 +5744,34 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://npm.lisk.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://npm.lisk.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wide-align@^1.1.5: version "1.1.5" - resolved "https://npm.lisk.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://npm.lisk.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -5865,12 +5789,12 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://npm.lisk.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.0: version "3.0.3" - resolved "https://npm.lisk.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" @@ -5878,67 +5802,65 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + ws@8.11.0, ws@~8.11.0: version "8.11.0" - resolved "https://npm.lisk.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -ws@^7.4.6: - version "7.5.9" - resolved "https://npm.lisk.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://npm.lisk.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://npm.lisk.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest-ssl@~2.0.0: version "2.0.0" - resolved "https://npm.lisk.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== y18n@^5.0.5: version "5.0.8" - resolved "https://npm.lisk.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://npm.lisk.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://npm.lisk.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://npm.lisk.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://npm.lisk.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zeromq@6.0.0-beta.6: version "6.0.0-beta.6" - resolved "https://npm.lisk.com/zeromq/-/zeromq-6.0.0-beta.6.tgz#2b8934cafce735ea9007fd3074ec8aca9bf11204" + resolved "https://registry.yarnpkg.com/zeromq/-/zeromq-6.0.0-beta.6.tgz#2b8934cafce735ea9007fd3074ec8aca9bf11204" integrity sha512-wLf6M7pBHijl+BRltUL2VoDpgbQcOZetiX8UzycHL8CcYFxYnRrpoG5fi3UX3+Umavz1lk4/dGaQez8qiDgr/Q== dependencies: node-gyp-build "^4.1.0" diff --git a/services/blockchain-coordinator/README.md b/services/blockchain-coordinator/README.md index 342af3780..1649646b2 100644 --- a/services/blockchain-coordinator/README.md +++ b/services/blockchain-coordinator/README.md @@ -29,7 +29,7 @@ A list of the most commonly used environment variables is presented below: - `SERVICE_BROKER`: URL of the microservice message broker (NATS or Redis). - `SERVICE_MESSAGE_QUEUE_REDIS`: URL of the job queue to schedule the indexing jobs (Redis). - `JOB_INTERVAL_INDEX_MISSING_BLOCKS`: Job run interval to index missing blocks. By default, it is set to 0. -- `JOB_SCHEDULE_INDEX_MISSING_BLOCKS`: Job run cron schedule to index missing blocks. By default, it is set to run every 15 minutes (`*/15 * * * *`). +- `JOB_SCHEDULE_INDEX_MISSING_BLOCKS`: Job run cron schedule to index missing blocks. By default, it is set to run every 5 minutes (`*/5 * * * *`). > **Note**: `interval` takes priority over `schedule` and must be greater than 0 to be valid for all the moleculer job configurations. diff --git a/services/blockchain-coordinator/app.js b/services/blockchain-coordinator/app.js index 15e0b705a..bbbc71bf5 100644 --- a/services/blockchain-coordinator/app.js +++ b/services/blockchain-coordinator/app.js @@ -14,19 +14,13 @@ * */ const path = require('path'); -const { - Microservice, - Logger, - LoggerConfig, - Signals, -} = require('lisk-service-framework'); +const { Microservice, Logger, LoggerConfig, Signals } = require('lisk-service-framework'); const config = require('./config'); const packageJson = require('./package.json'); const { init } = require('./shared/scheduler'); const { setAppContext } = require('./shared/utils/request'); -const { waitForNodeToFinishSync } = require('./shared/init'); LoggerConfig(config.log); const logger = Logger(); @@ -37,23 +31,24 @@ const app = Microservice({ brokerTimeout: config.brokerTimeout, // in seconds logger: config.log, events: { - chainNewBlock: async (payload) => { - logger.debug('Received a \'chainNewBlock\' event from connecter.'); + chainNewBlock: async payload => { + logger.debug("Received a 'chainNewBlock' moleculer event from connecter."); Signals.get('newBlock').dispatch(payload); }, - chainDeleteBlock: async (payload) => { - logger.debug('Received a \'chainDeleteBlock\' event from connecter.'); + chainDeleteBlock: async payload => { + logger.debug("Received a 'chainDeleteBlock' moleculer event from connecter."); Signals.get('deleteBlock').dispatch(payload); }, - chainValidatorsChange: async (payload) => { - logger.debug('Received a \'chainValidatorsChange\' event from connecter.'); + chainValidatorsChange: async payload => { + logger.debug("Received a 'chainValidatorsChange' moleculer event from connecter."); Signals.get('newRound').dispatch(payload); }, + systemNodeInfo: async payload => { + logger.debug("Received a 'systemNodeInfo' moleculer event from connecter."); + Signals.get('nodeInfo').dispatch(payload); + }, }, - dependencies: [ - 'connector', - 'indexer', - ], + dependencies: ['connector', 'indexer'], }); setAppContext(app); @@ -61,16 +56,15 @@ setAppContext(app); app.addJobs(path.join(__dirname, 'jobs')); // Run the application -app.run().then(async () => { - logger.info(`Service started ${packageJson.name}.`); - logger.info('Checking for node sync status.'); - - waitForNodeToFinishSync().then(async () => { +app + .run() + .then(async () => { + logger.info(`Service started ${packageJson.name}.`); logger.info('Initializing coordinator activities.'); await init(); + }) + .catch(err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); + logger.fatal(err.stack); + process.exit(1); }); -}).catch(err => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); - logger.fatal(err.stack); - process.exit(1); -}); diff --git a/services/blockchain-coordinator/config.js b/services/blockchain-coordinator/config.js index 01243c5f1..b52443c5c 100644 --- a/services/blockchain-coordinator/config.js +++ b/services/blockchain-coordinator/config.js @@ -27,13 +27,14 @@ const config = { /** * Inter-service message broker */ -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 10; // in seconds /** * External endpoints */ -config.endpoints.messageQueue = process.env.SERVICE_MESSAGE_QUEUE_REDIS || 'redis://127.0.0.1:6379/4'; +config.endpoints.messageQueue = + process.env.SERVICE_MESSAGE_QUEUE_REDIS || 'redis://lisk:password@127.0.0.1:6379/4'; /** * LOGGING @@ -60,6 +61,8 @@ config.queue = { attempts: 5, timeout: 5 * 60 * 1000, // millisecs removeOnComplete: true, + removeOnFail: true, + stackTraceLimit: 0, }, // Inter-microservice message queues @@ -69,11 +72,14 @@ config.queue = { }; config.job = { + progressRefreshInterval: 30 * 1000, // millisecs + // Interval takes priority over schedule and must be greater than 0 to be valid indexMissingBlocks: { - interval: process.env.JOB_INTERVAL_INDEX_MISSING_BLOCKS || 0, - schedule: process.env.JOB_SCHEDULE_INDEX_MISSING_BLOCKS || '*/15 * * * *', - skipThreshold: process.env.INDEX_MISSING_BLOCKS_SKIP_THRESHOLD || 1000, + interval: Number(process.env.JOB_INTERVAL_INDEX_MISSING_BLOCKS) || 0, + schedule: process.env.JOB_SCHEDULE_INDEX_MISSING_BLOCKS || '*/5 * * * *', + skipThreshold: Number(process.env.INDEX_MISSING_BLOCKS_SKIP_THRESHOLD) || 1000, + maxBlocksToSchedule: Number(process.env.INDEX_MISSING_BLOCKS_MAX_SCHEDULE) || 25000, }, }; diff --git a/services/blockchain-coordinator/jest.config.functional.js b/services/blockchain-coordinator/jest.config.functional.js index 1545453df..90b79e014 100644 --- a/services/blockchain-coordinator/jest.config.functional.js +++ b/services/blockchain-coordinator/jest.config.functional.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/functional/*.test.js', - ], + testMatch: ['/tests/functional/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/blockchain-coordinator/jest.config.js b/services/blockchain-coordinator/jest.config.js index 7d1cd81cc..81e2db677 100644 --- a/services/blockchain-coordinator/jest.config.js +++ b/services/blockchain-coordinator/jest.config.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/unit/**/*.test.js', - ], + testMatch: ['/tests/unit/**/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/blockchain-coordinator/jobs/missingBlocks.js b/services/blockchain-coordinator/jobs/missingBlocks.js index 14ff4d2e1..3b5e1e470 100644 --- a/services/blockchain-coordinator/jobs/missingBlocks.js +++ b/services/blockchain-coordinator/jobs/missingBlocks.js @@ -16,9 +16,7 @@ const logger = require('lisk-service-framework').Logger(); const config = require('../config'); -const { - scheduleMissingBlocksIndexing, -} = require('../shared/scheduler'); +const { scheduleMissingBlocksIndexing } = require('../shared/scheduler'); module.exports = [ { @@ -27,13 +25,11 @@ module.exports = [ interval: config.job.indexMissingBlocks.interval, schedule: config.job.indexMissingBlocks.schedule, controller: async () => { - logger.debug('Schedule missing blocks indexing...'); try { - // TODO: Do not schedule if the queue has jobs more than a specified threshold + logger.debug('Attempting to schedule indexing for the missing blocks.'); await scheduleMissingBlocksIndexing(); - logger.info('Successfully scheduled missing blocks indexing.'); } catch (err) { - logger.warn(`Failed to schedule missing blocks indexing due to: ${err.message}.`); + logger.warn(`Failed to schedule missing blocks indexing due to: ${err.message}`); logger.trace(err.stack); } }, diff --git a/services/blockchain-coordinator/package.json b/services/blockchain-coordinator/package.json index 4ab6e59a7..44604a0e9 100644 --- a/services/blockchain-coordinator/package.json +++ b/services/blockchain-coordinator/package.json @@ -1,42 +1,43 @@ { - "name": "lisk-service-blockchain-coordinator", - "version": "0.7.0-rc.1", - "description": "Lisk Service Blockchain Coordinator", - "keywords": [ - "lisk", - "blockchain" - ], - "homepage": "https://github.com/LiskHQ/lisk-service", - "repository": { - "type": "git", - "url": "git@github.com:LiskHQ/lisk-service.git" - }, - "bugs": { - "url": "https://github.com/LiskHQ/lisk-service/issues" - }, - "private": true, - "author": "Lisk Foundation , lightcurve GmbH ", - "license": "Apache-2.0", - "main": "app.js", - "engines": { - "node": ">=18.16 <=18", - "npm": ">=8.5.0" - }, - "scripts": { - "start": "node app.js", - "clean": "rm -rf ./node_modules", - "test": "yarn run test:unit", - "test:unit": "jest --config=jest.config.js --detectOpenHandles --forceExit" - }, - "dependencies": { - "bluebird": "^3.7.2", - "bull": "^4.8.1", - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz" - }, - "devDependencies": { - "@babel/preset-env": "^7.14.0", - "babel-jest": "^27.3.0", - "jest": "^27.3.0", - "jest-when": "^3.5.1" - } + "name": "lisk-service-blockchain-coordinator", + "version": "0.7.2", + "description": "Lisk Service Blockchain Coordinator", + "keywords": [ + "lisk", + "blockchain" + ], + "homepage": "https://github.com/LiskHQ/lisk-service", + "repository": { + "type": "git", + "url": "git@github.com:LiskHQ/lisk-service.git" + }, + "bugs": { + "url": "https://github.com/LiskHQ/lisk-service/issues" + }, + "private": true, + "author": "Lisk Foundation , lightcurve GmbH ", + "license": "Apache-2.0", + "main": "app.js", + "engines": { + "node": ">=18.16 <=18", + "npm": ">=8.5.0" + }, + "scripts": { + "start": "node app.js", + "clean": "rm -rf ./node_modules", + "test": "yarn run test:unit", + "test:unit": "jest --config=jest.config.js --detectOpenHandles --forceExit" + }, + "dependencies": { + "bluebird": "^3.7.2", + "bull": "^4.8.1", + "ioredis": "^5.3.2", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz" + }, + "devDependencies": { + "@babel/preset-env": "^7.14.0", + "babel-jest": "^27.3.0", + "jest": "^29.7.0", + "jest-when": "^3.5.1" + } } diff --git a/services/blockchain-coordinator/shared/constants.js b/services/blockchain-coordinator/shared/constants.js new file mode 100644 index 000000000..4f8fc055a --- /dev/null +++ b/services/blockchain-coordinator/shared/constants.js @@ -0,0 +1,50 @@ +/* + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ +const { Signals } = require('lisk-service-framework'); +const { requestConnector } = require('./utils/request'); + +let genesisHeight; +let currentHeight; + +const getGenesisHeight = async () => { + if (typeof genesisHeight !== 'number') { + genesisHeight = await requestConnector('getGenesisHeight'); + } + return genesisHeight; +}; + +const getCurrentHeight = async () => { + if (typeof currentHeight !== 'number') { + const networkStatus = await requestConnector('getNetworkStatus'); + currentHeight = networkStatus.height; + } + return currentHeight; +}; + +const initNodeConstants = async () => { + const nodeInfoListener = async payload => { + // Caching all node constants + genesisHeight = payload.genesisHeight; + currentHeight = payload.height; + }; + Signals.get('nodeInfo').add(nodeInfoListener); +}; + +module.exports = { + getGenesisHeight, + getCurrentHeight, + initNodeConstants, +}; diff --git a/services/blockchain-coordinator/shared/eventsScheduler.js b/services/blockchain-coordinator/shared/eventsScheduler.js index 7bc8e9550..d4d78a3e3 100644 --- a/services/blockchain-coordinator/shared/eventsScheduler.js +++ b/services/blockchain-coordinator/shared/eventsScheduler.js @@ -13,40 +13,46 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { Signals } = require('lisk-service-framework'); +const { Logger, Signals } = require('lisk-service-framework'); const MessageQueue = require('bull'); const config = require('../config'); -const eventsQueue = new MessageQueue( - config.queue.event.name, - config.endpoints.messageQueue, - { defaultJobOptions: config.queue.defaultJobOptions }, -); +const logger = Logger(); -const scheduleUpdatesOnNewBlock = async (payload) => { - const { blockHeader } = payload; - await eventsQueue.add({ blockHeader, isNewBlock: true }); +const eventMessageQueue = new MessageQueue(config.queue.event.name, config.endpoints.messageQueue, { + defaultJobOptions: config.queue.defaultJobOptions, +}); + +const scheduleUpdatesOnNewBlock = async block => { + const { header } = block; + logger.debug(`Scheduling indexing new block at height: ${header.height}.`); + await eventMessageQueue.add({ block, isNewBlock: true }); + logger.info(`Finished scheduling indexing new block at height: ${header.height}.`); }; -const scheduleDeleteBlock = async (payload) => { - const { blockHeader } = payload; - await eventsQueue.add({ blockHeader, isDeleteBlock: true }); +const scheduleDeleteBlock = async payload => { + const { header } = payload; + logger.debug(`Scheduling updates for the delete block at height: ${header.height}.`); + await eventMessageQueue.add({ header, isDeleteBlock: true }); + logger.info(`Finished scheduling updates for the delete block at height: ${header.height}.`); }; -const scheduleUpdatesOnNewRound = async (payload) => { - const { nextValidators: validators } = payload; - await eventsQueue.add({ validators, isNewRound: true }); +const scheduleUpdatesOnNewRound = async payload => { + const { validators } = payload; + logger.debug('Scheduling updates on new round.'); + await eventMessageQueue.add({ validators, isNewRound: true }); + logger.debug('Finished scheduling updates on new round}.'); }; const initEventsScheduler = async () => { - const newBlockListener = async (payload) => scheduleUpdatesOnNewBlock(payload); + const newBlockListener = async payload => scheduleUpdatesOnNewBlock(payload); Signals.get('newBlock').add(newBlockListener); - const deleteBlockListener = async (payload) => scheduleDeleteBlock(payload); + const deleteBlockListener = async payload => scheduleDeleteBlock(payload); Signals.get('deleteBlock').add(deleteBlockListener); - const newRoundListener = async (payload) => scheduleUpdatesOnNewRound(payload); + const newRoundListener = async payload => scheduleUpdatesOnNewRound(payload); Signals.get('newRound').add(newRoundListener); }; diff --git a/services/blockchain-coordinator/shared/init.js b/services/blockchain-coordinator/shared/init.js index e680ace9c..128aeaac8 100644 --- a/services/blockchain-coordinator/shared/init.js +++ b/services/blockchain-coordinator/shared/init.js @@ -14,39 +14,40 @@ * */ const { Logger } = require('lisk-service-framework'); +const delay = require('lisk-service-framework/src/delay'); -const { requestIndexer } = require('./utils/request'); +const { requestConnector } = require('./utils/request'); const logger = Logger(); const NODE_SYNC_CHECK_INTERVAL = 15 * 1000; // in ms -let intervalID; +const waitForNodeToFinishSync = async () => { + let isNodeSyncComplete = false; -const waitForNodeToFinishSync = (resolve) => new Promise((res) => { - if (!resolve) resolve = res; - if (intervalID) { - clearInterval(intervalID); - intervalID = null; - } + // eslint-disable-next-line no-constant-condition + while (true) { + try { + const networkConstants = await requestConnector('getNetworkStatus'); + const { syncing } = networkConstants; + isNodeSyncComplete = !syncing; + + // eslint-disable-next-line no-unused-expressions + syncing + ? logger.info( + 'Node synchronization in progress. Will wait for node to sync with the network before scheduling indexing.', + ) + : logger.info('Node is fully synchronized with the network.'); + } catch (err) { + logger.warn(`Failed to check node synchronization status.\nError: ${err.message}`); + } + + // Break loop when node is synchronized + if (isNodeSyncComplete) break; - return requestIndexer('network.status').then(({ data: networkConstants }) => { - const { syncing } = networkConstants; - const isNodeSyncComplete = !syncing; - return syncing - ? (() => { - logger.info('Node synchronization in progress. Will wait for node to sync with the network before scheduling indexing.'); - intervalID = setInterval( - waitForNodeToFinishSync.bind(null, resolve), - NODE_SYNC_CHECK_INTERVAL, - ); - })() - : (() => { - logger.info('Node is fully synchronized with the network.'); - return resolve(isNodeSyncComplete); - })(); - }); -}); + await delay(NODE_SYNC_CHECK_INTERVAL); + } +}; module.exports = { waitForNodeToFinishSync, diff --git a/services/blockchain-coordinator/shared/scheduler.js b/services/blockchain-coordinator/shared/scheduler.js index 8bdf0dcb3..fa1ba165d 100644 --- a/services/blockchain-coordinator/shared/scheduler.js +++ b/services/blockchain-coordinator/shared/scheduler.js @@ -16,36 +16,30 @@ const MessageQueue = require('bull'); const BluebirdPromise = require('bluebird'); -const { - Logger, -} = require('lisk-service-framework'); +const { Logger } = require('lisk-service-framework'); const logger = Logger(); const { initEventsScheduler } = require('./eventsScheduler'); const { + getIndexStatus, getMissingBlocks, - getCurrentHeight, - getGenesisHeight, getIndexVerifiedHeight, - setIndexVerifiedHeight, isGenesisBlockIndexed, getLiveIndexingJobCount: getLiveIndexingJobCountFromIndexer, } = require('./sources/indexer'); -const { - getRegisteredModules, - getAllPosValidators, -} = require('./sources/connector'); +const { getAllPosValidators } = require('./sources/connector'); + +const { getCurrentHeight, getGenesisHeight, initNodeConstants } = require('./constants'); +const { range } = require('./utils/array'); const delay = require('./utils/delay'); const config = require('../config'); -const blockMessageQueue = new MessageQueue( - config.queue.block.name, - config.endpoints.messageQueue, - { defaultJobOptions: config.queue.defaultJobOptions }, -); +const blockMessageQueue = new MessageQueue(config.queue.block.name, config.endpoints.messageQueue, { + defaultJobOptions: config.queue.defaultJobOptions, +}); const accountMessageQueue = new MessageQueue( config.queue.account.name, @@ -53,11 +47,10 @@ const accountMessageQueue = new MessageQueue( { defaultJobOptions: config.queue.defaultJobOptions }, ); -let registeredLiskModules; let intervalID; -const REFRESH_INTERVAL = 30000; +const REFRESH_INTERVAL = config.job.progressRefreshInterval; -const getInProgressJobCount = async (queue) => { +const getInProgressJobCount = async queue => { const jobCount = await queue.getJobCounts(); const count = jobCount.active + jobCount.waiting; return count; @@ -69,64 +62,72 @@ const getLiveIndexingJobCount = async () => { return messageQueueJobCount + indexerLiveIndexingJobCount; }; -const getRegisteredModuleAssets = () => registeredLiskModules; - const waitForJobCountToFallBelowThreshold = async () => { const { skipThreshold } = config.job.indexMissingBlocks; - /* eslint-disable no-await-in-loop, no-constant-condition */ + /* eslint-disable no-constant-condition */ while (true) { const count = await getLiveIndexingJobCount(); if (count < skipThreshold) return; - logger.info(`In progress job count (${String(count).padStart(5, ' ')}) not yet below the threshold (${skipThreshold}). Waiting for ${REFRESH_INTERVAL}ms to re-check the job count before scheduling the next batch.`); + logger.info( + `In progress job count (${String(count).padStart( + 5, + ' ', + )}) not yet below the threshold (${skipThreshold}). Waiting for ${REFRESH_INTERVAL}ms to re-check the job count before scheduling the next batch.`, + ); await delay(REFRESH_INTERVAL); } - /* eslint-enable no-await-in-loop, no-constant-condition */ + /* eslint-enable no-constant-condition */ }; -const waitForGenesisBlockIndexing = (resolve) => new Promise((res) => { - if (!resolve) resolve = res; - if (intervalID) { - clearInterval(intervalID); - intervalID = null; - } +const waitForGenesisBlockIndexing = (resolve, reject) => + new Promise((res, rej) => { + if (!resolve) resolve = res; + if (!reject) reject = rej; - return isGenesisBlockIndexed() - .then(async (isIndexed) => { - const jobCount = await getLiveIndexingJobCount(); + if (intervalID) { + clearInterval(intervalID); + intervalID = null; + } + return isGenesisBlockIndexed().then(async isIndexed => { if (isIndexed) { logger.info('Genesis block is indexed.'); return resolve(true); } - if (jobCount <= 1) { - logger.info(`Genesis block indexing is still in progress. Waiting for ${REFRESH_INTERVAL}ms to re-check the genesis block indexing status.`); + const jobCount = await getLiveIndexingJobCount(); + if (jobCount >= 1) { + logger.info( + `Genesis block indexing is still in progress. Waiting for ${REFRESH_INTERVAL}ms to re-check the genesis block indexing status.`, + ); intervalID = setInterval( - waitForGenesisBlockIndexing.bind(null, resolve), + waitForGenesisBlockIndexing.bind(null, resolve, reject), REFRESH_INTERVAL, ); return false; } - throw new Error('Genesis block indexing failed.'); + return reject(new Error('Genesis block indexing failed.')); }); -}); + }); -const scheduleBlocksIndexing = async (heights) => { - const blockHeights = Array.isArray(heights) - ? heights - : [heights]; +const scheduleBlocksIndexing = async heights => { + const blockHeights = Array.isArray(heights) ? heights : [heights]; blockHeights.sort((h1, h2) => h1 - h2); // sort heights in ascending order // Schedule indexing in batches when the list is too long to avoid OOM const MAX_BATCH_SIZE = 15000; const numBatches = Math.ceil(blockHeights.length / MAX_BATCH_SIZE); - if (numBatches > 1) logger.info(`Scheduling the blocks indexing in ${numBatches} smaller batches of ${MAX_BATCH_SIZE}.`); + if (numBatches > 1) + logger.info( + `Scheduling the blocks indexing in ${numBatches} smaller batches of ${MAX_BATCH_SIZE}.`, + ); const isMultiBatch = numBatches > 1; for (let i = 0; i < numBatches; i++) { - /* eslint-disable no-await-in-loop */ + await waitForJobCountToFallBelowThreshold(); + if (isMultiBatch) logger.debug(`Scheduling batch ${i + 1}/${numBatches}.`); const blockHeightsBatch = blockHeights.slice(i * MAX_BATCH_SIZE, (i + 1) * MAX_BATCH_SIZE); @@ -137,25 +138,29 @@ const scheduleBlocksIndexing = async (heights) => { logger.debug(`Scheduled indexing for block at height: ${height}.`); } - if (isMultiBatch) logger.info(`Finished scheduling batch ${i + 1}/${numBatches} (Heights: ${blockHeightsBatch.at(0)} - ${blockHeightsBatch.at(-1)}, ${blockHeightsBatch.length} blocks).`); - await waitForJobCountToFallBelowThreshold(); - /* eslint-enable no-await-in-loop */ + if (isMultiBatch) + logger.info( + `Finished scheduling batch ${i + 1}/${numBatches} (Heights: ${blockHeightsBatch.at( + 0, + )} - ${blockHeightsBatch.at(-1)}, ${blockHeightsBatch.length} blocks).`, + ); } }; -const scheduleValidatorsIndexing = async (validators) => { +const scheduleValidatorsIndexing = async validators => { await BluebirdPromise.map( validators, - async validator => accountMessageQueue.add({ - account: { - ...validator, - isValidator: true, - }, - }), + async validator => + accountMessageQueue.add({ + account: { + ...validator, + isValidator: true, + }, + }), { concurrency: validators.length }, ); - logger.info('Finished scheduling of validators indexing.'); + logger.info(`Finished scheduling of validators indexing with ${validators.length} validators.`); }; const indexGenesisBlock = async () => { @@ -169,95 +174,152 @@ const indexGenesisBlock = async () => { await scheduleBlocksIndexing(genesisHeight); logger.info('Finished scheduling genesis block indexing.'); - await waitForGenesisBlockIndexing() - .catch(async () => { - logger.warn('Genesis indexing failed. Retrying.'); - await indexGenesisBlock(); - }); + await waitForGenesisBlockIndexing().catch(async () => { + logger.warn('Genesis indexing failed. Retrying.'); + await indexGenesisBlock(); + }); }; const initIndexingScheduler = async () => { - // Retrieve enabled modules from connector - registeredLiskModules = await getRegisteredModules(); - // Get all validators and schedule indexing + logger.debug('Initializing validator indexing scheduler.'); const { validators } = await getAllPosValidators(); if (Array.isArray(validators) && validators.length) { await scheduleValidatorsIndexing(validators); } - - // Check for missing blocks - const genesisHeight = await getGenesisHeight(); - const currentHeight = await getCurrentHeight(); - const missingBlocksByHeight = await getMissingBlocks(genesisHeight + 1, currentHeight); - - // Schedule indexing for the missing blocks - if (Array.isArray(missingBlocksByHeight) && missingBlocksByHeight.length) { - await scheduleBlocksIndexing(missingBlocksByHeight); + logger.info('Validator indexing initialization completed successfully.'); + + // Skip scheduling jobs for missing blocks when the jobCount is greater than the threshold + const jobCount = await getLiveIndexingJobCount(); + if (jobCount > config.job.indexMissingBlocks.skipThreshold) { + logger.info( + `Skipping the check for missing blocks. ${jobCount} blocks already queued for indexing.`, + ); + } else { + // Check for missing blocks + logger.debug('Initializing block indexing scheduler.'); + const genesisHeight = await getGenesisHeight(); + const currentHeight = await getCurrentHeight(); + const lastVerifiedHeight = (await getIndexVerifiedHeight()) || genesisHeight + 1; + + logger.debug( + `Checking for missing blocks between heights: ${lastVerifiedHeight} - ${currentHeight}.`, + ); + const missingBlockHeights = await getMissingBlocks(lastVerifiedHeight, currentHeight); + + // Schedule indexing for the missing blocks + if (Array.isArray(missingBlockHeights) && missingBlockHeights.length) { + logger.info( + `${missingBlockHeights.length} missing blocks found between heights: ${lastVerifiedHeight} - ${currentHeight}. Attempting to schedule indexing.`, + ); + await scheduleBlocksIndexing(missingBlockHeights); + logger.info( + `Finished scheduling indexing of ${missingBlockHeights.length} missing blocks between heights: ${lastVerifiedHeight} - ${currentHeight}.`, + ); + } else { + logger.info( + `No missing blocks found between heights: ${lastVerifiedHeight} - ${currentHeight}. Nothing to schedule.`, + ); + } } + logger.info('Block indexing initialization completed successfully.'); }; const scheduleMissingBlocksIndexing = async () => { + if (!(await isGenesisBlockIndexed())) { + logger.info('Genesis block is not yet indexed, skipping missing blocks job run.'); + return; + } + + // Skip job scheduling when the jobCount is greater than the threshold + const jobCount = await getLiveIndexingJobCount(); + if (jobCount > config.job.indexMissingBlocks.skipThreshold) { + logger.info( + `Skipping missing blocks job run. ${jobCount} indexing jobs already in the queue. Current threshold: ${config.job.indexMissingBlocks.skipThreshold}.`, + ); + return; + } + const genesisHeight = await getGenesisHeight(); const currentHeight = await getCurrentHeight(); // Missing blocks are being checked during regular interval // By default they are checked from the blockchain's beginning - const lastVerifiedHeight = await getIndexVerifiedHeight() || genesisHeight; + const lastVerifiedHeight = (await getIndexVerifiedHeight()) || genesisHeight; // Lowest and highest block heights expected to be indexed - const blockIndexHigherRange = currentHeight; const blockIndexLowerRange = lastVerifiedHeight; + const blockIndexHigherRange = Math.min( + blockIndexLowerRange + config.job.indexMissingBlocks.maxBlocksToSchedule, + currentHeight, + ); try { const missingBlocksByHeight = []; - const MAX_QUERY_RANGE = 25000; + const MAX_QUERY_RANGE = 10000; const NUM_BATCHES = Math.ceil((blockIndexHigherRange - blockIndexLowerRange) / MAX_QUERY_RANGE); // Batch into smaller ranges to avoid microservice/DB query timeouts for (let i = 0; i < NUM_BATCHES; i++) { - /* eslint-disable no-await-in-loop */ const batchStartHeight = blockIndexLowerRange + i * MAX_QUERY_RANGE; const batchEndHeight = Math.min(batchStartHeight + MAX_QUERY_RANGE, blockIndexHigherRange); const result = await getMissingBlocks(batchStartHeight, batchEndHeight); if (Array.isArray(result)) { missingBlocksByHeight.push(...result); + } else { + logger.warn( + `getMissingBlocks returned '${typeof result}' type instead of an Array.\nresult: ${JSON.stringify( + result, + null, + '\t', + )}`, + ); + } + } + + // Re-check for tiny gaps and schedule jobs accordingly + const indexStatus = await getIndexStatus(); + if (indexStatus) { + const { chainLength, numBlocksIndexed, lastBlockHeight } = indexStatus.data; + const numStillMissingJobs = chainLength - numBlocksIndexed - missingBlocksByHeight.length; - if (result.length === 0) { - const lastIndexVerifiedHeight = await getIndexVerifiedHeight(); - if (batchEndHeight === (lastIndexVerifiedHeight + MAX_QUERY_RANGE)) { - await setIndexVerifiedHeight(batchEndHeight); - logger.debug(`No missing blocks found in range ${batchStartHeight} - ${batchEndHeight}. Setting index verified height to ${batchEndHeight}.`); - } - } + if (numStillMissingJobs > 0 && numStillMissingJobs <= 100) { + missingBlocksByHeight.push( + ...range(lastBlockHeight - numStillMissingJobs + 1, lastBlockHeight + 1), + ); } - /* eslint-enable no-await-in-loop */ } - if (missingBlocksByHeight.length === 0) { - // Update 'indexVerifiedHeight' when no missing blocks are found - await setIndexVerifiedHeight(blockIndexHigherRange); - logger.info(`No missing blocks found in range ${blockIndexLowerRange} - ${blockIndexHigherRange}. Setting index verified height to ${blockIndexHigherRange}.`); - } else { + if (missingBlocksByHeight.length) { // Schedule indexing for the missing blocks await scheduleBlocksIndexing(missingBlocksByHeight); logger.info('Successfully scheduled missing blocks indexing.'); + } else { + logger.info( + `No missing blocks found in range ${blockIndexLowerRange} - ${blockIndexHigherRange}.`, + ); } } catch (err) { - logger.warn(`Missing blocks indexing scheduling failed due to: ${err.message}.`); + logger.warn(`Scheduling to index missing blocks failed due to: ${err.message}`); logger.trace(err.stack); } }; const init = async () => { - await indexGenesisBlock(); - await initIndexingScheduler(); - await initEventsScheduler(); + try { + await initNodeConstants(); + await indexGenesisBlock(); + await initIndexingScheduler(); + await initEventsScheduler(); + } catch (err) { + logger.error(`Unable to initialize coordinator due to: ${err.message}`); + logger.trace(err.stack); + throw err; + } }; module.exports = { init, - getRegisteredModuleAssets, scheduleMissingBlocksIndexing, }; diff --git a/services/blockchain-coordinator/shared/sources/connector.js b/services/blockchain-coordinator/shared/sources/connector.js index 2248c5ce2..5cc68dddd 100644 --- a/services/blockchain-coordinator/shared/sources/connector.js +++ b/services/blockchain-coordinator/shared/sources/connector.js @@ -15,14 +15,8 @@ */ const { requestConnector } = require('../utils/request'); -const getRegisteredModules = async () => { - const systemMetadata = await requestConnector('getSystemMetadata'); - return systemMetadata.modules; -}; - const getAllPosValidators = async () => requestConnector('getAllPosValidators'); module.exports = { - getRegisteredModules, getAllPosValidators, }; diff --git a/services/blockchain-coordinator/shared/sources/indexer.js b/services/blockchain-coordinator/shared/sources/indexer.js index bca6f364a..3e311d228 100644 --- a/services/blockchain-coordinator/shared/sources/indexer.js +++ b/services/blockchain-coordinator/shared/sources/indexer.js @@ -13,22 +13,11 @@ * Removal or modification of this copyright notice is prohibited. * */ +const config = require('../../config'); const { requestIndexer } = require('../utils/request'); let isGenesisBlockIndexedFlag = false; -const getCurrentHeight = async () => requestIndexer('getCurrentHeight'); - -const getGenesisHeight = async () => requestIndexer('getGenesisHeight'); - -const getMissingBlocks = async (from, to) => requestIndexer( - 'getMissingBlocks', { from, to }, -); - -const getIndexVerifiedHeight = async () => requestIndexer('getIndexVerifiedHeight'); - -const setIndexVerifiedHeight = async (height) => requestIndexer('setIndexVerifiedHeight', { height }); - const isGenesisBlockIndexed = async () => { if (isGenesisBlockIndexedFlag !== true) { isGenesisBlockIndexedFlag = await requestIndexer('isGenesisBlockIndexed'); @@ -36,14 +25,24 @@ const isGenesisBlockIndexed = async () => { return isGenesisBlockIndexedFlag; }; -const getLiveIndexingJobCount = async () => requestIndexer('getLiveIndexingJobCount'); +const getIndexStatus = async () => requestIndexer('index.status').catch(() => null); + +const getMissingBlocks = async (from, to) => + requestIndexer('getMissingBlocks', { from, to }).catch(err => err); + +const getIndexVerifiedHeight = async () => + requestIndexer('getIndexVerifiedHeight').catch(() => null); + +const getLiveIndexingJobCount = async () => + requestIndexer('getLiveIndexingJobCount').catch( + // So that no new jobs are scheduled when indexer is failing to respond + () => config.job.indexMissingBlocks.skipThreshold, + ); module.exports = { + isGenesisBlockIndexed, + getIndexStatus, getMissingBlocks, - getCurrentHeight, - getGenesisHeight, getIndexVerifiedHeight, - setIndexVerifiedHeight, - isGenesisBlockIndexed, getLiveIndexingJobCount, }; diff --git a/tests/jest.config.functional.js b/services/blockchain-coordinator/shared/utils/array.js similarity index 51% rename from tests/jest.config.functional.js rename to services/blockchain-coordinator/shared/utils/array.js index 918daba38..20ec111c1 100644 --- a/tests/jest.config.functional.js +++ b/services/blockchain-coordinator/shared/utils/array.js @@ -1,6 +1,6 @@ /* * LiskHQ/lisk-service - * Copyright © 2021 Lisk Foundation + * Copyright © 2023 Lisk Foundation * * See the LICENSE file at the top-level directory of this distribution * for licensing information. @@ -13,20 +13,17 @@ * Removal or modification of this copyright notice is prohibited. * */ +const range = (start = 0, end, step = 1) => { + if (!end) { + end = start; + start = 0; + } + const arrSize = Math.floor((end - start) / step); + + // 'end' is non-inclusive + return new Array(arrSize).fill().map((_, index) => start + index * step); +}; + module.exports = { - verbose: true, - testMatch: [ - '/functional/template/*.test.js', - ], - testEnvironment: 'node', - setupFilesAfterEnv: [ - 'jest-extended', - '/helpers/setupCustomMatchers.js', - ], - watchPlugins: [ - ['jest-watch-toggle-config', { setting: 'verbose' }], - ['jest-watch-toggle-config', { setting: 'bail' }], - ['jest-watch-toggle-config', { setting: 'notify' }], - 'jest-watch-typeahead/filename', - ], + range, }; diff --git a/services/blockchain-coordinator/shared/utils/request.js b/services/blockchain-coordinator/shared/utils/request.js index f07447b89..793b8dc9f 100644 --- a/services/blockchain-coordinator/shared/utils/request.js +++ b/services/blockchain-coordinator/shared/utils/request.js @@ -16,7 +16,7 @@ let app; -const setAppContext = (h) => app = h; +const setAppContext = h => (app = h); const getAppContext = () => app; diff --git a/services/blockchain-coordinator/tests/unit/shared/utils/array.spec.js b/services/blockchain-coordinator/tests/unit/shared/utils/array.spec.js new file mode 100644 index 000000000..55422f0a9 --- /dev/null +++ b/services/blockchain-coordinator/tests/unit/shared/utils/array.spec.js @@ -0,0 +1,95 @@ +/* + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ +const { range } = require('../../../../shared/utils/array'); + +describe('Unit tests for array utilities', () => { + describe('Test range method', () => { + it('With single input: length 0', async () => { + const n = 0; + const result = range(n); + expect(result).toBeInstanceOf(Array); + expect(result).toHaveLength(n); + }); + + it('With single input: length 10', async () => { + const n = 10; + const result = range(n); + expect(result).toBeInstanceOf(Array); + expect(result).toHaveLength(n); + expect(Math.min.apply(null, result)).toBe(0); + expect(Math.max.apply(null, result)).toBeLessThan(n); + expect(Math.max.apply(null, result)).toBe(n - 1); + }); + + it('With two inputs: start 0, end 5', async () => { + const start = 0; + const end = 5; + const result = range(start, end); + expect(result).toBeInstanceOf(Array); + expect(result).toHaveLength(end - start); + expect(Math.min.apply(null, result)).toBe(start); + expect(Math.max.apply(null, result)).toBeLessThan(end); + expect(Math.max.apply(null, result)).toBe(end - 1); + }); + + it('With two inputs: start 3, end 5', async () => { + const start = 3; + const end = 5; + const result = range(start, end); + expect(result).toBeInstanceOf(Array); + expect(result).toHaveLength(end - start); + expect(Math.min.apply(null, result)).toBe(start); + expect(Math.max.apply(null, result)).toBeLessThan(end); + expect(Math.max.apply(null, result)).toBe(end - 1); + }); + + it('With three inputs: start 2, end 8, step 1', async () => { + const start = 2; + const end = 8; + const step = 1; + const result = range(start, end, step); + expect(result).toBeInstanceOf(Array); + expect(result).toHaveLength(Math.floor((end - start) / step)); + expect(Math.min.apply(null, result)).toBe(start); + expect(Math.max.apply(null, result)).toBeLessThan(end); + expect(Math.max.apply(null, result)).toBe(end - 1 - (end % step)); + }); + + it('With three inputs: start 3, end 5, step 1', async () => { + const start = 3; + const end = 5; + const step = 1; + const result = range(start, end, step); + expect(result).toBeInstanceOf(Array); + expect(result).toHaveLength(Math.floor((end - start) / step)); + expect(Math.min.apply(null, result)).toBe(start); + expect(Math.max.apply(null, result)).toBeLessThan(end); + expect(Math.max.apply(null, result)).toBe(end - 1 - (end % step)); + }); + + it('With three inputs: start 1, end 5, step 2', async () => { + const start = 1; + const end = 5; + const step = 2; + const result = range(start, end, step); + expect(result).toBeInstanceOf(Array); + expect(result).toHaveLength(Math.floor((end - start) / step)); + expect(Math.min.apply(null, result)).toBe(start); + expect(Math.max.apply(null, result)).toBeLessThan(end); + expect(Math.max.apply(null, result)).toBe(end - 1 - (end % step)); + }); + }); +}); diff --git a/services/blockchain-coordinator/yarn.lock b/services/blockchain-coordinator/yarn.lock index 4c131eaad..0f5558ff9 100644 --- a/services/blockchain-coordinator/yarn.lock +++ b/services/blockchain-coordinator/yarn.lock @@ -10,46 +10,46 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -61,40 +61,40 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953" + integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -103,10 +103,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -114,7 +114,7 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -134,24 +134,24 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -171,7 +171,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -180,7 +180,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -210,20 +210,20 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" @@ -234,44 +234,52 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" + integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -320,17 +328,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -348,6 +356,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -405,9 +420,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -419,211 +434,212 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" + integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" + integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -634,198 +650,199 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.14.0": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a" + integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ== dependencies: - "@babel/compat-data" "^7.22.20" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -837,59 +854,58 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" core-js-compat "^3.31.0" semver "^6.3.1" @@ -908,13 +924,13 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.8.4": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" + integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": +"@babel/template@^7.22.15", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== @@ -923,28 +939,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -981,142 +997,164 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" "@jest/transform@^27.5.1": version "27.5.1" @@ -1139,6 +1177,27 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + "@jest/types@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" @@ -1150,6 +1209,18 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -1174,18 +1245,18 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" @@ -1225,34 +1296,34 @@ resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz#0f164b726869f71da3c594171df5ebc1c4b0a407" integrity sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ== -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -1261,24 +1332,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" @@ -1288,69 +1359,68 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== - -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" accepts@~1.3.4: version "1.3.8" @@ -1360,36 +1430,6 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -1488,14 +1528,16 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.3.0, babel-jest@^27.5.1: +babel-jest@^27.3.0: version "27.5.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== @@ -1509,6 +1551,19 @@ babel-jest@^27.3.0, babel-jest@^27.5.1: graceful-fs "^4.2.9" slash "^3.0.0" +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -1530,29 +1585,39 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" + integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz#1fac2b1dcef6274e72b3c72977ed8325cb330591" - integrity sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg== +babel-plugin-polyfill-corejs3@^0.8.5: + version "0.8.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.32.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" + integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -1580,6 +1645,14 @@ babel-preset-jest@^27.5.1: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1596,9 +1669,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -1657,19 +1730,14 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.10, browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: @@ -1709,9 +1777,9 @@ bull@^3.29.3: uuid "^8.3.0" bull@^4.8.1: - version "4.11.3" - resolved "https://registry.yarnpkg.com/bull/-/bull-4.11.3.tgz#466214c8d2aa6ac4fc3133c3616d31a37af4c099" - integrity sha512-DhS0XtiAuejkAY08iGOdDK35eex/yGNoezlWqGJTu9FqWFF/oBjUhpsusE9SXiI4culyDbOoFs+l3ar0VXhFqQ== + version "4.11.5" + resolved "https://registry.yarnpkg.com/bull/-/bull-4.11.5.tgz#59b51d631467fa83c1a3437b7fcf262005bea529" + integrity sha512-9jazyvBBYr55IRDkfJh/mJjWiq8NJUMoCC5zTuBX4JhkZvVXegnwsaIa1jr3x9xwSxGvWEhwQ9lt1jlCT5j6pQ== dependencies: cron-parser "^4.2.1" get-port "^5.1.1" @@ -1726,13 +1794,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1754,10 +1823,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -1787,22 +1856,22 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: @@ -1876,7 +1945,7 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: +convert-source-map@^1.4.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -1891,12 +1960,12 @@ cookie@~0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.31.0, core-js-compat@^3.32.2: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" - integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.34.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.34.0.tgz#61a4931a13c52f8f08d924522bba65f8c94a5f17" + integrity sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA== dependencies: - browserslist "^4.21.10" + browserslist "^4.22.2" cors@~2.8.5: version "2.8.5" @@ -1906,6 +1975,19 @@ cors@~2.8.5: object-assign "^4" vary "^1" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" @@ -1930,32 +2012,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -1968,7 +2024,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1987,11 +2043,6 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -1999,10 +2050,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -2014,16 +2065,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2067,32 +2118,25 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -2112,9 +2156,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -2128,9 +2172,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -2151,25 +2195,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -2179,7 +2223,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -2193,7 +2237,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -2201,13 +2245,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -2243,32 +2287,16 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2309,17 +2337,18 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -2361,7 +2390,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -2373,10 +2402,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -2411,10 +2440,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -2448,15 +2477,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -2491,7 +2520,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2543,11 +2572,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -2566,19 +2595,12 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" @@ -2596,28 +2618,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -2674,12 +2679,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -2759,11 +2764,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2807,11 +2812,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2886,11 +2886,11 @@ isstream@^0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -2901,6 +2901,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -2927,145 +2938,130 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== jest-haste-map@^27.5.1: version "27.5.1" @@ -3087,69 +3083,66 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -3161,83 +3154,86 @@ jest-regex-util@^27.5.1: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" @@ -3249,33 +3245,31 @@ jest-serializer@^27.5.1: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" jest-util@^27.5.1: version "27.5.1" @@ -3289,29 +3283,42 @@ jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" jest-when@^3.5.1: @@ -3328,14 +3335,25 @@ jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: - "@jest/core" "^27.5.1" + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -3350,39 +3368,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3431,9 +3416,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -3482,13 +3467,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -3544,7 +3529,7 @@ lodash.isarguments@^3.1.0: resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3590,9 +3575,9 @@ lru-cache@^8.0.0: integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== luxon@^3.2.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.3.tgz#8ddf0358a9492267ffec6a13675fbaab5551315d" - integrity sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg== + version "3.4.4" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af" + integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA== make-dir@^4.0.0: version "4.0.0" @@ -3671,9 +3656,9 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -3688,9 +3673,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.21: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -3750,16 +3735,16 @@ msgpackr-extract@^3.0.2: "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" msgpackr@^1.5.2: - version "1.9.9" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.9.tgz#ec71e37beb8729280847f683cb0a340eb35ce70f" - integrity sha512-sbn6mioS2w0lq1O6PpGtsv6Gy8roWM+o3o4Sqjd6DudrL/nOugY+KyJUimoWzHnf9OkO0T6broHFnYE/R05t9A== + version "1.10.0" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.10.0.tgz#adbca9c951f06647a808f76bc00a519cf6f7fbe4" + integrity sha512-rVQ5YAQDoZKZLX+h8tNq7FiHrPJoeGHViz3U4wIcykhAEpwF/nH2Vbk8dQxmpX5JavkI8C7pt4bnkJ02ZmRoUw== optionalDependencies: msgpackr-extract "^3.0.2" mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -3801,9 +3786,9 @@ negotiator@0.6.3: integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" @@ -3832,10 +3817,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" @@ -3854,20 +3839,15 @@ nuid@^1.1.4: resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -3875,12 +3855,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -3933,6 +3913,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -3967,11 +3954,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4047,14 +4029,14 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" prettyjson@^1.2.1: version "1.2.5" @@ -4083,10 +4065,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -4096,10 +4078,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" @@ -4115,11 +4097,6 @@ qs@^6.11.0: dependencies: side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -4145,10 +4122,10 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" @@ -4252,11 +4229,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -4269,15 +4241,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.14.2, resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -4288,13 +4260,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" @@ -4324,19 +4289,12 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.5.2, semver@^7.5.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -4377,6 +4335,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -4412,7 +4380,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4484,24 +4452,19 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4551,7 +4514,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4628,7 +4591,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -4642,24 +4605,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -4686,14 +4636,6 @@ tarn@^3.0.2: resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -4708,11 +4650,6 @@ text-decoding@^1.0.0: resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - tildify@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" @@ -4745,23 +4682,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4870,6 +4790,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -4898,11 +4823,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4916,14 +4836,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4947,35 +4859,21 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" vary@^1: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -4987,28 +4885,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -5017,15 +4893,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -5037,13 +4904,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -5079,26 +4946,19 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest-ssl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" @@ -5119,20 +4979,25 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/services/blockchain-indexer/README.md b/services/blockchain-indexer/README.md index 580954cff..03f6dfd69 100644 --- a/services/blockchain-indexer/README.md +++ b/services/blockchain-indexer/README.md @@ -1,11 +1,11 @@ # Lisk Service Blockchain Indexer -The Blockchain Indexer service, in the *indexing* mode, is primarily responsible to index all the blockchain information, based on the scheduled jobs by the Blockchain Coordinator. -In the *data service* mode, it serves user request queries made via the RESTful API or WebSocket-based RPC calls. +The Blockchain Indexer service, in the _indexing_ mode, is primarily responsible to index all the blockchain information, based on the scheduled jobs by the Blockchain Coordinator. +In the _data service_ mode, it serves user request queries made via the RESTful API or WebSocket-based RPC calls. It can run both the indexer and data service modes simultaneously, and is enabled by default. This microservice encapsulates most of the business logic for the Lisk Service API. By default, it only implements the business logic for all the available commands from the Lisk SDK. -The *applyTransaction* and *revertTransaction* hooks implement the indexing logic and are specific to each available command. The *applyTransaction* is triggered when processing an included transaction within a new block while (usually) indexing the `chain_newBlock` event. The *revertTransaction* hook is triggered when processing an included transaction within a deleted block while processing the `chain_deleteBlock` event. All the implemented hooks are grouped [here](./shared/indexer/transactionProcessor). Command specific hooks are always implemented within a single file and are grouped by the module. When interested in extending Lisk Service and implementing hooks for your custom modules, please check the [Extending Indexer](#extending-indexer) section below. +The _applyTransaction_ and _revertTransaction_ hooks implement the indexing logic and are specific to each available command. The _applyTransaction_ is triggered when processing an included transaction within a new block while (usually) indexing the `chain_newBlock` event. The _revertTransaction_ hook is triggered when processing an included transaction within a deleted block while processing the `chain_deleteBlock` event. All the implemented hooks are grouped [here](./shared/indexer/transactionProcessor). Command specific hooks are always implemented within a single file and are grouped by the module. When interested in extending Lisk Service and implementing hooks for your custom modules, please check the [Extending Indexer](#extending-indexer) section below. > Note that this installation instruction is required only for development activities. For a regular Lisk Service user the official [documentation](https://lisk.com/documentation/lisk-service/) is sufficient to run an instance. The global readme file present in the root directory describes running all the microservices at once. @@ -40,10 +40,13 @@ A list of the most commonly used environment variables is presented below: - `ENABLE_INDEXING_MODE`: Boolean flag to enable the Data Indexing mode. - `ENABLE_PERSIST_EVENTS`: Boolean flag to permanently maintain the events in the MySQL database. - `ENABLE_APPLY_SNAPSHOT`: Boolean flag to enable initialization of the index with the Lisk Service DB snapshot. +- `DURABILITY_VERIFY_FREQUENCY`: Frequency in milliseconds to verify if a block is indexed or rolled-back successfully. By default, it is set to 1. - `INDEX_SNAPSHOT_URL`: URL from where the Lisk Service DB snapshot will be downloaded. - `ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP`: Boolean flag to enable downloading snapshot from an (unsecured) HTTP URL. - `LISK_STATIC`: URL of Lisk static assets. - `SERVICE_INDEXER_CACHE_REDIS`: URL of the cache storage (Redis). +- `ACCOUNT_BALANCE_UPDATE_BATCH_SIZE`: Number of accounts for which the balance index is updated at a time. By default, it is set to 1000. +- `INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT`: Maximum number of jobs (in active and waiting state) allowed in the block indexing queue. By default, it is set to 100000. - `JOB_INTERVAL_DELETE_SERIALIZED_EVENTS`: Job run interval to delete serialized events. By default, it is set to 0. - `JOB_SCHEDULE_DELETE_SERIALIZED_EVENTS`: Job run cron schedule to delete serialized events. By default, it is set to run every 5th minute (`*/5 * * * *`). - `JOB_INTERVAL_REFRESH_VALIDATORS`: Job run interval to refresh validators cache. By default, it is set to 0. @@ -62,6 +65,7 @@ A list of the most commonly used environment variables is presented below: - `JOB_SCHEDULE_TRIGGER_ACCOUNT_UPDATES`: Job run cron schedule to trigger account updates. By default, it is set to run every 15th minute (`*/15 * * * *`). - `ESTIMATES_BUFFER_BYTES_LENGTH`: Transaction buffer bytes to consider when estimating the transaction fees. By default, it is set to 0. - `MAINCHAIN_SERVICE_URL`: Mainchain service URL for custom deployments. +- `INVOKE_ALLOWED_METHODS`: List of allowed methods that can be invoked via the `/invoke` API endpoint. The list can be expressed as a CSV. To allow invocation of all endpoints, set it to `*`. To allow invocation of all the registered methods under the specified namespaces, set it similar to `legacy,chain`. To allow invocation of specific methods, set it similar to `chain_getBlocksByIDs,chain_getBlocksByHeight`. > **Note**: `interval` takes priority over `schedule` and must be greater than 0 to be valid for all the moleculer job configurations. @@ -84,16 +88,16 @@ Press `Ctrl+C` in the terminal to stop the process. ## Extending Indexer -The *applyTransaction* and *revertTransaction* hooks are arranged per command in a file and are grouped by the module that they belong to.
+The _applyTransaction_ and _revertTransaction_ hooks are arranged per command in a file and are grouped by the module that they belong to.
Existing hooks are located in the [shared/indexer/transactionProcessor](./shared/indexer/transactionProcessor) directory. When implementing the custom hooks please adhere to the following: - Create a sub-directory with the module name. For example: [token](./shared/indexer/transactionProcessor/token). - Add `index.js` under the above directory. - - Export a `MODULE_NAME` variable. The value must match the *module* name as registered within the application. + - Export a `MODULE_NAME` variable. The value must match the _module_ name as registered within the application. - Create a file specific to the command for which you need to implement the custom hooks. For example: [transfer](./shared/indexer/transactionProcessor/token/transfer.js). - - Export a `COMMAND_NAME` variable. The value must match the *command* name as registered within the application. + - Export a `COMMAND_NAME` variable. The value must match the _command_ name as registered within the application. - Implement the custom logic for the `applyTransaction` and `revertTransaction` hooks. - Export the hooks. - To aid your development, please use the sample templates [here](./shared/indexer/transactionProcessor/0_moduleName). diff --git a/services/blockchain-indexer/app.js b/services/blockchain-indexer/app.js index c062e056d..7b3186a56 100644 --- a/services/blockchain-indexer/app.js +++ b/services/blockchain-indexer/app.js @@ -50,23 +50,24 @@ const defaultBrokerConfig = { logger: config.log, events: { chainNewBlock: async () => { - logger.debug('Received a \'chainNewBlock\' event from connecter.'); + logger.debug("Received a 'chainNewBlock' moleculer event from connecter."); Signals.get('chainNewBlock').dispatch(); }, - 'update.fee_estimates': async (payload) => { - logger.debug('Received a \'update.fee_estimates\' event from fee estimator.'); + systemNodeInfo: async payload => { + logger.debug("Received a 'systemNodeInfo' moleculer event from connecter."); + Signals.get('nodeInfo').dispatch(payload); + }, + 'update.fee_estimates': async payload => { + logger.debug("Received a 'update.fee_estimates' moleculer event from fee-estimator."); await setFeeEstimates(payload); }, }, - dependencies: [ - 'connector', - 'fees', - ], + dependencies: ['connector'], }; // Add routes, events & jobs -const reportErrorAndExitProcess = (err) => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); +const reportErrorAndExitProcess = err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); logger.fatal(err.stack); process.exit(1); }; @@ -85,12 +86,13 @@ initDatabase() setAppContext(tempApp); await tempApp.run(); const { getRegisteredModules } = require('./shared/constants'); - registeredModules.push(...await getRegisteredModules()); + registeredModules.push(...(await getRegisteredModules())); // Stop the temporary node before app definition to avoid context (logger) overwriting issue await tempApp.getBroker().stop(); } const app = Microservice(defaultBrokerConfig); + setAppContext(app); app.addMethods(path.join(__dirname, 'methods')); @@ -103,13 +105,21 @@ initDatabase() // Map 'reward' module to the 'dynamicReward' module endpoints if (module === MODULE.REWARD) module = MODULE.DYNAMIC_REWARD; - const methodsFilePath = path.join(__dirname, 'methods', 'dataService', 'modules', `${module}.js`); + const methodsFilePath = path.join( + __dirname, + 'methods', + 'dataService', + 'modules', + `${module}.js`, + ); try { // eslint-disable-next-line import/no-dynamic-require const methods = require(methodsFilePath); methods.forEach(method => app.addMethod(method)); } catch (err) { - logger.warn(`Moleculer method definitions missing for module: ${module}. Is this expected?\nWas expected at: ${methodsFilePath}.`); + logger.warn( + `Moleculer method definitions missing for module: ${module}. Is this expected?\nWas expected at: ${methodsFilePath}.`, + ); } }); } @@ -120,12 +130,14 @@ initDatabase() app.addJobs(path.join(__dirname, 'jobs', 'indexer')); } - // Set the app context and start the application - setAppContext(app); - app.run().then(async () => { - logger.info(`Service started ${packageJson.name}.`); + // Start the application + app + .run() + .then(async () => { + logger.info(`Service started ${packageJson.name}.`); - await init(); - }).catch(reportErrorAndExitProcess); + await init(); + }) + .catch(reportErrorAndExitProcess); }) .catch(reportErrorAndExitProcess); diff --git a/services/blockchain-indexer/config.js b/services/blockchain-indexer/config.js index d77dae91d..a108c1301 100644 --- a/services/blockchain-indexer/config.js +++ b/services/blockchain-indexer/config.js @@ -17,31 +17,34 @@ const packageJson = require('./package.json'); const config = { endpoints: {}, - jobs: {}, + job: {}, log: { name: packageJson.name, version: packageJson.version, }, - db: {}, }; /** * Inter-service message broker */ -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 10; // in seconds /** * External endpoints */ -config.endpoints.cache = process.env.SERVICE_INDEXER_CACHE_REDIS || 'redis://127.0.0.1:6379/2'; -config.endpoints.volatileRedis = process.env.SERVICE_INDEXER_REDIS_VOLATILE || 'redis://127.0.0.1:6379/3'; -config.endpoints.messageQueue = process.env.SERVICE_MESSAGE_QUEUE_REDIS || 'redis://127.0.0.1:6379/4'; +config.endpoints.cache = + process.env.SERVICE_INDEXER_CACHE_REDIS || 'redis://lisk:password@127.0.0.1:6379/2'; +config.endpoints.volatileRedis = + process.env.SERVICE_INDEXER_REDIS_VOLATILE || 'redis://lisk:password@127.0.0.1:6379/3'; +config.endpoints.messageQueue = + process.env.SERVICE_MESSAGE_QUEUE_REDIS || 'redis://lisk:password@127.0.0.1:6379/4'; // Primary database. Used for both read-write operations. -config.endpoints.mysql = process.env.SERVICE_INDEXER_MYSQL || 'mysql://lisk:password@127.0.0.1:3306/lisk'; +config.endpoints.mysql = + process.env.SERVICE_INDEXER_MYSQL || 'mysql://lisk:password@127.0.0.1:3306/lisk'; // DB replicas against the primary. Used for read-only operations. -config.endpoints.mysqlReplica = process.env.SERVICE_INDEXER_MYSQL_READ_REPLICA - || config.endpoints.mysql; +config.endpoints.mysqlReplica = + process.env.SERVICE_INDEXER_MYSQL_READ_REPLICA || config.endpoints.mysql; config.endpoints.mainchainServiceUrl = process.env.MAINCHAIN_SERVICE_URL; // For custom deployments config.endpoints.liskStatic = process.env.LISK_STATIC || 'https://static-data.lisk.com'; @@ -70,6 +73,8 @@ config.queue = { attempts: 5, timeout: 5 * 60 * 1000, // millisecs removeOnComplete: true, + removeOnFail: true, + stackTraceLimit: 0, }, // Inter-microservice message queues @@ -78,10 +83,6 @@ config.queue = { event: { name: 'Event' }, // Intra-microservice job queues - accountBalanceIndex: { - name: 'AccountBalanceIndex', - concurrency: 1, - }, accountQueueByAddress: { name: 'AccountQueueByAddress', concurrency: 1, @@ -101,18 +102,22 @@ config.queue = { indexBlocks: { name: 'IndexBlocks', concurrency: 1, + scheduledJobsMaxCount: Number(process.env.INDEX_BLOCKS_QUEUE_SCHEDULED_JOB_MAX_COUNT) || 100000, }, indexAccountPublicKey: { - name: 'PendingAccountPublicKeyUpdates', - concurrency: 64, + name: 'PendingPublickeyUpdates', + concurrency: 512, }, indexAccountAddress: { - name: 'PendingAccountAddressUpdates', - concurrency: 64, + name: 'PendingAddressUpdates', + concurrency: 512, }, - updateBlockIndex: { - name: 'UpdateBlockIndexQueue', - concurrency: 1, +}; + +config.set = { + accountBalanceUpdate: { + name: 'AccountBalanceUpdate', + batchSize: Number(process.env.ACCOUNT_BALANCE_UPDATE_BATCH_SIZE) || 1000, }, }; @@ -153,56 +158,70 @@ config.networks = Object.freeze({ ], }); -config.db.isPersistEvents = Boolean( - String(process.env.ENABLE_PERSIST_EVENTS).toLowerCase() === 'true', -); +config.db = { + isPersistEvents: String(process.env.ENABLE_PERSIST_EVENTS).toLowerCase() === 'true', + durabilityVerifyFrequency: Number(process.env.DURABILITY_VERIFY_FREQUENCY) || 1, // In millisecs +}; config.snapshot = { - enable: Boolean(String(process.env.ENABLE_APPLY_SNAPSHOT).toLowerCase() === 'true'), // Disabled by default + enable: String(process.env.ENABLE_APPLY_SNAPSHOT).toLowerCase() === 'true', // Disabled by default url: process.env.INDEX_SNAPSHOT_URL, - allowInsecureHttp: Boolean( - String(process.env.ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP).toLowerCase() === 'true', - ), // Disabled by default + allowInsecureHttp: + String(process.env.ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP).toLowerCase() === 'true', // Disabled by default }; config.job = { // Interval takes priority over schedule and must be greater than 0 to be valid deleteSerializedEvents: { - interval: process.env.JOB_INTERVAL_DELETE_SERIALIZED_EVENTS || 0, + interval: Number(process.env.JOB_INTERVAL_DELETE_SERIALIZED_EVENTS) || 0, schedule: process.env.JOB_SCHEDULE_DELETE_SERIALIZED_EVENTS || '*/5 * * * *', }, refreshValidators: { - interval: process.env.JOB_INTERVAL_REFRESH_VALIDATORS || 0, + interval: Number(process.env.JOB_INTERVAL_REFRESH_VALIDATORS) || 0, schedule: process.env.JOB_SCHEDULE_REFRESH_VALIDATORS || '*/5 * * * *', }, validateValidatorsRank: { - interval: process.env.JOB_INTERVAL_VALIDATE_VALIDATORS_RANK || 0, + interval: Number(process.env.JOB_INTERVAL_VALIDATE_VALIDATORS_RANK) || 0, schedule: process.env.JOB_SCHEDULE_VALIDATE_VALIDATORS_RANK || '4-59/15 * * * *', }, refreshLiveIndexingJobCount: { - interval: process.env.JOB_INTERVAL_REFRESH_INDEX_STATUS || 10, + interval: Number(process.env.JOB_INTERVAL_REFRESH_INDEX_STATUS) || 10, schedule: process.env.JOB_SCHEDULE_REFRESH_INDEX_STATUS || '', }, refreshBlockchainAppsStats: { - interval: process.env.JOB_INTERVAL_REFRESH_BLOCKCHAIN_APPS_STATS || 0, + interval: Number(process.env.JOB_INTERVAL_REFRESH_BLOCKCHAIN_APPS_STATS) || 0, schedule: process.env.JOB_SCHEDULE_REFRESH_BLOCKCHAIN_APPS_STATS || '*/15 * * * *', }, refreshAccountsKnowledge: { - interval: process.env.JOB_INTERVAL_REFRESH_ACCOUNT_KNOWLEDGE || 0, + interval: Number(process.env.JOB_INTERVAL_REFRESH_ACCOUNT_KNOWLEDGE) || 0, schedule: process.env.JOB_SCHEDULE_REFRESH_ACCOUNT_KNOWLEDGE || '*/15 * * * *', }, deleteFinalizedCCUMetadata: { - interval: process.env.JOB_INTERVAL_DELETE_FINALIZED_CCU_METADATA || 0, + interval: Number(process.env.JOB_INTERVAL_DELETE_FINALIZED_CCU_METADATA) || 0, schedule: process.env.JOB_SCHEDULE_DELETE_FINALIZED_CCU_METADATA || '0 2 * * *', }, triggerAccountUpdates: { - interval: process.env.JOB_INTERVAL_TRIGGER_ACCOUNT_UPDATES || 0, + interval: Number(process.env.JOB_INTERVAL_TRIGGER_ACCOUNT_UPDATES) || 0, schedule: process.env.JOB_SCHEDULE_TRIGGER_ACCOUNT_UPDATES || '*/15 * * * *', }, + triggerAccountBalanceUpdates: { + interval: Number(process.env.JOB_INTERVAL_TRIGGER_ACCOUNT_BALANCE_UPDATES) || 10, + schedule: process.env.JOB_SCHEDULE_TRIGGER_ACCOUNT_BALANCE_UPDATES || '', + }, }; config.estimateFees = { - bufferBytesLength: process.env.ESTIMATES_BUFFER_BYTES_LENGTH || 0, + bufferBytesLength: Number(process.env.ESTIMATES_BUFFER_BYTES_LENGTH) || 0, }; +config.invokeAllowedMethods = process.env.INVOKE_ALLOWED_METHODS + ? String(process.env.INVOKE_ALLOWED_METHODS).split(',') + : [ + 'dynamicReward_getExpectedValidatorRewards', + 'token_hasUserAccount', + 'token_getInitializationFees', + 'interoperability_getMinimumMessageFee', + 'txpool_getTransactionsFromPool', + ]; + module.exports = config; diff --git a/services/blockchain-indexer/events/blockchain.js b/services/blockchain-indexer/events/blockchain.js index 6e921edb5..8fec17134 100644 --- a/services/blockchain-indexer/events/blockchain.js +++ b/services/blockchain-indexer/events/blockchain.js @@ -17,9 +17,9 @@ const { Logger, Signals } = require('lisk-service-framework'); const { reloadAllPendingTransactions, - getTransactionsByBlockID, reloadGeneratorsCache, getGenerators, + formatTransactionsInBlock, } = require('../shared/dataService'); const logger = Logger(); @@ -31,15 +31,15 @@ module.exports = [ name: 'block.new', description: 'Keep the block list up-to-date', controller: callback => { - const newBlockListener = async (payload) => { + const newBlockListener = async payload => { try { if (payload && Array.isArray(payload.data)) { const [block] = payload.data; - logger.debug(`New block arrived (${block.id})...`); + logger.debug(`Received new block (${block.id})...`); // Fork detection if (localPreviousBlockId) { if (localPreviousBlockId !== block.previousBlockId) { - logger.debug(`Fork detected at block height ${localPreviousBlockId}`); + logger.debug(`Fork detected at block height ${localPreviousBlockId}.`); } } localPreviousBlockId = block.id; @@ -60,14 +60,19 @@ module.exports = [ name: 'transactions.new', description: 'Keep newly added transactions list up-to-date', controller: callback => { - const newTransactionsListener = async (payload) => { + const newTransactionsListener = async payload => { try { if (payload && Array.isArray(payload.data)) { const [block] = payload.data; - if (block.numberOfTransactions > 0) { - logger.debug(`Block (${block.id}) arrived containing ${block.numberOfTransactions} new transactions`); - const transactionData = await getTransactionsByBlockID(block.id); - callback(transactionData); + const { numberOfTransactions } = block; + + if (numberOfTransactions > 0) { + logger.debug( + `Received block (${block.id}) containing ${block.numberOfTransactions} new transactions.`, + ); + + const formattedTransactions = await formatTransactionsInBlock(block); + callback(formattedTransactions); } } else { const payloadStr = JSON.stringify(payload); @@ -84,7 +89,7 @@ module.exports = [ name: 'block.delete', description: 'Emit the deleted block.', controller: callback => { - const deleteBlockListener = async (payload) => { + const deleteBlockListener = async payload => { try { if (payload && Array.isArray(payload.data)) { callback(payload); @@ -103,13 +108,15 @@ module.exports = [ name: 'transactions.delete', description: 'Emit the list of deleted transactions.', controller: callback => { - const deleteTransactionsListener = async (payload) => { + const deleteTransactionsListener = async payload => { try { if (payload && Array.isArray(payload.data)) { callback(payload); } else { const payloadStr = JSON.stringify(payload); - logger.warn(`Incorrect payload detected for 'deleteTransactions' signal:\n${payloadStr}`); + logger.warn( + `Incorrect payload detected for 'deleteTransactions' signal:\n${payloadStr}`, + ); } } catch (err) { logger.error(`Error occurred when processing 'transactions.delete' event:\n${err.stack}`); @@ -153,11 +160,22 @@ module.exports = [ name: 'index.ready', description: 'Returns true when the index is ready', controller: callback => { - const indexStatusListener = async (payload) => { - logger.debug('Dispatching \'index.ready\' event over websocket'); + const indexStatusListener = async payload => { + logger.debug("Dispatching 'index.ready' event to message broker."); callback(payload); }; Signals.get('blockIndexReady').add(indexStatusListener); }, }, + { + name: 'update.index.status', + description: 'Emit index status updates.', + controller: callback => { + const indexStatusUpdateListener = async payload => { + logger.debug("Dispatching 'update.index.status' event to message broker."); + callback(payload); + }; + Signals.get('updateIndexStatus').add(indexStatusUpdateListener); + }, + }, ]; diff --git a/services/blockchain-indexer/jest.config.functional.js b/services/blockchain-indexer/jest.config.functional.js index a0199cb76..f4a7de8af 100644 --- a/services/blockchain-indexer/jest.config.functional.js +++ b/services/blockchain-indexer/jest.config.functional.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/functional/**/*.test.js', - ], + testMatch: ['/tests/functional/**/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/blockchain-indexer/jest.config.unit.js b/services/blockchain-indexer/jest.config.unit.js index 7d1cd81cc..81e2db677 100644 --- a/services/blockchain-indexer/jest.config.unit.js +++ b/services/blockchain-indexer/jest.config.unit.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/unit/**/*.test.js', - ], + testMatch: ['/tests/unit/**/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/blockchain-indexer/jobs/dataService/blockchainAppsStats.js b/services/blockchain-indexer/jobs/dataService/blockchainAppsStats.js index 0ca55a3e8..e627abd62 100644 --- a/services/blockchain-indexer/jobs/dataService/blockchainAppsStats.js +++ b/services/blockchain-indexer/jobs/dataService/blockchainAppsStats.js @@ -17,9 +17,7 @@ const logger = require('lisk-service-framework').Logger(); const config = require('../../config'); -const { - reloadBlockchainAppsStats, -} = require('../../shared/dataService'); +const { reloadBlockchainAppsStats } = require('../../shared/dataService'); module.exports = [ { diff --git a/services/blockchain-indexer/jobs/dataService/knownAccounts.js b/services/blockchain-indexer/jobs/dataService/knownAccounts.js index d0f2d83d8..41d241a1f 100644 --- a/services/blockchain-indexer/jobs/dataService/knownAccounts.js +++ b/services/blockchain-indexer/jobs/dataService/knownAccounts.js @@ -17,9 +17,7 @@ const logger = require('lisk-service-framework').Logger(); const config = require('../../config'); -const { - reloadAccountKnowledge, -} = require('../../shared/dataService/knownAccounts'); +const { reloadAccountKnowledge } = require('../../shared/dataService/knownAccounts'); module.exports = [ { @@ -33,7 +31,7 @@ module.exports = [ await reloadAccountKnowledge(); logger.info('Successfully initialized accounts knowledge.'); } catch (err) { - logger.warn(`Initializing accounts knowledge failed due to: ${err.message}.`); + logger.warn(`Initializing accounts knowledge failed due to: ${err.message}`); } }, controller: async () => { @@ -42,7 +40,7 @@ module.exports = [ await reloadAccountKnowledge(); logger.info('Successfully reloaded accounts knowledge.'); } catch (err) { - logger.warn(`Reloading accounts knowledge failed due to: ${err.message}.`); + logger.warn(`Reloading accounts knowledge failed due to: ${err.message}`); } }, }, diff --git a/services/blockchain-indexer/jobs/dataService/validators.js b/services/blockchain-indexer/jobs/dataService/validators.js index 1557fcfa8..c79f862da 100644 --- a/services/blockchain-indexer/jobs/dataService/validators.js +++ b/services/blockchain-indexer/jobs/dataService/validators.js @@ -16,10 +16,7 @@ const logger = require('lisk-service-framework').Logger(); const config = require('../../config'); -const { - reloadValidatorCache, - isPosModuleRegistered, -} = require('../../shared/dataService'); +const { reloadValidatorCache, isPosModuleRegistered } = require('../../shared/dataService'); const { validateValidatorCache } = require('../../shared/jobs/validateValidatorsCache'); module.exports = [ @@ -35,7 +32,8 @@ module.exports = [ await reloadValidatorCache(); logger.info('Successfully initialized validators cache.'); } catch (err) { - logger.warn(`Initializing validators cache failed due to: ${err.stack}`); + logger.warn(`Initializing validators cache failed due to: ${err.message}`); + logger.debug(err.stack); } } }, @@ -46,6 +44,7 @@ module.exports = [ await reloadValidatorCache(); } catch (err) { logger.warn(`Reloading validators cache failed due to: ${err.message}`); + logger.debug(err.stack); } } }, @@ -61,7 +60,7 @@ module.exports = [ try { await validateValidatorCache(); } catch (err) { - logger.warn(`Validating validators cache failed due to: ${err.message}.`); + logger.warn(`Validating validators cache failed due to: ${err.message}`); logger.debug(err.stack); } } diff --git a/services/blockchain-indexer/jobs/indexer/deleteFinalizedCCUMetadata.js b/services/blockchain-indexer/jobs/indexer/deleteFinalizedCCUMetadata.js index 7fc8e08ae..12ed84f21 100644 --- a/services/blockchain-indexer/jobs/indexer/deleteFinalizedCCUMetadata.js +++ b/services/blockchain-indexer/jobs/indexer/deleteFinalizedCCUMetadata.js @@ -32,7 +32,7 @@ module.exports = [ await deleteFinalizedCCUMetadata(finalizedHeight); logger.info('Successfully deleted CCUs metadata until the finalized block height.'); } catch (err) { - logger.warn(`'Deleting CCUs metadata failed due to: ${err.message}.`); + logger.warn(`'Deleting CCUs metadata failed due to: ${err.message}`); } }, }, diff --git a/services/blockchain-indexer/jobs/indexer/events.js b/services/blockchain-indexer/jobs/indexer/events.js index 54d8cda5d..e1acb5082 100644 --- a/services/blockchain-indexer/jobs/indexer/events.js +++ b/services/blockchain-indexer/jobs/indexer/events.js @@ -16,22 +16,32 @@ const logger = require('lisk-service-framework').Logger(); const { getFinalizedHeight } = require('../../shared/constants'); +const { getIndexStatus } = require('../../shared/dataService/indexStatus'); const { deleteEventStrTillHeight } = require('../../shared/indexer/utils/events'); const config = require('../../config'); module.exports = [ { name: 'delete.serializedEvents', - description: 'Delete the serialized events until finalized height.', + description: + 'Delete the serialized events until the last indexed block or finalized height, whichever is lower.', interval: config.job.deleteSerializedEvents.interval, schedule: config.job.deleteSerializedEvents.schedule, controller: async () => { try { if (!config.db.isPersistEvents) { + const { data: { genesisHeight, lastIndexedBlockHeight } = {} } = await getIndexStatus(); const finalizedHeight = await getFinalizedHeight(); - logger.debug(`Deleting the serialized events until the finalized height: ${finalizedHeight}.`); - await deleteEventStrTillHeight(finalizedHeight); - logger.info(`Deleted the serialized events until the finalized height: ${finalizedHeight}.`); + + // Default to 0, when getFinalizedHeight doesn't return response + const deleteTillHeight = Math.min( + lastIndexedBlockHeight || genesisHeight || 0, + finalizedHeight, + ); + + logger.debug(`Deleting the serialized events until the height: ${deleteTillHeight}.`); + await deleteEventStrTillHeight(deleteTillHeight); + logger.info(`Deleted the serialized events until the height: ${deleteTillHeight}.`); } } catch (err) { logger.warn(`Deleting serialized events failed due to: ${err.message}`); diff --git a/services/blockchain-indexer/jobs/indexer/updateAccounts.js b/services/blockchain-indexer/jobs/indexer/updateAccounts.js index 68ad11560..3037bbe19 100644 --- a/services/blockchain-indexer/jobs/indexer/updateAccounts.js +++ b/services/blockchain-indexer/jobs/indexer/updateAccounts.js @@ -16,6 +16,7 @@ const logger = require('lisk-service-framework').Logger(); const config = require('../../config'); +const { triggerAccountsBalanceUpdate } = require('../../shared/indexer/accountBalanceIndex'); const { triggerAccountUpdates } = require('../../shared/indexer/accountIndex'); module.exports = [ @@ -30,7 +31,23 @@ module.exports = [ await triggerAccountUpdates(); logger.info('Triggered account updates successfully.'); } catch (err) { - logger.warn(`Triggering account updates failed due to: ${err.message}.`); + logger.warn(`Triggering account updates failed due to: ${err.message}`); + logger.trace(err.stack); + } + }, + }, + { + name: 'trigger.account.balance.updates', + description: 'Triggers balance updates for queued accounts.', + interval: config.job.triggerAccountBalanceUpdates.interval, + schedule: config.job.triggerAccountBalanceUpdates.schedule, + controller: async () => { + try { + logger.debug('Triggering account balance updates.'); + await triggerAccountsBalanceUpdate(); + logger.info('Triggered account balance updates successfully.'); + } catch (err) { + logger.warn(`Triggering account balance updates failed due to: ${err.message}`); logger.trace(err.stack); } }, diff --git a/services/blockchain-indexer/methods/dataService/blockchainApps.js b/services/blockchain-indexer/methods/dataService/blockchainApps.js index 3ee21324c..68c90f46c 100644 --- a/services/blockchain-indexer/methods/dataService/blockchainApps.js +++ b/services/blockchain-indexer/methods/dataService/blockchainApps.js @@ -14,10 +14,7 @@ * */ -const { - getBlockchainAppsStatistics, - getBlockchainApps, -} = require('./controllers/blockchainApps'); +const { getBlockchainAppsStatistics, getBlockchainApps } = require('./controllers/blockchainApps'); module.exports = [ { diff --git a/services/blockchain-indexer/methods/dataService/blocks.js b/services/blockchain-indexer/methods/dataService/blocks.js index b1fbbc88a..acc3b3509 100644 --- a/services/blockchain-indexer/methods/dataService/blocks.js +++ b/services/blockchain-indexer/methods/dataService/blocks.js @@ -14,10 +14,7 @@ * */ -const { - getBlocks, - getBlocksAssets, -} = require('./controllers/blocks'); +const { getBlocks, getBlocksAssets } = require('./controllers/blocks'); module.exports = [ { diff --git a/services/blockchain-indexer/methods/dataService/controllers/blockchainApps.js b/services/blockchain-indexer/methods/dataService/controllers/blockchainApps.js index 08448d01e..95382c051 100644 --- a/services/blockchain-indexer/methods/dataService/controllers/blockchainApps.js +++ b/services/blockchain-indexer/methods/dataService/controllers/blockchainApps.js @@ -16,7 +16,7 @@ const { HTTP } = require('lisk-service-framework'); const dataService = require('../../../shared/dataService'); -const getBlockchainApps = async (params) => { +const getBlockchainApps = async params => { if (await dataService.isMainchain()) { const result = await dataService.getBlockchainApps(params); return result; @@ -25,10 +25,7 @@ const getBlockchainApps = async (params) => { // Redirect call to the mainchain service const serviceURL = await dataService.resolveMainchainServiceURL(); const blockchainAppsEndpoint = `${serviceURL}/api/v3/blockchain/apps`; - const { data: response } = await HTTP.request( - blockchainAppsEndpoint, - params, - ); + const { data: response } = await HTTP.request(blockchainAppsEndpoint, params); return response; }; diff --git a/services/blockchain-indexer/methods/dataService/controllers/blocks.js b/services/blockchain-indexer/methods/dataService/controllers/blocks.js index 75129a745..a50938dd0 100644 --- a/services/blockchain-indexer/methods/dataService/controllers/blocks.js +++ b/services/blockchain-indexer/methods/dataService/controllers/blocks.js @@ -18,7 +18,9 @@ const { Exceptions: { ValidationException }, } = require('lisk-service-framework'); -const { StatusCodes: { BAD_REQUEST } } = HTTP; +const { + StatusCodes: { BAD_REQUEST }, +} = HTTP; const dataService = require('../../../shared/dataService'); diff --git a/services/blockchain-indexer/methods/dataService/controllers/dynamicReward.js b/services/blockchain-indexer/methods/dataService/controllers/dynamicReward.js index 81f6267e4..18dce59ea 100644 --- a/services/blockchain-indexer/methods/dataService/controllers/dynamicReward.js +++ b/services/blockchain-indexer/methods/dataService/controllers/dynamicReward.js @@ -28,7 +28,7 @@ const getDefaultRewardAtHeight = async params => { return defaultReward; }; -const getAnnualInflation = async (params) => { +const getAnnualInflation = async params => { const inflationRate = { data: {}, meta: {}, @@ -59,4 +59,3 @@ module.exports = { getAnnualInflation, getRewardConstants, }; - diff --git a/services/blockchain-indexer/methods/dataService/controllers/events.js b/services/blockchain-indexer/methods/dataService/controllers/events.js index e00d30c30..3926a6622 100644 --- a/services/blockchain-indexer/methods/dataService/controllers/events.js +++ b/services/blockchain-indexer/methods/dataService/controllers/events.js @@ -14,13 +14,15 @@ * */ const { - HTTP: { StatusCodes: { NOT_FOUND } }, + HTTP: { + StatusCodes: { NOT_FOUND }, + }, Exceptions: { NotFoundException }, } = require('lisk-service-framework'); const dataService = require('../../../shared/dataService'); -const getEvents = async (params) => { +const getEvents = async params => { const events = { data: {}, meta: {}, diff --git a/services/blockchain-indexer/methods/dataService/controllers/invoke.js b/services/blockchain-indexer/methods/dataService/controllers/invoke.js index 83d639915..cf98035d1 100644 --- a/services/blockchain-indexer/methods/dataService/controllers/invoke.js +++ b/services/blockchain-indexer/methods/dataService/controllers/invoke.js @@ -18,7 +18,9 @@ const { Exceptions: { ValidationException, ServiceUnavailableException }, } = require('lisk-service-framework'); -const { StatusCodes: { BAD_REQUEST } } = HTTP; +const { + StatusCodes: { BAD_REQUEST }, +} = HTTP; const dataService = require('../../../shared/dataService'); diff --git a/services/blockchain-indexer/methods/dataService/controllers/network.js b/services/blockchain-indexer/methods/dataService/controllers/network.js index 3f057d381..0c63faae5 100644 --- a/services/blockchain-indexer/methods/dataService/controllers/network.js +++ b/services/blockchain-indexer/methods/dataService/controllers/network.js @@ -15,10 +15,7 @@ */ const dataService = require('../../../shared/dataService'); -const { - getTotalStaked, - getTotalSelfStaked, -} = require('../../../shared/utils/pos'); +const { getTotalStaked, getTotalSelfStaked } = require('../../../shared/utils/pos'); const { getTotalLocked } = require('../../../shared/utils/token'); const getNetworkStatus = async () => { diff --git a/services/blockchain-indexer/methods/dataService/controllers/pos.js b/services/blockchain-indexer/methods/dataService/controllers/pos.js index 1f3b09c10..f3711625f 100644 --- a/services/blockchain-indexer/methods/dataService/controllers/pos.js +++ b/services/blockchain-indexer/methods/dataService/controllers/pos.js @@ -14,7 +14,9 @@ * */ const { - HTTP: { StatusCodes: { BAD_REQUEST } }, + HTTP: { + StatusCodes: { BAD_REQUEST }, + }, Exceptions: { ValidationException, InvalidParamsException }, } = require('lisk-service-framework'); @@ -93,7 +95,7 @@ const getStakers = async params => { return stakers; }; -const getPosClaimableRewards = async (params) => { +const getPosClaimableRewards = async params => { const claimableRewards = { data: [], meta: {}, @@ -106,7 +108,7 @@ const getPosClaimableRewards = async (params) => { return claimableRewards; }; -const getPosLockedRewards = async (params) => { +const getPosLockedRewards = async params => { try { const rewardsLocked = { data: [], diff --git a/services/blockchain-indexer/methods/dataService/controllers/token.js b/services/blockchain-indexer/methods/dataService/controllers/token.js index 4dd9acdd6..54232865d 100644 --- a/services/blockchain-indexer/methods/dataService/controllers/token.js +++ b/services/blockchain-indexer/methods/dataService/controllers/token.js @@ -38,7 +38,7 @@ const getTokenBalances = async params => { } }; -const getTokenTopBalances = async (params) => { +const getTokenTopBalances = async params => { const tokenTopBalances = { data: {}, meta: {}, @@ -88,7 +88,7 @@ const getTokenConstants = async () => { return constants; }; -const getAvailableTokenIDs = async (params) => { +const getAvailableTokenIDs = async params => { const tokenIDsResponse = { data: {}, meta: {}, diff --git a/services/blockchain-indexer/methods/dataService/controllers/transactions.js b/services/blockchain-indexer/methods/dataService/controllers/transactions.js index dd283bf6d..11f69e27d 100644 --- a/services/blockchain-indexer/methods/dataService/controllers/transactions.js +++ b/services/blockchain-indexer/methods/dataService/controllers/transactions.js @@ -14,27 +14,24 @@ * */ const { - Exceptions: { - InvalidParamsException, - ValidationException, + Exceptions: { InvalidParamsException, ValidationException }, + HTTP: { + StatusCodes: { NOT_FOUND, BAD_REQUEST }, }, - HTTP: { StatusCodes: { NOT_FOUND, BAD_REQUEST } }, } = require('lisk-service-framework'); const { confirmAddress } = require('../../../shared/dataService/utils/account'); const dataService = require('../../../shared/dataService'); -const getTransactions = async (params) => { +const getTransactions = async params => { try { - const addressParam = [ - 'senderAddress', - 'recipientAddress', - 'address', - ].filter((item) => typeof params[item] === 'string'); + const addressParam = ['senderAddress', 'recipientAddress', 'address'].filter( + item => typeof params[item] === 'string', + ); const addressLookupResult = await Promise.all( - addressParam.map(async (param) => { + addressParam.map(async param => { const paramVal = params[param]; const address = await confirmAddress(paramVal); return address; @@ -72,7 +69,7 @@ const getTransactions = async (params) => { } }; -const getPendingTransactions = async (params) => { +const getPendingTransactions = async params => { const result = await dataService.getPendingTransactions(params); return { data: result.data, @@ -80,13 +77,13 @@ const getPendingTransactions = async (params) => { }; }; -const postTransactions = async (params) => dataService.postTransactions(params); +const postTransactions = async params => dataService.postTransactions(params); const getSchemas = async () => dataService.getSchemas(); -const dryRunTransactions = async (params) => dataService.dryRunTransactions(params); +const dryRunTransactions = async params => dataService.dryRunTransactions(params); -const estimateTransactionFees = async (params) => { +const estimateTransactionFees = async params => { const estimateTransactionFeesRes = { data: {}, meta: {}, diff --git a/services/blockchain-indexer/methods/dataService/generators.js b/services/blockchain-indexer/methods/dataService/generators.js index 2881018c3..457a6ef95 100644 --- a/services/blockchain-indexer/methods/dataService/generators.js +++ b/services/blockchain-indexer/methods/dataService/generators.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getGenerators, -} = require('./controllers/generators'); +const { getGenerators } = require('./controllers/generators'); module.exports = [ { diff --git a/services/blockchain-indexer/methods/dataService/indexStatus.js b/services/blockchain-indexer/methods/dataService/indexStatus.js index 753373344..a7bfc08b9 100644 --- a/services/blockchain-indexer/methods/dataService/indexStatus.js +++ b/services/blockchain-indexer/methods/dataService/indexStatus.js @@ -13,10 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getIndexStatus, - isBlockchainFullyIndexed, -} = require('./controllers/indexStatus'); +const { getIndexStatus, isBlockchainFullyIndexed } = require('./controllers/indexStatus'); module.exports = [ { diff --git a/services/blockchain-indexer/methods/dataService/invoke.js b/services/blockchain-indexer/methods/dataService/invoke.js index 219ecf34d..d26694ba5 100644 --- a/services/blockchain-indexer/methods/dataService/invoke.js +++ b/services/blockchain-indexer/methods/dataService/invoke.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - invokeEndpoint, -} = require('./controllers/invoke'); +const { invokeEndpoint } = require('./controllers/invoke'); module.exports = [ { diff --git a/services/blockchain-indexer/methods/dataService/modules/auth.js b/services/blockchain-indexer/methods/dataService/modules/auth.js index 75afe33b6..3334bf511 100644 --- a/services/blockchain-indexer/methods/dataService/modules/auth.js +++ b/services/blockchain-indexer/methods/dataService/modules/auth.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getAuthAccountInfo, -} = require('../controllers/auth'); +const { getAuthAccountInfo } = require('../controllers/auth'); module.exports = [ { diff --git a/services/blockchain-indexer/methods/dataService/modules/legacy.js b/services/blockchain-indexer/methods/dataService/modules/legacy.js index 20bd2cb09..f5f4c4f8e 100644 --- a/services/blockchain-indexer/methods/dataService/modules/legacy.js +++ b/services/blockchain-indexer/methods/dataService/modules/legacy.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getLegacyAccountInfo, -} = require('../controllers/legacy'); +const { getLegacyAccountInfo } = require('../controllers/legacy'); module.exports = [ { diff --git a/services/blockchain-indexer/methods/dataService/modules/validators.js b/services/blockchain-indexer/methods/dataService/modules/validators.js index 79732068c..392d7303e 100644 --- a/services/blockchain-indexer/methods/dataService/modules/validators.js +++ b/services/blockchain-indexer/methods/dataService/modules/validators.js @@ -13,10 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getValidator, - validateBLSKey, -} = require('../controllers/validator'); +const { getValidator, validateBLSKey } = require('../controllers/validator'); const regex = require('../../../shared/regex'); diff --git a/services/blockchain-indexer/methods/dataService/transactions.js b/services/blockchain-indexer/methods/dataService/transactions.js index 519477ffd..e2c5819e6 100644 --- a/services/blockchain-indexer/methods/dataService/transactions.js +++ b/services/blockchain-indexer/methods/dataService/transactions.js @@ -33,6 +33,7 @@ module.exports = [ address: { optional: true, type: 'string' }, senderAddress: { optional: true, type: 'string' }, recipientAddress: { optional: true, type: 'string' }, + receivingChainID: { optional: true, type: 'string' }, timestamp: { optional: true, type: 'string' }, nonce: { optional: true, type: 'string' }, blockID: { optional: true, type: 'string' }, diff --git a/services/blockchain-indexer/methods/indexer/indexer.js b/services/blockchain-indexer/methods/indexer/indexer.js index 640a52047..1d69fb124 100644 --- a/services/blockchain-indexer/methods/indexer/indexer.js +++ b/services/blockchain-indexer/methods/indexer/indexer.js @@ -16,15 +16,11 @@ const { getMissingBlocks, getIndexVerifiedHeight, - setIndexVerifiedHeight, isGenesisBlockIndexed, getLiveIndexingJobCount, } = require('../../shared/indexer/blockchainIndex'); -const { - getCurrentHeight, - getGenesisHeight, -} = require('../../shared/constants'); +const { getCurrentHeight, getGenesisHeight } = require('../../shared/constants'); module.exports = [ { @@ -50,13 +46,6 @@ module.exports = [ controller: getIndexVerifiedHeight, params: {}, }, - { - name: 'setIndexVerifiedHeight', - controller: setIndexVerifiedHeight, - params: { - height: { optional: false, type: 'number' }, - }, - }, { name: 'isGenesisBlockIndexed', controller: isGenesisBlockIndexed, diff --git a/services/blockchain-indexer/package.json b/services/blockchain-indexer/package.json index d9b3bce04..accef24e9 100644 --- a/services/blockchain-indexer/package.json +++ b/services/blockchain-indexer/package.json @@ -1,6 +1,6 @@ { "name": "lisk-service-blockchain-indexer", - "version": "0.7.0-rc.1", + "version": "0.7.2", "description": "Lisk Service Blockchain Indexer", "keywords": [ "lisk", @@ -30,22 +30,22 @@ "test:functional": "jest --config=jest.config.functional.js --detectOpenHandles --forceExit" }, "dependencies": { - "@liskhq/lisk-cryptography": "4.0.0-rc.1", - "@liskhq/lisk-transactions": "6.0.0-rc.1", - "@liskhq/lisk-utils": "0.4.0-rc.0", - "@liskhq/lisk-validator": "0.8.0-rc.1", + "@liskhq/lisk-cryptography": "4.0.0", + "@liskhq/lisk-transactions": "6.0.0", + "@liskhq/lisk-utils": "0.4.0", + "@liskhq/lisk-validator": "0.8.0", "bluebird": "^3.7.2", "bull": "^4.8.1", "camelcase": "^6.3.0", - "ioredis": "^4.28.5", - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz", + "ioredis": "^5.3.2", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz", "lodash": "^4.17.21", "require-all": "^3.0.0" }, "devDependencies": { "@babel/preset-env": "^7.14.0", "babel-jest": "^27.3.0", - "jest": "^27.3.0", + "jest": "^29.7.0", "jest-when": "^3.5.1", "moleculer": "^0.14.17" } diff --git a/services/blockchain-indexer/shared/constants.js b/services/blockchain-indexer/shared/constants.js index 00c44adcf..32dc539cc 100644 --- a/services/blockchain-indexer/shared/constants.js +++ b/services/blockchain-indexer/shared/constants.js @@ -13,10 +13,12 @@ * Removal or modification of this copyright notice is prohibited. * */ +const { Signals } = require('lisk-service-framework'); const { requestConnector } = require('./utils/request'); let genesisConfig; let genesisHeight; +let currentHeight; let moduleCommands; let registeredModules; let registeredEndpoints; @@ -45,8 +47,11 @@ const getGenesisHeight = async () => { }; const getCurrentHeight = async () => { - const { height } = await requestConnector('getNetworkStatus'); - return height; + if (typeof currentHeight !== 'number') { + const networkStatus = await requestConnector('getNetworkStatus'); + currentHeight = networkStatus.height; + } + return currentHeight; }; const getGenesisConfig = async () => { @@ -54,7 +59,7 @@ const getGenesisConfig = async () => { return genesisConfig; }; -const resolveModuleCommands = (systemMeta) => { +const resolveModuleCommands = systemMeta => { const moduleCommandList = []; systemMeta.forEach(module => { module.commands.forEach(command => { @@ -106,9 +111,7 @@ const getAllRegisteredEndpoints = async () => { const _registeredEndpoints = await getRegisteredEndpoints(); const _engineEndpoints = await getEngineEndpoints(); - allRegisteredEndpoints = _engineEndpoints - .map(e => e.name) - .concat(_registeredEndpoints); + allRegisteredEndpoints = _engineEndpoints.map(e => e.name).concat(_registeredEndpoints); } return allRegisteredEndpoints; @@ -143,6 +146,7 @@ const COMMAND = Object.freeze({ REGISTER_MAINCHAIN: 'registerMainchain', }); +const INVALID_ED25519_KEY = 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'; // LIP-0063 const LENGTH_CHAIN_ID = 4 * 2; // Each byte is represented with 2 nibbles const LENGTH_TOKEN_LOCAL_ID = 4 * 2; // Each byte is represented with 2 nibbles const PATTERN_ANY_TOKEN_ID = '*'; @@ -152,6 +156,7 @@ const LENGTH_NETWORK_ID = 1 * 2; // Each byte is represented with 2 nibbles const LENGTH_BYTE_SIGNATURE = 64; const LENGTH_BYTE_ID = 32; const DEFAULT_NUM_OF_SIGNATURES = 1; +const LENGTH_ID = LENGTH_BYTE_ID * 2; // Each byte is represented with 2 nibbles const MAX_COMMISSION = BigInt('10000'); @@ -175,6 +180,20 @@ const EVENT = Object.freeze({ COMMAND_EXECUTION_RESULT: 'commandExecutionResult', REWARD_MINTED: 'rewardMinted', CCM_SEND_SUCCESS: 'ccmSendSuccess', + CCM_SENT_FAILED: 'ccmSentFailed', +}); + +const CCM_SENT_FAILED_ERROR_MESSAGE = Object.freeze({ + 1: 'Receiving chain is not active.', + 11: 'Failed to pay message fee.', + 12: 'Invalid params provided.', + 13: 'Invalid CCM format.', + 14: 'Sending chain cannot be the receiving chain.', +}); + +const EVENT_TOPIC_PREFIX = Object.freeze({ + TX_ID: '04', + CCM_ID: '05', }); const TRANSACTION_VERIFY_RESULT = { @@ -182,10 +201,23 @@ const TRANSACTION_VERIFY_RESULT = { PENDING: 0, VALID: 1, }; - // @todo retrieve this from Core const DEV_ADDRESS = 'lskh96jgzfftzff2fta2zvsmba9mvs5cnz9ahr3ke'; +const initNodeConstants = async () => { + // Initialize the finalizedHeight at init + await updateFinalizedHeight(); + + const nodeInfoListener = async payload => { + // Caching all node constants + genesisHeight = payload.genesisHeight; + genesisConfig = payload.genesis; + currentHeight = payload.height; + finalizedHeight = payload.finalizedHeight; + }; + Signals.get('nodeInfo').add(nodeInfoListener); +}; + module.exports = { updateFinalizedHeight, getFinalizedHeight, @@ -199,7 +231,9 @@ module.exports = { getSystemMetadata, getEngineEndpoints, getAllRegisteredEndpoints, + initNodeConstants, + INVALID_ED25519_KEY, LENGTH_CHAIN_ID, PATTERN_ANY_TOKEN_ID, PATTERN_ANY_CHAIN_TOKEN_ID, @@ -209,6 +243,7 @@ module.exports = { MODULE_SUB_STORE, COMMAND, EVENT, + EVENT_TOPIC_PREFIX, MAX_COMMISSION, KV_STORE_KEY, TRANSACTION_STATUS, @@ -216,5 +251,7 @@ module.exports = { DEV_ADDRESS, LENGTH_BYTE_SIGNATURE, LENGTH_BYTE_ID, + LENGTH_ID, DEFAULT_NUM_OF_SIGNATURES, + CCM_SENT_FAILED_ERROR_MESSAGE, }; diff --git a/services/blockchain-indexer/shared/dataService/blocks.js b/services/blockchain-indexer/shared/dataService/blocks.js index 4b1db28f6..56687d305 100644 --- a/services/blockchain-indexer/shared/dataService/blocks.js +++ b/services/blockchain-indexer/shared/dataService/blocks.js @@ -35,8 +35,8 @@ const getLastBlock = async () => { return lastBlock; }; -const getTotalNumberOfBlocks = async () => (await getLastBlock()).height - - (await getGenesisHeight()) + 1; +const getTotalNumberOfBlocks = async () => + (await getLastBlock()).height - (await getGenesisHeight()) + 1; const getBlocksFromServer = async params => { const blocks = { @@ -44,9 +44,10 @@ const getBlocksFromServer = async params => { meta: {}, }; - if (params.blockID) logger.debug(`Retrieved block with ID ${params.blockID} from Lisk Core`); - else if (params.height) logger.debug(`Retrieved block with height: ${params.height} from Lisk Core`); - else logger.debug(`Retrieved block with custom search: ${util.inspect(params)} from Lisk Core`); + if (params.blockID) logger.debug(`Retrieved block with ID ${params.blockID} from the node.`); + else if (params.height) + logger.debug(`Retrieved block with height: ${params.height} from the node.`); + else logger.debug(`Retrieved block with custom search: ${util.inspect(params)} from the node.`); const response = await business.getBlocks(params); if (response.data) blocks.data = response.data; @@ -59,6 +60,51 @@ const getBlocksFromServer = async params => { return blocks; }; +const getBlocksTotal = async (params, blocksResponse) => { + let total; + + if (params.generatorAddress) { + total = 'total' in blocksResponse.meta ? blocksResponse.meta.total : null; + } else if (params.blockID || !Number.isNaN(Number(params.height))) { + total = blocksResponse.data.length; + } else if ( + (params.height && params.height.includes(':')) || + (params.timestamp && params.timestamp.includes(':')) + ) { + total = blocksResponse.meta.total; + } else { + total = (await getTotalNumberOfBlocks()) || blocksResponse.data.length; + } + + return total; +}; + +const formatBlock = async (blockInfo, isDeletedBlock = false) => { + const blocksResponse = { + data: [], + meta: {}, + }; + + const response = await business.formatBlock( + { + header: blockInfo.header || {}, + assets: blockInfo.assets || [], + transactions: blockInfo.transactions || [], + }, + isDeletedBlock, + ); + blocksResponse.data.push(response); + + return { + data: blocksResponse.data, + meta: { + count: blocksResponse.data.length, + offset: 0, + total: await getBlocksTotal({}, blocksResponse), + }, + }; +}; + const getBlocks = async (params = {}) => { const blocksResponse = { data: [], @@ -69,24 +115,12 @@ const getBlocks = async (params = {}) => { if (response.data) blocksResponse.data = response.data; if (response.meta) blocksResponse.meta = response.meta; - let total; - if (params.generatorAddress) { - total = blocksResponse.meta.total || null; - } else if (params.blockID || !Number.isNaN(Number(params.height))) { - total = blocksResponse.data.length; - } else if ((params.height && params.height.includes(':')) - || (params.timestamp && params.timestamp.includes(':'))) { - total = blocksResponse.meta.total; - } else { - total = await getTotalNumberOfBlocks(); - } - return { data: blocksResponse.data, meta: { count: blocksResponse.data.length, offset: parseInt(params.offset, 10) || 0, - total, + total: await getBlocksTotal(params, blocksResponse), }, }; }; @@ -104,9 +138,9 @@ const getBlocksAssets = async params => { return blocksAssets; }; -const performLastBlockUpdate = async (newBlock) => { +const performLastBlockUpdate = async newBlock => { try { - logger.debug(`Setting last block to height: ${newBlock.height} (id: ${newBlock.id})`); + logger.debug(`Setting last block to height: ${newBlock.height} (id: ${newBlock.id}).`); await setLastBlock(newBlock); } catch (err) { logger.error(`Error occurred when performing last block update:\n${err.stack}`); @@ -114,6 +148,7 @@ const performLastBlockUpdate = async (newBlock) => { }; module.exports = { + formatBlock, getBlocks, getBlocksAssets, setLastBlock, diff --git a/services/blockchain-indexer/shared/dataService/business/auth/accountInfo.js b/services/blockchain-indexer/shared/dataService/business/auth/accountInfo.js index 7c96b7923..7f00137a8 100644 --- a/services/blockchain-indexer/shared/dataService/business/auth/accountInfo.js +++ b/services/blockchain-indexer/shared/dataService/business/auth/accountInfo.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getIndexedAccountInfo, -} = require('../../utils/account'); +const { getIndexedAccountInfo } = require('../../utils/account'); const { parseToJSONCompatObj } = require('../../../utils/parser'); const { requestConnector } = require('../../../utils/request'); @@ -28,7 +26,10 @@ const getAuthAccountInfo = async params => { const response = await requestConnector('getAuthAccount', { address: params.address }); authInfo.data = parseToJSONCompatObj(response); - const accountInfo = await getIndexedAccountInfo({ address: params.address, limit: 1 }, ['name', 'publicKey']); + const accountInfo = await getIndexedAccountInfo({ address: params.address, limit: 1 }, [ + 'name', + 'publicKey', + ]); authInfo.meta = { address: params.address, name: accountInfo && accountInfo.name ? accountInfo.name : null, diff --git a/services/blockchain-indexer/shared/dataService/business/blocks.js b/services/blockchain-indexer/shared/dataService/business/blocks.js index d46deba66..19ab81f0c 100644 --- a/services/blockchain-indexer/shared/dataService/business/blocks.js +++ b/services/blockchain-indexer/shared/dataService/business/blocks.js @@ -19,13 +19,15 @@ const BluebirdPromise = require('bluebird'); const { CacheRedis, Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const logger = Logger(); -const { getEventsByHeight } = require('./events'); -const { getFinalizedHeight, MODULE, EVENT } = require('../../constants'); +const { getEventsByHeight, getEventsByBlockID } = require('./events'); +const { getFinalizedHeight, MODULE, EVENT, getGenesisHeight } = require('../../constants'); const blocksTableSchema = require('../../database/schema/blocks'); const { getIndexedAccountInfo } = require('../utils/account'); @@ -45,7 +47,7 @@ const latestBlockCache = CacheRedis('latestBlock', config.endpoints.cache); let latestBlock; -const normalizeBlock = async (originalBlock) => { +const normalizeBlock = async (originalBlock, isDeletedBlock = false) => { try { const blocksTable = await getBlocksTable(); @@ -64,21 +66,28 @@ const normalizeBlock = async (originalBlock) => { block.generator = { address: block.generatorAddress, publicKey: generatorInfo ? generatorInfo.publicKey : null, - name: generatorInfo && generatorInfo.name - ? generatorInfo.name - : await getNameByAddress(block.generatorAddress), + name: + generatorInfo && generatorInfo.name + ? generatorInfo.name + : await getNameByAddress(block.generatorAddress), }; } block.isFinal = block.height <= (await getFinalizedHeight()); block.numberOfTransactions = block.transactions.length; - block.numberOfAssets = block.assets.length; + block.numberOfAssets = + block.height !== (await getGenesisHeight()) + ? block.assets.length + : await (async () => { + const response = await requestConnector('getGenesisAssetsLength'); + return Object.entries(response).length; + })(); const { numberOfEvents, reward } = await (async () => { - const [dbResponse] = await blocksTable.find( - { height: block.height, limit: 1 }, - ['numberOfEvents', 'reward'], - ); + const [dbResponse] = await blocksTable.find({ height: block.height, limit: 1 }, [ + 'numberOfEvents', + 'reward', + ]); if (dbResponse) { return { @@ -87,10 +96,13 @@ const normalizeBlock = async (originalBlock) => { }; } - const events = await getEventsByHeight(block.height); + const events = isDeletedBlock + ? await getEventsByBlockID(block.id) + : await getEventsByHeight(block.height); const blockRewardEvent = events.find( - e => [MODULE.REWARD, MODULE.DYNAMIC_REWARD].includes(e.module) - && e.name === EVENT.REWARD_MINTED, + e => + [MODULE.REWARD, MODULE.DYNAMIC_REWARD].includes(e.module) && + e.name === EVENT.REWARD_MINTED, ); return { @@ -108,7 +120,7 @@ const normalizeBlock = async (originalBlock) => { block.transactions = await BluebirdPromise.map( block.transactions, - async (txn) => { + async txn => { txn = await normalizeTransaction(txn); block.size += txn.size; @@ -122,22 +134,22 @@ const normalizeBlock = async (originalBlock) => { return parseToJSONCompatObj(block); } catch (error) { - logger.error(`Error occurred when normalizing block at height ${originalBlock.header.height}, id: ${originalBlock.header.id}:\n${error.stack}`); + logger.error( + `Error occurred when normalizing block at height ${originalBlock.header.height}, id: ${originalBlock.header.id}:\n${error.stack}`, + ); throw error; } }; -const normalizeBlocks = async (blocks) => { - const normalizedBlocks = await BluebirdPromise.map( - blocks, - async block => normalizeBlock(block), - { concurrency: blocks.length }, - ); +const normalizeBlocks = async blocks => { + const normalizedBlocks = await BluebirdPromise.map(blocks, async block => normalizeBlock(block), { + concurrency: blocks.length, + }); return normalizedBlocks; }; -const getBlockByHeight = async (height) => { +const getBlockByHeight = async height => { const response = await requestConnector('getBlockByHeight', { height }); return normalizeBlock(response); }; @@ -170,20 +182,23 @@ const isQueryFromIndex = params => { // For 'isDirectQuery' to be 'true', the request params should contain // exactly one of 'directQueryParams' and all of them must be contained // within 'directQueryParams' or 'defaultQueryParams' - const isDirectQuery = (paramProps.filter(prop => directQueryParams.includes(prop))).length === 1 - && paramProps.every(prop => directQueryParams.concat(defaultQueryParams).includes(prop)); + const isDirectQuery = + paramProps.filter(prop => directQueryParams.includes(prop)).length === 1 && + paramProps.every(prop => directQueryParams.concat(defaultQueryParams).includes(prop)); const sortOrder = params.sort ? params.sort.split(':')[1] : undefined; - const isLatestBlockFetch = (paramProps.length === 1 && params.limit === 1) - || (paramProps.length === 2 - && ((params.limit === 1 && params.offset === 0) - || (sortOrder === 'desc' && (params.limit === 1 || params.offset === 0)) - )) - || (paramProps.length === 3 && params.limit === 1 && params.offset === 0 && sortOrder === 'desc'); + const isLatestBlockFetch = + (paramProps.length === 1 && params.limit === 1) || + (paramProps.length === 2 && + ((params.limit === 1 && params.offset === 0) || + (sortOrder === 'desc' && (params.limit === 1 || params.offset === 0)))) || + (paramProps.length === 3 && params.limit === 1 && params.offset === 0 && sortOrder === 'desc'); return !isDirectQuery && !isLatestBlockFetch; }; +const formatBlock = async (block, isDeletedBlock = false) => normalizeBlock(block, isDeletedBlock); + const getBlocks = async params => { const blocksTable = await getBlocksTable(); const blocks = { @@ -213,14 +228,17 @@ const getBlocks = async params => { try { if (params.ids) { - if (Array.isArray(params.ids) && !params.ids.length) return blocks; - blocks.data = await getBlocksByIDs(params.ids); + if (Array.isArray(params.ids) && params.ids.length) { + blocks.data = await getBlocksByIDs(params.ids); + } } else if (params.id) { blocks.data.push(await getBlockByID(params.id)); - if ('offset' in params && params.limit) blocks.data = blocks.data.slice(params.offset, params.offset + params.limit); + if ('offset' in params && params.limit) + blocks.data = blocks.data.slice(params.offset, params.offset + params.limit); } else if (params.height) { blocks.data.push(await getBlockByHeight(Number(params.height))); - if ('offset' in params && params.limit) blocks.data = blocks.data.slice(params.offset, params.offset + params.limit); + if ('offset' in params && params.limit) + blocks.data = blocks.data.slice(params.offset, params.offset + params.limit); } else { blocks.data.push(await getLastBlock()); } @@ -244,7 +262,7 @@ const filterBlockAssets = (modules, block) => { return filteredBlockAssets; }; -const getBlocksAssets = async (params) => { +const getBlocksAssets = async params => { const blocksTable = await getBlocksTable(); const blockAssets = { data: [], @@ -279,10 +297,14 @@ const getBlocksAssets = async (params) => { const total = await blocksTable.count(params); const blocksFromDB = await blocksTable.find(params, ['id']); - logger.debug(`Requesting blockchain application for blocks with IDs: ${blocksFromDB.map(b => b.id).join(', ')}`); + logger.debug( + `Requesting blockchain application for blocks with IDs: ${blocksFromDB + .map(b => b.id) + .join(', ')}`, + ); blockAssets.data = await BluebirdPromise.map( blocksFromDB, - async (blockFromDB) => { + async blockFromDB => { const block = await getBlockByID(blockFromDB.id); return { @@ -307,6 +329,7 @@ const getBlocksAssets = async (params) => { }; module.exports = { + formatBlock, getBlocks, getFinalizedHeight, normalizeBlocks, diff --git a/services/blockchain-indexer/shared/dataService/business/dynamicReward/annualInflation.js b/services/blockchain-indexer/shared/dataService/business/dynamicReward/annualInflation.js index fcd3c160e..475affeba 100644 --- a/services/blockchain-indexer/shared/dataService/business/dynamicReward/annualInflation.js +++ b/services/blockchain-indexer/shared/dataService/business/dynamicReward/annualInflation.js @@ -15,7 +15,7 @@ */ const { requestConnector } = require('../../../utils/request'); -const getAnnualInflation = async (params) => { +const getAnnualInflation = async params => { const annualInflation = { data: {}, meta: {}, diff --git a/services/blockchain-indexer/shared/dataService/business/dynamicReward/defaultReward.js b/services/blockchain-indexer/shared/dataService/business/dynamicReward/defaultReward.js index 84257b369..eac0bef4e 100644 --- a/services/blockchain-indexer/shared/dataService/business/dynamicReward/defaultReward.js +++ b/services/blockchain-indexer/shared/dataService/business/dynamicReward/defaultReward.js @@ -17,12 +17,14 @@ const { requestConnector } = require('../../../utils/request'); const { getRewardTokenID } = require('./constants'); -const getDefaultRewardAtHeight = async (params) => { +const getDefaultRewardAtHeight = async params => { const response = { data: {}, meta: {}, }; - const defaultRewardResponse = await requestConnector('getDefaultRewardAtHeight', { height: params.height }); + const defaultRewardResponse = await requestConnector('getDefaultRewardAtHeight', { + height: params.height, + }); const rewardTokenID = await getRewardTokenID(); response.data = { diff --git a/services/blockchain-indexer/shared/dataService/business/dynamicReward/index.js b/services/blockchain-indexer/shared/dataService/business/dynamicReward/index.js index c17cb39a6..ee36bd34d 100644 --- a/services/blockchain-indexer/shared/dataService/business/dynamicReward/index.js +++ b/services/blockchain-indexer/shared/dataService/business/dynamicReward/index.js @@ -15,10 +15,7 @@ */ const { getDefaultRewardAtHeight } = require('./defaultReward'); const { getAnnualInflation } = require('./annualInflation'); -const { - getRewardTokenID, - getRewardConstants, -} = require('./constants'); +const { getRewardTokenID, getRewardConstants } = require('./constants'); module.exports = { getDefaultRewardAtHeight, diff --git a/services/blockchain-indexer/shared/dataService/business/events.js b/services/blockchain-indexer/shared/dataService/business/events.js index c06689e74..ccaec58e7 100644 --- a/services/blockchain-indexer/shared/dataService/business/events.js +++ b/services/blockchain-indexer/shared/dataService/business/events.js @@ -19,9 +19,7 @@ const { CacheLRU, Exceptions: { NotFoundException }, DB: { - MySQL: { - getTableInstance, - }, + MySQL: { getTableInstance }, }, } = require('lisk-service-framework'); @@ -30,26 +28,28 @@ const config = require('../../../config'); const blocksTableSchema = require('../../database/schema/blocks'); const eventsTableSchema = require('../../database/schema/events'); const eventTopicsTableSchema = require('../../database/schema/eventTopics'); +const transactionsTableSchema = require('../../database/schema/transactions'); const { requestConnector } = require('../../utils/request'); const { normalizeRangeParam } = require('../../utils/param'); const { parseToJSONCompatObj } = require('../../utils/parser'); +const { LENGTH_ID, EVENT_TOPIC_PREFIX } = require('../../constants'); const MYSQL_ENDPOINT = config.endpoints.mysqlReplica; const getBlocksTable = () => getTableInstance(blocksTableSchema, MYSQL_ENDPOINT); const getEventsTable = () => getTableInstance(eventsTableSchema, MYSQL_ENDPOINT); -const getEventTopicsTable = () => getTableInstance(eventTopicsTableSchema, MYSQL_ENDPOINT); +const getTransactionsTable = () => getTableInstance(transactionsTableSchema, MYSQL_ENDPOINT); const eventCache = CacheLRU('events'); const eventCacheByBlockID = CacheLRU('eventsByBlockID'); -const getEventsByHeightFromNode = async (height) => { +const getEventsByHeightFromNode = async height => { const events = await requestConnector('getEventsByHeight', { height }); return parseToJSONCompatObj(events); }; -const getEventsByHeight = async (height) => { +const getEventsByHeight = async height => { // Get from cache const cachedEvents = await eventCache.get(height); if (cachedEvents) return JSON.parse(cachedEvents); @@ -60,8 +60,9 @@ const getEventsByHeight = async (height) => { const dbEventStrings = await eventsTable.find({ height }, ['eventStr']); if (dbEventStrings.length) { - const dbEvents = dbEventStrings - .map(({ eventStr }) => eventStr ? JSON.parse(eventStr) : eventStr); + const dbEvents = dbEventStrings.map(({ eventStr }) => + eventStr ? JSON.parse(eventStr) : eventStr, + ); await eventCache.set(height, JSON.stringify(dbEvents)); return dbEvents; } @@ -73,7 +74,7 @@ const getEventsByHeight = async (height) => { return eventsFromNode; }; -const getEventsByBlockID = async (blockID) => { +const getEventsByBlockID = async blockID => { // Get from cache const cachedEvents = await eventCacheByBlockID.get(blockID); if (cachedEvents) return JSON.parse(cachedEvents); @@ -83,8 +84,9 @@ const getEventsByBlockID = async (blockID) => { const dbEventStrings = await eventsTable.find({ blockID }, ['eventStr']); if (dbEventStrings.length) { - const dbEvents = dbEventStrings - .map(({ eventStr }) => eventStr ? JSON.parse(eventStr) : eventStr); + const dbEvents = dbEventStrings.map(({ eventStr }) => + eventStr ? JSON.parse(eventStr) : eventStr, + ); eventCacheByBlockID.set(blockID, JSON.stringify(dbEvents)); return dbEvents; } @@ -96,12 +98,13 @@ const cacheEventsByBlockID = async (blockID, events) => { await eventCacheByBlockID.set(blockID, JSON.stringify(events)); }; -const deleteEventsFromCache = async (height) => eventCache.delete(height); +const deleteEventsFromCache = async height => eventCache.delete(height); + +const deleteEventsFromCacheByBlockID = async blockID => eventCacheByBlockID.delete(blockID); -const getEvents = async (params) => { +const getEvents = async params => { const blocksTable = await getBlocksTable(); const eventsTable = await getEventsTable(); - const eventTopicsTable = await getEventTopicsTable(); const events = { data: [], @@ -118,58 +121,122 @@ const getEvents = async (params) => { params = normalizeRangeParam(params, 'timestamp'); } - if (params.topic) { - const { topic, ...remParams } = params; - params = remParams; - params.whereIn = { - property: 'topic', - values: topic.split(','), - }; - } + params.leftOuterJoin = []; + params.whereIn = []; if (params.transactionID) { - const { transactionID, topic, ...remParams } = params; + const { transactionID, ...remParams } = params; params = remParams; - if (!topic) { - params.topic = transactionID; + + const allTxIDs = []; + if (transactionID.length === LENGTH_ID) { + allTxIDs.push(EVENT_TOPIC_PREFIX.TX_ID.concat(transactionID)); } else { - params.andWhere = { topic: transactionID }; + allTxIDs.push(transactionID); } + + params.leftOuterJoin.push({ + targetTable: `${eventTopicsTableSchema.tableName} as eventTopicsForTxID`, + leftColumn: `${eventsTableSchema.tableName}.id`, + rightColumn: `eventTopicsForTxID.eventID`, + }); + + params.whereIn.push({ + property: 'eventTopicsForTxID.topic', + values: allTxIDs, + }); } if (params.senderAddress) { - const { senderAddress, topic, ...remParams } = params; + const { senderAddress, ...remParams } = params; params = remParams; - if (!topic) { - params.topic = senderAddress; - } else { - params.andWhere = { topic: senderAddress }; + + // Get all transactions IDs for sender Address + const transactionsTable = await getTransactionsTable(); + const resultSet = await transactionsTable.find({ senderAddress }, ['id']); + const txIDs = resultSet.map(row => row.id); + + const txIDsToQuery = []; + + // eslint-disable-next-line no-restricted-syntax + for (const txID of txIDs) { + if (txID.length === LENGTH_ID) { + txIDsToQuery.push(EVENT_TOPIC_PREFIX.TX_ID.concat(txID)); + } else { + txIDsToQuery.push(txID); + } } + + params.leftOuterJoin.push({ + targetTable: `${eventTopicsTableSchema.tableName} as eventTopicsForSenderAddress`, + leftColumn: `${eventsTableSchema.tableName}.id`, + rightColumn: `eventTopicsForSenderAddress.eventID`, + }); + + params.whereIn.push({ + property: 'eventTopicsForSenderAddress.topic', + values: txIDsToQuery, + }); } - if (params.blockID) { + if ('blockID' in params) { const { blockID, ...remParams } = params; params = remParams; + const [block] = await blocksTable.find({ id: blockID, limit: 1 }, ['height']); + if (!block || !block.height) { throw new NotFoundException(`Invalid blockID: ${blockID}`); } - if ('height' in params && params.height !== block.height) { - throw new NotFoundException(`Invalid combination of blockID: ${blockID} and height: ${params.height}`); + + if ('height' in params && Number(params.height) !== block.height) { + let heightLowerBound = Number(params.height); + let heightHigherBound = Number(params.height); + + if (typeof params.height === 'string' && params.height.includes(':')) { + const [fromStr, toStr] = params.height.split(':'); + heightLowerBound = Number(fromStr); + heightHigherBound = Number(toStr); + } + + if (block.height < heightLowerBound || block.height > heightHigherBound) { + throw new NotFoundException( + `Invalid combination of blockID: ${blockID} and height: ${params.height}`, + ); + } } params.height = block.height; } - params.leftOuterJoin = { - targetTable: eventsTableSchema.tableName, - leftColumn: `${eventsTableSchema.tableName}.id`, - rightColumn: `${eventTopicsTableSchema.tableName}.eventID`, - }; + if (params.topic) { + const { topic, ...remParams } = params; + params = remParams; - const eventsInfo = await eventTopicsTable.find( - { ...params, distinct: 'eventID' }, - ['eventStr', 'height', 'index'], - ); + const topics = topic.split(','); + const topicsToQuery = []; + topics.forEach(t => { + if (t.length === LENGTH_ID) { + topicsToQuery.push(EVENT_TOPIC_PREFIX.TX_ID.concat(t), EVENT_TOPIC_PREFIX.CCM_ID.concat(t)); + } else { + topicsToQuery.push(t); + } + }); + + params.leftOuterJoin.push({ + targetTable: `${eventTopicsTableSchema.tableName} as eventTopicsForTopic`, + leftColumn: `${eventsTableSchema.tableName}.id`, + rightColumn: `eventTopicsForTopic.eventID`, + }); + + params.whereIn.push({ + property: 'eventTopicsForTopic.topic', + values: topicsToQuery, + }); + } + + const { topic, ...paramsWithoutTopic } = params; + params = paramsWithoutTopic; + const eventsInfo = await eventsTable.find(params, ['eventStr', 'height', 'index']); events.data = await BluebirdPromise.map( eventsInfo, @@ -183,7 +250,10 @@ const getEvents = async (params) => { event = eventsFromCache.find(entry => entry.index === index); } - const [{ id, timestamp } = {}] = await blocksTable.find({ height, limit: 1 }, ['id', 'timestamp']); + const [{ id, timestamp } = {}] = await blocksTable.find({ height, limit: 1 }, [ + 'id', + 'timestamp', + ]); return parseToJSONCompatObj({ ...event, @@ -193,20 +263,8 @@ const getEvents = async (params) => { { concurrency: eventsInfo.length }, ); - let total; - const { order, sort, ...remParams } = params; - - if (isTopicInQuery) { - total = await eventTopicsTable.count( - { ...remParams, groupBy: 'eventID' }, - ['eventID'], - ); - } else { - // If params dosent contain event_topics specific column data - // then count all rows of event table for query optimization. - const { leftOuterJoin, ...remParamsWithoutJoin } = remParams; - total = await eventsTable.count(remParamsWithoutJoin, ['id']); - } + const { order, sort, ...remParamsWithoutOrderAndSort } = params; + const total = await eventsTable.count(remParamsWithoutOrderAndSort); events.meta = { count: events.data.length, @@ -221,6 +279,7 @@ module.exports = { getEvents, getEventsByHeight, cacheEventsByBlockID, + deleteEventsFromCacheByBlockID, getEventsByBlockID, deleteEventsFromCache, }; diff --git a/services/blockchain-indexer/shared/dataService/business/feeEstimates.js b/services/blockchain-indexer/shared/dataService/business/feeEstimates.js index f434a363c..37666a0d2 100644 --- a/services/blockchain-indexer/shared/dataService/business/feeEstimates.js +++ b/services/blockchain-indexer/shared/dataService/business/feeEstimates.js @@ -13,6 +13,8 @@ * Removal or modification of this copyright notice is prohibited. * */ +const logger = require('lisk-service-framework').Logger(); + const { requestFeeEstimator, requestConnector } = require('../../utils/request'); let feeEstimates = { @@ -22,7 +24,7 @@ let feeEstimates = { minFeePerByte: 1000, }; -const setFeeEstimates = async (payload) => { +const setFeeEstimates = async payload => { if (payload && Object.keys(payload).length > 0 && payload.status !== 'SERVICE_UNAVAILABLE') { feeEstimates = payload; } @@ -31,8 +33,12 @@ const setFeeEstimates = async (payload) => { const getFeeEstimates = () => feeEstimates; const getFeeEstimatesFromFeeEstimator = async () => { - const response = await requestFeeEstimator('estimates'); - setFeeEstimates(response); + try { + const response = await requestFeeEstimator('estimates'); + setFeeEstimates(response); + } catch (err) { + logger.warn(`Failed to fetch fee estimates from fee-estimator. Error:${err.message}`); + } return getFeeEstimates(); }; @@ -47,4 +53,7 @@ module.exports = { setFeeEstimates, getFeeEstimates, getFeeEstimatesFromFeeEstimator, + + // for testing + defaultFeeEstimates: feeEstimates, }; diff --git a/services/blockchain-indexer/shared/dataService/business/generators.js b/services/blockchain-indexer/shared/dataService/business/generators.js index 75e5de640..a3e3b46d7 100644 --- a/services/blockchain-indexer/shared/dataService/business/generators.js +++ b/services/blockchain-indexer/shared/dataService/business/generators.js @@ -27,20 +27,18 @@ let generatorsListCache = []; const getGeneratorsInfo = async () => { const { list: generatorsList } = await requestConnector('getGenerators'); - const generators = await BluebirdPromise.map( - generatorsList, - async generator => { - const { name, publicKey } = await getIndexedAccountInfo( - { address: generator.address, limit: 1 }, - ['name', 'publicKey'], - ); + const generators = await BluebirdPromise.map(generatorsList, async generator => { + const { name, publicKey } = await getIndexedAccountInfo( + { address: generator.address, limit: 1 }, + ['name', 'publicKey'], + ); - return { - ...generator, - name: name || await getNameByAddress(generator.address), - publicKey, - }; - }); + return { + ...generator, + name: name || (await getNameByAddress(generator.address)), + publicKey, + }; + }); return generators; }; @@ -69,4 +67,7 @@ module.exports = { reloadGeneratorsCache, getGenerators, getNumberOfGenerators, + + // For unit tests + getGeneratorsInfo, }; diff --git a/services/blockchain-indexer/shared/dataService/business/index.js b/services/blockchain-indexer/shared/dataService/business/index.js index f3d160da5..8b0878063 100644 --- a/services/blockchain-indexer/shared/dataService/business/index.js +++ b/services/blockchain-indexer/shared/dataService/business/index.js @@ -13,13 +13,10 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getGenerators, - getNumberOfGenerators, - reloadGeneratorsCache, -} = require('./generators'); +const { getGenerators, getNumberOfGenerators, reloadGeneratorsCache } = require('./generators'); const { + formatBlock, getBlocks, getFinalizedHeight, normalizeBlocks, @@ -35,12 +32,10 @@ const { getTransactionsByBlockID, getTransactionsByIDs, normalizeTransaction, + formatTransactionsInBlock, } = require('./transactions'); -const { - getPendingTransactions, - loadAllPendingTransactions, -} = require('./pendingTransactions'); +const { getPendingTransactions, loadAllPendingTransactions } = require('./pendingTransactions'); const { getBlockchainApps, @@ -90,6 +85,7 @@ const { getEvents, getEventsByHeight, cacheEventsByBlockID, + deleteEventsFromCacheByBlockID, getEventsByBlockID, deleteEventsFromCache, } = require('./events'); @@ -103,6 +99,7 @@ const { getNetworkPeersStatistics, } = require('./network'); const { estimateTransactionFees } = require('./transactionsEstimateFees'); +// const { isMainchain, resolveMainchainServiceURL } = require('./mainchain'); const { invokeEndpoint } = require('./invoke'); const { setFeeEstimates, getFeeEstimates, initFeeEstimates } = require('./feeEstimates'); @@ -118,6 +115,7 @@ module.exports = { reloadGeneratorsCache, // Blocks + formatBlock, getBlocks, getFinalizedHeight, normalizeBlocks, @@ -137,11 +135,13 @@ module.exports = { postTransactions, dryRunTransactions, estimateTransactionFees, + formatTransactionsInBlock, // Events getEvents, getEventsByHeight, cacheEventsByBlockID, + deleteEventsFromCacheByBlockID, getEventsByBlockID, deleteEventsFromCache, diff --git a/services/blockchain-indexer/shared/dataService/business/interoperability/blockchainApps.js b/services/blockchain-indexer/shared/dataService/business/interoperability/blockchainApps.js index 826b506bc..981220cf7 100644 --- a/services/blockchain-indexer/shared/dataService/business/interoperability/blockchainApps.js +++ b/services/blockchain-indexer/shared/dataService/business/interoperability/blockchainApps.js @@ -1,20 +1,24 @@ /* -* LiskHQ/lisk-service -* Copyright © 2022 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2022 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const BluebirdPromise = require('bluebird'); -const { DB: { MySQL: { getTableInstance } } } = require('lisk-service-framework'); +const { + DB: { + MySQL: { getTableInstance }, + }, +} = require('lisk-service-framework'); const { getNetworkStatus } = require('../network'); const { requestConnector } = require('../../../utils/request'); const { LENGTH_NETWORK_ID, LENGTH_TOKEN_ID } = require('../../../constants'); @@ -39,8 +43,7 @@ const getLSKTokenID = async () => { return lskTokenID; }; -const getBlockchainApps = async (params) => { - // TODO: Update implementation when interoperability_getOwnChainAccount is available +const getBlockchainApps = async params => { const blockchainAppsTable = await getBlockchainAppsTable(); const blockchainAppsInfo = { @@ -88,7 +91,9 @@ const getBlockchainApps = async (params) => { Object.getOwnPropertyNames(blockchainAppsTableSchema.schema), ); - const { data: { chainID } } = await getNetworkStatus(); + const { + data: { chainID }, + } = await getNetworkStatus(); const { escrowedAmounts } = await requestConnector('getEscrowedAmounts'); const tokenIdForLSK = await getLSKTokenID(); @@ -103,10 +108,14 @@ const getBlockchainApps = async (params) => { return { ...blockchainAppInfo, escrowedLSK, - escrow: escrow.length ? escrow : [{ - tokenID: chainID.substring(0, LENGTH_NETWORK_ID).padEnd(LENGTH_TOKEN_ID, '0'), - amount: '0', - }], + escrow: escrow.length + ? escrow + : [ + { + tokenID: chainID.substring(0, LENGTH_NETWORK_ID).padEnd(LENGTH_TOKEN_ID, '0'), + amount: '0', + }, + ], }; }, { concurrency: dbBlockchainApps.length }, diff --git a/services/blockchain-indexer/shared/dataService/business/interoperability/blockchainAppsStats.js b/services/blockchain-indexer/shared/dataService/business/interoperability/blockchainAppsStats.js index 753bb9268..8e6d89af1 100644 --- a/services/blockchain-indexer/shared/dataService/business/interoperability/blockchainAppsStats.js +++ b/services/blockchain-indexer/shared/dataService/business/interoperability/blockchainAppsStats.js @@ -1,18 +1,18 @@ /* -* LiskHQ/lisk-service -* Copyright © 2022 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2022 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const { Logger, DB: { @@ -49,16 +49,21 @@ const getBlockchainAppsStatistics = async () => { const reloadBlockchainAppsStats = async () => { try { - // TODO: Update implementation once interoperability_getOwnChainAccount is available const blockchainAppsTable = await getBlockchainAppsTable(); const numActivatedChains = await blockchainAppsTable.count({ status: APP_STATUS.ACTIVATED }); const numRegisteredChains = await blockchainAppsTable.count({ status: APP_STATUS.REGISTERED }); const numTerminatedChains = await blockchainAppsTable.count({ status: APP_STATUS.TERMINATED }); - const { totalSupply: [{ totalSupply }] } = await requestConnector('getTotalSupply'); - const { data: { height } } = await getNetworkStatus(); - const { data: { rate: annualInflation } } = await getAnnualInflation({ height }); + const { + totalSupply: [{ totalSupply }], + } = await requestConnector('getTotalSupply'); + const { + data: { height }, + } = await getNetworkStatus(); + const { + data: { rate: annualInflation }, + } = await getAnnualInflation({ height }); const { amount: totalStaked } = await getTotalStaked(); logger.debug('Updating blockchain apps statistics cache.'); diff --git a/services/blockchain-indexer/shared/dataService/business/interoperability/channel.js b/services/blockchain-indexer/shared/dataService/business/interoperability/channel.js index 3b9e53257..d6ff87836 100644 --- a/services/blockchain-indexer/shared/dataService/business/interoperability/channel.js +++ b/services/blockchain-indexer/shared/dataService/business/interoperability/channel.js @@ -30,19 +30,24 @@ const resolveMainchainServiceURL = async () => { const chainID = await getCurrentChainID(); const networkID = chainID.substring(0, LENGTH_NETWORK_ID); const mainchainID = networkID.padEnd(LENGTH_CHAIN_ID, '0'); - const [{ serviceURL } = {}] = config.networks.LISK - .filter(networkInfo => networkInfo.chainID === mainchainID); + const [{ serviceURL } = {}] = config.networks.LISK.filter( + networkInfo => networkInfo.chainID === mainchainID, + ); return serviceURL; }; -const resolveChannelInfo = async (inputChainID) => { - if (inputChainID === await getCurrentChainID()) { - throw new ValidationException('Channel info cannot be determined when receivingChainID and currentChainID are same.'); +const resolveChannelInfo = async inputChainID => { + if (inputChainID === (await getCurrentChainID())) { + throw new ValidationException( + 'Channel info cannot be determined when receivingChainID and currentChainID are same.', + ); } try { - if ((await isMainchain() && !regex.MAINCHAIN_ID.test(inputChainID)) - || (!await isMainchain() && regex.MAINCHAIN_ID.test(inputChainID))) { + if ( + ((await isMainchain()) && !regex.MAINCHAIN_ID.test(inputChainID)) || + (!(await isMainchain()) && regex.MAINCHAIN_ID.test(inputChainID)) + ) { const channelInfo = await requestConnector('getChannel', { chainID: inputChainID }); return channelInfo; } @@ -50,22 +55,23 @@ const resolveChannelInfo = async (inputChainID) => { // Redirect call to the mainchain service const serviceURL = await resolveMainchainServiceURL(); const invokeEndpoint = `${serviceURL}/api/v3/invoke`; - const { data: response } = await HTTP.post( - invokeEndpoint, - { - endpoint: 'interoperability_getChannel', - params: { chainID: inputChainID }, - }, - ); + const { data: response } = await HTTP.post(invokeEndpoint, { + endpoint: 'interoperability_getChannel', + params: { chainID: inputChainID }, + }); if (response.error) { - throw new ValidationException(`Channel info is not available for the chain: ${inputChainID}.`); + throw new ValidationException( + `Channel info is not available for the chain: ${inputChainID}.`, + ); } const { data: channelInfo } = response; return channelInfo; } catch (error) { - throw new ValidationException(`Error while retrieving channel info for the chain: ${inputChainID}.\nError: ${error}`); + throw new ValidationException( + `Error while retrieving channel info for the chain: ${inputChainID}.\nError: ${error}`, + ); } }; diff --git a/services/blockchain-indexer/shared/dataService/business/interoperability/constants.js b/services/blockchain-indexer/shared/dataService/business/interoperability/constants.js index 11375be18..4f5a97252 100644 --- a/services/blockchain-indexer/shared/dataService/business/interoperability/constants.js +++ b/services/blockchain-indexer/shared/dataService/business/interoperability/constants.js @@ -1,18 +1,18 @@ /* -* LiskHQ/lisk-service -* Copyright © 2022 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2022 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const { requestConnector } = require('../../../utils/request'); let moduleConstants; @@ -23,7 +23,6 @@ const APP_STATUS = { TERMINATED: 'terminated', }; -// TODO: Update values from SDK once the discussion is concluded: https://github.com/LiskHQ/discussions/discussions/101 const CHAIN_STATUS = Object.freeze({ 0: 'registered', 1: 'activated', diff --git a/services/blockchain-indexer/shared/dataService/business/invoke.js b/services/blockchain-indexer/shared/dataService/business/invoke.js index 2d2e2c031..7dfc42ef1 100644 --- a/services/blockchain-indexer/shared/dataService/business/invoke.js +++ b/services/blockchain-indexer/shared/dataService/business/invoke.js @@ -16,7 +16,9 @@ const util = require('util'); const { validator } = require('@liskhq/lisk-validator'); -const { Exceptions: { ValidationException, ServiceUnavailableException } } = require('lisk-service-framework'); +const { + Exceptions: { ValidationException, ServiceUnavailableException }, +} = require('lisk-service-framework'); const { requestConnector } = require('../../utils/request'); const { @@ -25,13 +27,16 @@ const { getEngineEndpoints, getAllRegisteredEndpoints, } = require('../../constants'); +const config = require('../../../config'); + +const INVOKE_ALLOWED_METHODS = config.invokeAllowedMethods; -const checkIfEndpointRegistered = async (endpoint) => { +const checkIfEndpointRegistered = async endpoint => { const allRegisteredEndpoints = await getAllRegisteredEndpoints(); return allRegisteredEndpoints.includes(endpoint); }; -const validateEndpointParams = async (invokeEndpointParams) => { +const validateEndpointParams = async invokeEndpointParams => { let requestParamsSchema; const registeredEndpoints = await getRegisteredEndpoints(); @@ -41,47 +46,70 @@ const validateEndpointParams = async (invokeEndpointParams) => { if (registeredEndpoints.includes(invokeEndpointParams.endpoint)) { const metadata = await getSystemMetadata(); const [moduleName, endpointName] = invokeEndpointParams.endpoint.split('_'); - const endpointInfo = (metadata.modules - .find(module => module.name === moduleName)).endpoints - .find(endpoint => endpoint.name === endpointName); + const endpointInfo = metadata.modules + .find(module => module.name === moduleName) + .endpoints.find(endpoint => endpoint.name === endpointName); requestParamsSchema = endpointInfo.request; } else { const engineEndpoints = await getEngineEndpoints(); - const endpointInfo = engineEndpoints - .find(endpoint => endpoint.name === invokeEndpointParams.endpoint); + const endpointInfo = engineEndpoints.find( + endpoint => endpoint.name === invokeEndpointParams.endpoint, + ); requestParamsSchema = endpointInfo.request; } if (requestParamsSchema) { validator.validate(requestParamsSchema, invokeEndpointParams.params); - } else if ('params' in invokeEndpointParams - && Object.getOwnPropertyNames(invokeEndpointParams.params).length) { + } else if ( + 'params' in invokeEndpointParams && + Object.getOwnPropertyNames(invokeEndpointParams.params).length + ) { // Throw error when params passed but requested endpoint doesn't support any params throw new Error('Endpoint does not support request parameters.'); } }; +const checkIfEndpointInvocationAllowed = endpoint => { + if (INVOKE_ALLOWED_METHODS.includes('*')) { + return true; + } + + return INVOKE_ALLOWED_METHODS.some(allowedMethod => endpoint.startsWith(allowedMethod)); +}; const invokeEndpoint = async params => { const invokeEndpointRes = { data: {}, meta: {}, }; + const isEndpointAllowed = checkIfEndpointInvocationAllowed(params.endpoint); + if (!isEndpointAllowed) { + throw new ValidationException( + `Proxy invocation of endpoint '${params.endpoint}' is not allowed.`, + ); + } + const isRegisteredEndpoint = await checkIfEndpointRegistered(params.endpoint); if (!isRegisteredEndpoint) { throw new ValidationException(`Endpoint '${params.endpoint}' is not registered.`); } await validateEndpointParams(params).catch(error => { - throw new ValidationException(`Invalid params supplied for endpoint '${params.endpoint}': \n${util.inspect(params.params)}.\nError: ${error}`); + throw new ValidationException( + `Invalid params supplied for endpoint '${params.endpoint}': \n${util.inspect( + params.params, + )}.\nError: ${error}`, + ); }); try { invokeEndpointRes.data = await requestConnector('invokeEndpoint', params); invokeEndpointRes.meta = params; } catch (err) { - throw new ServiceUnavailableException('Node is not reachable at the moment.'); + throw new ServiceUnavailableException( + `Node is not reachable at the moment.\nError: ${err.message}`, + ); } return invokeEndpointRes; diff --git a/services/blockchain-indexer/shared/dataService/business/mainchain.js b/services/blockchain-indexer/shared/dataService/business/mainchain.js deleted file mode 100644 index 383cf6d4e..000000000 --- a/services/blockchain-indexer/shared/dataService/business/mainchain.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * LiskHQ/lisk-service - * Copyright © 2023 Lisk Foundation - * - * See the LICENSE file at the top-level directory of this distribution - * for licensing information. - * - * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, - * no part of this software, including this file, may be copied, modified, - * propagated, or distributed except according to the terms contained in the - * LICENSE file. - * - * Removal or modification of this copyright notice is prohibited. - * - */ -const { - HTTP, - Exceptions: { ValidationException }, -} = require('lisk-service-framework'); - -const { getNetworkStatus } = require('./network'); -const regex = require('../../regex'); -const config = require('../../../config'); -const { LENGTH_CHAIN_ID, LENGTH_NETWORK_ID } = require('../../constants'); -const { requestConnector } = require('../../utils/request'); - -let chainID; - -const isMainchain = async () => { - if (!chainID) { - const networkStatus = (await getNetworkStatus()).data; - chainID = networkStatus.chainID; - } - return regex.MAINCHAIN_ID.test(chainID); -}; - -const resolveMainchainServiceURL = async () => { - if (config.endpoints.mainchainServiceUrl) return config.endpoints.mainchainServiceUrl; - - if (!chainID) { - const networkStatus = (await getNetworkStatus()).data; - chainID = networkStatus.chainID; - } - - const networkID = chainID.substring(0, LENGTH_NETWORK_ID); - const mainchainID = networkID.padEnd(LENGTH_CHAIN_ID, '0'); - const [{ serviceURL } = {}] = config.networks.LISK - .filter(networkInfo => networkInfo.chainID === mainchainID); - return serviceURL; -}; - -const resolveChannelInfo = async (inputChainID) => { - try { - if (await isMainchain() && !regex.MAINCHAIN_ID.test(inputChainID)) { - const channelInfo = await requestConnector('getChannel', { chainID: inputChainID }); - return channelInfo; - } - - // Redirect call to the mainchain service - const serviceURL = await resolveMainchainServiceURL(); - const invokeEndpoint = `${serviceURL}/api/v3/invoke`; - const { data: { data: channelInfo } } = await HTTP.post( - invokeEndpoint, - { - endpoint: 'interoperability_getChannel', - params: { chainID: inputChainID }, - }, - ); - - return channelInfo; - } catch (error) { - throw new ValidationException(`Error while retrieving channel info for the chain: ${inputChainID}.\nError: ${error}`); - } -}; - -module.exports = { - isMainchain, - resolveMainchainServiceURL, - resolveChannelInfo, -}; diff --git a/services/blockchain-indexer/shared/dataService/business/network.js b/services/blockchain-indexer/shared/dataService/business/network.js index 344710f35..82258b6d0 100644 --- a/services/blockchain-indexer/shared/dataService/business/network.js +++ b/services/blockchain-indexer/shared/dataService/business/network.js @@ -55,7 +55,16 @@ const getNetworkPeers = async params => { return [...new Set(a)].filter(x => setB.has(x)); }; - const filterParams = ['ip', 'httpPort', 'wsPort', 'os', 'version', 'networkVersion', 'height', 'broadhash']; + const filterParams = [ + 'ip', + 'httpPort', + 'wsPort', + 'os', + 'version', + 'networkVersion', + 'height', + 'broadhash', + ]; const activeParams = Object.keys(params).filter(item => params[item]); const activeFilters = intersect(filterParams, activeParams); @@ -83,8 +92,10 @@ const getNetworkPeers = async params => { if (params.offset || params.limit) { if (!params.offset) params.offset = 0; - sortedPeers = filteredPeers.slice(params.offset, - (params.limit || filteredPeers.length) + params.offset); + sortedPeers = filteredPeers.slice( + params.offset, + (params.limit || filteredPeers.length) + params.offset, + ); } const meta = { diff --git a/services/blockchain-indexer/shared/dataService/business/pendingTransactions.js b/services/blockchain-indexer/shared/dataService/business/pendingTransactions.js index fc5dbc037..d75376f68 100644 --- a/services/blockchain-indexer/shared/dataService/business/pendingTransactions.js +++ b/services/blockchain-indexer/shared/dataService/business/pendingTransactions.js @@ -21,6 +21,7 @@ const { const logger = Logger(); +const { getCurrentChainID } = require('./interoperability/chain'); const { normalizeTransaction } = require('./transactions'); const { getIndexedAccountInfo } = require('../utils/account'); const { requestConnector } = require('../../utils/request'); @@ -71,7 +72,9 @@ const getPendingTransactionsFromCore = async () => { const loadAllPendingTransactions = async () => { try { pendingTransactionsList = await getPendingTransactionsFromCore(); - logger.info(`Updated pending transaction cache with ${pendingTransactionsList.length} transactions.`); + logger.info( + `Updated pending transaction cache with ${pendingTransactionsList.length} transactions.`, + ); } catch (err) { logger.error(`Failed to update the 'pendingTransactionsList' due to:\n${err.stack}`); } @@ -79,8 +82,10 @@ const loadAllPendingTransactions = async () => { const validateParams = async params => { const validatedParams = {}; - if (params.nonce && !(params.senderAddress)) { - throw new ValidationException('Nonce based retrieval is only possible along with senderAddress'); + if (params.nonce && !params.senderAddress) { + throw new ValidationException( + 'Nonce based retrieval is only possible along with senderAddress', + ); } if (params.id) validatedParams.id = params.id; @@ -88,6 +93,18 @@ const validateParams = async params => { if (params.senderAddress) validatedParams.senderAddress = params.senderAddress; if (params.recipientAddress) validatedParams.recipientAddress = params.recipientAddress; if (params.moduleCommand) validatedParams.moduleCommand = params.moduleCommand; + + // If receivingChainID is currentChainID then return all the transactions where receivingChainID = null + if (params.receivingChainID) { + const currentChainID = await getCurrentChainID(); + + if (params.receivingChainID === currentChainID) { + validatedParams.currentChainTransactions = true; + } else { + validatedParams.receivingChainID = params.receivingChainID; + } + } + if (params.sort) validatedParams.sort = params.sort; return validatedParams; @@ -104,31 +121,35 @@ const getPendingTransactions = async params => { const validatedParams = await validateParams(params); - const sortComparator = (sortParam) => { + const sortComparator = sortParam => { const sortProp = sortParam.split(':')[0]; const sortOrder = sortParam.split(':')[1]; - const comparator = (a, b) => (sortOrder === 'asc') - ? Number(a[sortProp] || 0) - Number(b[sortProp] || 0) - : Number(b[sortProp] || 0) - Number(a[sortProp] || 0); + const comparator = (a, b) => + sortOrder === 'asc' + ? Number(a[sortProp] || 0) - Number(b[sortProp] || 0) + : Number(b[sortProp] || 0) - Number(a[sortProp] || 0); return comparator; }; if (pendingTransactionsList.length) { // Filter according to the request params - const filteredPendingTxs = pendingTransactionsList.filter(transaction => ( - (!validatedParams.id - || transaction.id === validatedParams.id) - && (!validatedParams.senderAddress - || transaction.sender.address === validatedParams.senderAddress) - && (!validatedParams.recipientAddress - || transaction.params.recipientAddress === validatedParams.recipientAddress) - && (!validatedParams.address - || transaction.sender.address === validatedParams.address - || transaction.params.recipientAddress === validatedParams.address) - && (!validatedParams.moduleCommand - || transaction.moduleCommand === validatedParams.moduleCommand) - )); + const filteredPendingTxs = pendingTransactionsList.filter( + transaction => + (!validatedParams.id || transaction.id === validatedParams.id) && + (!validatedParams.senderAddress || + transaction.sender.address === validatedParams.senderAddress) && + (!validatedParams.recipientAddress || + transaction.params.recipientAddress === validatedParams.recipientAddress) && + (!validatedParams.address || + transaction.sender.address === validatedParams.address || + transaction.params.recipientAddress === validatedParams.address) && + (!validatedParams.moduleCommand || + transaction.moduleCommand === validatedParams.moduleCommand) && + (!validatedParams.receivingChainID || + transaction.params.receivingChainID === validatedParams.receivingChainID) && + (!validatedParams.currentChainTransactions || !transaction.params.receivingChainID), + ); pendingTransactions.data = filteredPendingTxs .sort(sortComparator(validatedParams.sort)) diff --git a/services/blockchain-indexer/shared/dataService/business/pos/constants.js b/services/blockchain-indexer/shared/dataService/business/pos/constants.js index 883b55a35..3c7d6c6a2 100644 --- a/services/blockchain-indexer/shared/dataService/business/pos/constants.js +++ b/services/blockchain-indexer/shared/dataService/business/pos/constants.js @@ -22,9 +22,10 @@ let posModuleConstants; const getPosConstants = async () => { try { - if (typeof posModuleConstants === 'undefined') posModuleConstants = await requestConnector('getPosConstants'); + if (typeof posModuleConstants === 'undefined') + posModuleConstants = await requestConnector('getPosConstants'); } catch (err) { - const errMessage = `Unable to fetch the PoS constants from connector due to: ${err.message}.`; + const errMessage = `Unable to fetch the PoS constants from connector due to: ${err.message}`; logger.warn(errMessage); logger.trace(err.stack); throw new Error(errMessage); @@ -37,7 +38,9 @@ const getPosConstants = async () => { }; const getPosTokenID = async () => { - const { data: { posTokenID } } = await getPosConstants(); + const { + data: { posTokenID }, + } = await getPosConstants(); return posTokenID; }; diff --git a/services/blockchain-indexer/shared/dataService/business/pos/stakers.js b/services/blockchain-indexer/shared/dataService/business/pos/stakers.js index 948d4f63b..16a34ea32 100644 --- a/services/blockchain-indexer/shared/dataService/business/pos/stakers.js +++ b/services/blockchain-indexer/shared/dataService/business/pos/stakers.js @@ -26,10 +26,7 @@ const stakesTableSchema = require('../../../database/schema/stakes'); const { getLisk32AddressFromPublicKey } = require('../../../utils/account'); -const { - getIndexedAccountInfo, - getAccountsTable, -} = require('../../utils/account'); +const { getIndexedAccountInfo, getAccountsTable } = require('../../utils/account'); const { indexAccountPublicKey } = require('../../../indexer/accountIndex'); const MYSQL_ENDPOINT = config.endpoints.mysqlReplica; @@ -62,8 +59,6 @@ const getStakers = async params => { params = remParams; const address = getLisk32AddressFromPublicKey(publicKey); - // TODO: Remove once gateway param pairings check is updated - if (params.validatorAddress && params.validatorAddress !== address) return stakersResponse; params.validatorAddress = address; stakersResponse.meta.validator.address = params.validatorAddress; @@ -78,8 +73,6 @@ const getStakers = async params => { params = remParams; const { address } = await getIndexedAccountInfo({ name }, ['address']); - // TODO: Remove once gateway param pairings check is updated - if (params.validatorAddress && params.validatorAddress !== address) return stakersResponse; params.validatorAddress = address; stakersResponse.meta.validator.name = name; @@ -95,16 +88,20 @@ const getStakers = async params => { if (params.search) { const stakerAccountsInfo = await accountsTable.find( { - orSearch: [{ - property: 'name', - pattern: params.search, - }, { - property: 'address', - pattern: params.search, - }, { - property: 'publicKey', - pattern: params.search, - }], + orSearch: [ + { + property: 'name', + pattern: params.search, + }, + { + property: 'address', + pattern: params.search, + }, + { + property: 'publicKey', + pattern: params.search, + }, + ], }, ['name', 'address'], ); @@ -119,17 +116,16 @@ const getStakers = async params => { } // Fetch list of stakes - const stakes = await stakesTable.find( - { - ...stakerAddressQueryFilter, - validatorAddress: params.validatorAddress, - limit: params.limit, - offset: params.offset, - sort: 'amount:desc', - order: 'stakerAddress:asc', // Amount sorting tie-breaker - }, - ['stakerAddress', 'amount'], - ); + const stakesQueryParams = Object.freeze({ + ...stakerAddressQueryFilter, + validatorAddress: params.validatorAddress, + propBetweens: [{ property: 'amount', greaterThan: BigInt('0') }], + limit: params.limit, + offset: params.offset, + sort: 'amount:desc', + order: 'stakerAddress:asc', // Amount sorting tie-breaker + }); + const stakes = await stakesTable.find(stakesQueryParams, ['stakerAddress', 'amount']); // Populate stakers name and prepare response stakersResponse.data.stakers = await BluebirdPromise.map( @@ -151,10 +147,10 @@ const getStakers = async params => { { concurrency: stakes.length }, ); - const validatorAccountInfo = await getIndexedAccountInfo( - { address: params.validatorAddress }, - ['name', 'publicKey'], - ); + const validatorAccountInfo = await getIndexedAccountInfo({ address: params.validatorAddress }, [ + 'name', + 'publicKey', + ]); stakersResponse.meta.validator = { address: stakersResponse.meta.validator.address || params.validatorAddress, name: stakersResponse.meta.validator.name || validatorAccountInfo.name, @@ -163,10 +159,7 @@ const getStakers = async params => { stakersResponse.meta.count = stakersResponse.data.stakers.length; stakersResponse.meta.offset = params.offset; - stakersResponse.meta.total = await stakesTable.count({ - ...stakerAddressQueryFilter, - validatorAddress: params.validatorAddress, - }); + stakersResponse.meta.total = await stakesTable.count(stakesQueryParams); return stakersResponse; }; diff --git a/services/blockchain-indexer/shared/dataService/business/pos/stakes.js b/services/blockchain-indexer/shared/dataService/business/pos/stakes.js index 99c7b4a75..f94e89d50 100644 --- a/services/blockchain-indexer/shared/dataService/business/pos/stakes.js +++ b/services/blockchain-indexer/shared/dataService/business/pos/stakes.js @@ -15,9 +15,7 @@ */ const BluebirdPromise = require('bluebird'); -const { - getIndexedAccountInfo, -} = require('../../utils/account'); +const { getIndexedAccountInfo } = require('../../utils/account'); const { getAddressByName } = require('../../utils/validator'); const { parseToJSONCompatObj } = require('../../../utils/parser'); const { requestConnector } = require('../../../utils/request'); @@ -53,16 +51,20 @@ const getStakes = async params => { // Filter stakes by user specified search param (validator name) and add to response const accountInfoQueryFilter = {}; if (params.search) { - accountInfoQueryFilter.orSearch = [{ - property: 'name', - pattern: params.search, - }, { - property: 'address', - pattern: params.search, - }, { - property: 'publicKey', - pattern: params.search, - }]; + accountInfoQueryFilter.orSearch = [ + { + property: 'name', + pattern: params.search, + }, + { + property: 'address', + pattern: params.search, + }, + { + property: 'publicKey', + pattern: params.search, + }, + ]; } await BluebirdPromise.map( diff --git a/services/blockchain-indexer/shared/dataService/business/pos/unlocks.js b/services/blockchain-indexer/shared/dataService/business/pos/unlocks.js index cf7d46e35..a7f752288 100644 --- a/services/blockchain-indexer/shared/dataService/business/pos/unlocks.js +++ b/services/blockchain-indexer/shared/dataService/business/pos/unlocks.js @@ -39,41 +39,42 @@ const getPosUnlocks = async params => { return unlocks; } - const { pendingUnlocks = [] } = await requestConnector( - 'getPosPendingUnlocks', - { address: params.address }, - ); + const { pendingUnlocks = [] } = await requestConnector('getPosPendingUnlocks', { + address: params.address, + }); - const { data: { lastBlockID, genesis: { blockTime } } } = await getNetworkStatus(); + const { + data: { + lastBlockID, + genesis: { blockTime }, + }, + } = await getNetworkStatus(); const { height, timestamp } = await getBlockByID(lastBlockID); const tokenID = await getPosTokenID(); - const filteredPendingUnlocks = pendingUnlocks.reduce( - (accumulator, pendingUnlock) => { - const { unlockable, ...remPendingUnlock } = pendingUnlock; - const isLocked = !pendingUnlock.unlockable; - // Filter results based on `params.isLocked` - if (params.isLocked === undefined || params.isLocked === isLocked) { - // Calculate expected unlock time - const expectedUnlockTime = timestamp - + (remPendingUnlock.expectedUnlockableHeight - height) * blockTime; + const filteredPendingUnlocks = pendingUnlocks.reduce((accumulator, pendingUnlock) => { + const { unlockable, ...remPendingUnlock } = pendingUnlock; + const isLocked = !pendingUnlock.unlockable; + // Filter results based on `params.isLocked` + if (params.isLocked === undefined || params.isLocked === isLocked) { + // Calculate expected unlock time + const expectedUnlockTime = + timestamp + (remPendingUnlock.expectedUnlockableHeight - height) * blockTime; - accumulator.push({ - ...remPendingUnlock, - isLocked, - expectedUnlockTime, - tokenID, - }); - } - return accumulator; - }, - [], - ); + accumulator.push({ + ...remPendingUnlock, + isLocked, + expectedUnlockTime, + tokenID, + }); + } + return accumulator; + }, []); - const { publicKey, name } = await getIndexedAccountInfo( - { address: params.address, limit: 1 }, - ['name', 'publicKey'], - ); + const { publicKey, name } = await getIndexedAccountInfo({ address: params.address, limit: 1 }, [ + 'name', + 'publicKey', + ]); // Update index if public key is not indexed asynchronously if (!publicKey && params.publicKey) indexAccountPublicKey(params.publicKey); @@ -86,8 +87,10 @@ const getPosUnlocks = async params => { }; const total = unlocks.data.pendingUnlocks.length; - unlocks.data.pendingUnlocks = unlocks.data.pendingUnlocks - .slice(params.offset, params.offset + params.limit); + unlocks.data.pendingUnlocks = unlocks.data.pendingUnlocks.slice( + params.offset, + params.offset + params.limit, + ); unlocks.meta = { count: unlocks.data.pendingUnlocks.length, diff --git a/services/blockchain-indexer/shared/dataService/business/pos/validators.js b/services/blockchain-indexer/shared/dataService/business/pos/validators.js index 3eb6bd3f5..5487af928 100644 --- a/services/blockchain-indexer/shared/dataService/business/pos/validators.js +++ b/services/blockchain-indexer/shared/dataService/business/pos/validators.js @@ -30,14 +30,15 @@ const verifyIfPunished = async validator => { const latestBlockString = await lastBlockCache.get(LAST_BLOCK_KEY); const latestBlock = latestBlockString ? JSON.parse(latestBlockString) : {}; - // TODO: Get this information from SDK directly once available - const isPunished = validator.reportMisbehaviorHeights - .some(reportMisbehaviorHeight => reportMisbehaviorHeight.start <= latestBlock.height - && latestBlock.height <= reportMisbehaviorHeight.end); + const isPunished = validator.reportMisbehaviorHeights.some( + reportMisbehaviorHeight => + reportMisbehaviorHeight.start <= latestBlock.height && + latestBlock.height <= reportMisbehaviorHeight.end, + ); return isPunished; }; -const getPosValidators = async (params) => { +const getPosValidators = async params => { const { address, addresses } = params; const validatorAddressList = address ? [address] : addresses; @@ -45,17 +46,12 @@ const getPosValidators = async (params) => { validatorAddressList, async validatorAddress => { const validator = await requestConnector('getPosValidator', { address: validatorAddress }); - // TODO: Add error handling - // TODO: Verify - // TODO: Check if it is possible to move this logic to the connector - if (validator.isBanned || await verifyIfPunished(validator)) { + if (validator.isBanned || (await verifyIfPunished(validator))) { validator.validatorWeight = BigInt('0'); } else { const cap = BigInt(validator.selfStake) * BigInt(10); validator.totalStake = BigInt(validator.totalStake); - validator.validatorWeight = BigInt(validator.totalStake) > cap - ? cap - : validator.totalStake; + validator.validatorWeight = BigInt(validator.totalStake) > cap ? cap : validator.totalStake; } return validator; }, @@ -69,17 +65,17 @@ const getAllPosValidators = async () => { const validators = await BluebirdPromise.map( rawValidators, async validator => { - if (validator.isBanned || await verifyIfPunished(validator)) { + if (validator.isBanned || (await verifyIfPunished(validator))) { validator.validatorWeight = BigInt('0'); } else { const cap = BigInt(validator.selfStake) * BigInt(10); validator.totalStake = BigInt(validator.totalStake); - validator.validatorWeight = BigInt(validator.totalStake) > cap - ? cap - : validator.totalStake; + validator.validatorWeight = BigInt(validator.totalStake) > cap ? cap : validator.totalStake; } - const { publicKey = null } = await getIndexedAccountInfo({ address: validator.address }, ['publicKey']); + const { publicKey = null } = await getIndexedAccountInfo({ address: validator.address }, [ + 'publicKey', + ]); return { ...validator, @@ -92,7 +88,7 @@ const getAllPosValidators = async () => { return validators; }; -const getPosValidatorsByStake = async (params) => { +const getPosValidatorsByStake = async params => { const { validators } = await requestConnector('getPosValidatorsByStake', { limit: params.limit }); return validators; }; diff --git a/services/blockchain-indexer/shared/dataService/business/schemas.js b/services/blockchain-indexer/shared/dataService/business/schemas.js index af6636eb8..ec00ccbb9 100644 --- a/services/blockchain-indexer/shared/dataService/business/schemas.js +++ b/services/blockchain-indexer/shared/dataService/business/schemas.js @@ -72,7 +72,9 @@ const getAllSchemas = async () => { }); // Assign generic schemas - Object.entries(schemas.schemas).forEach(([entity, schema]) => allSchemas[entity] = { schema }); + Object.entries(schemas.schemas).forEach( + ([entity, schema]) => (allSchemas[entity] = { schema }), + ); // Assign messages schemas Object.assign(allSchemas, { messages: schemas.messageSchemas }); diff --git a/services/blockchain-indexer/shared/dataService/business/token/accountExists.js b/services/blockchain-indexer/shared/dataService/business/token/accountExists.js index 28de40199..be8dc11b2 100644 --- a/services/blockchain-indexer/shared/dataService/business/token/accountExists.js +++ b/services/blockchain-indexer/shared/dataService/business/token/accountExists.js @@ -18,7 +18,7 @@ const { getAddressByName } = require('../../utils/validator'); const { getLisk32AddressFromPublicKey } = require('../../../utils/account'); -const tokenHasUserAccount = async (params) => { +const tokenHasUserAccount = async params => { const response = { data: { isExists: false, @@ -39,7 +39,10 @@ const tokenHasUserAccount = async (params) => { // Check existence if address found. Return false otherwise if (address) { - const { exists: isExists } = await requestConnector('tokenHasUserAccount', { address, tokenID }); + const { exists: isExists } = await requestConnector('tokenHasUserAccount', { + address, + tokenID, + }); response.data.isExists = isExists; } diff --git a/services/blockchain-indexer/shared/dataService/business/token/availableIDs.js b/services/blockchain-indexer/shared/dataService/business/token/availableIDs.js index 2961143bf..87faed5eb 100644 --- a/services/blockchain-indexer/shared/dataService/business/token/availableIDs.js +++ b/services/blockchain-indexer/shared/dataService/business/token/availableIDs.js @@ -26,17 +26,16 @@ const MYSQL_ENDPOINT = config.endpoints.mysqlReplica; const getAccountBalancesTable = () => getTableInstance(accountBalancesTableSchema, MYSQL_ENDPOINT); -const getAvailableTokenIDs = async (params) => { +const getAvailableTokenIDs = async params => { const response = { data: {}, meta: {}, }; const accountBalancesTable = await getAccountBalancesTable(); - const tokenInfos = await accountBalancesTable.find( - { ...params, distinct: 'tokenID' }, - ['tokenID'], - ); + const tokenInfos = await accountBalancesTable.find({ ...params, distinct: 'tokenID' }, [ + 'tokenID', + ]); response.data.tokenIDs = tokenInfos.map(tokenInfo => tokenInfo.tokenID); response.meta = { diff --git a/services/blockchain-indexer/shared/dataService/business/token/balances.js b/services/blockchain-indexer/shared/dataService/business/token/balances.js index 919d76162..00e6ac555 100644 --- a/services/blockchain-indexer/shared/dataService/business/token/balances.js +++ b/services/blockchain-indexer/shared/dataService/business/token/balances.js @@ -14,14 +14,12 @@ * */ const { - Exceptions: { - InvalidParamsException, - }, + Exceptions: { InvalidParamsException }, } = require('lisk-service-framework'); const { requestConnector } = require('../../../utils/request'); -const getTokenBalances = async (params) => { +const getTokenBalances = async params => { const tokensInfo = []; const tokens = { data: [], @@ -29,26 +27,28 @@ const getTokenBalances = async (params) => { }; if (params.tokenID && !params.address) { - throw new InvalidParamsException('TokenID based retrieval is only possible along with address.'); + throw new InvalidParamsException( + 'TokenID based retrieval is only possible along with address.', + ); } if (params.tokenID && params.address) { - const response = await requestConnector( - 'getTokenBalance', - { address: params.address, tokenID: params.tokenID }); + const response = await requestConnector('getTokenBalance', { + address: params.address, + tokenID: params.tokenID, + }); tokensInfo.push({ ...response, tokenID: params.tokenID }); } else { - const response = await requestConnector( - 'getTokenBalances', - { address: params.address }); + const response = await requestConnector('getTokenBalances', { address: params.address }); if (response.balances) tokensInfo.push(...response.balances); } - tokens.data = 'offset' in params && 'limit' in params - ? tokensInfo.slice(params.offset, params.offset + params.limit) - : tokensInfo; + tokens.data = + 'offset' in params && 'limit' in params + ? tokensInfo.slice(params.offset, params.offset + params.limit) + : tokensInfo; tokens.meta = { address: params.address, diff --git a/services/blockchain-indexer/shared/dataService/business/token/topBalances.js b/services/blockchain-indexer/shared/dataService/business/token/topBalances.js index e83bd4cf1..f7c122975 100644 --- a/services/blockchain-indexer/shared/dataService/business/token/topBalances.js +++ b/services/blockchain-indexer/shared/dataService/business/token/topBalances.js @@ -29,7 +29,7 @@ const MYSQL_ENDPOINT = config.endpoints.mysqlReplica; const getAccountBalancesTable = () => getTableInstance(accountBalancesTableSchema, MYSQL_ENDPOINT); -const getTokenTopBalances = async (params) => { +const getTokenTopBalances = async params => { const response = { data: {}, meta: {}, @@ -49,27 +49,28 @@ const getTokenTopBalances = async (params) => { }; if (search) { - params.orSearch = [{ - property: `${accountTableSchema.tableName}.name`, - pattern: search, - }, { - property: `${accountTableSchema.tableName}.address`, - pattern: search, - }, { - property: `${accountTableSchema.tableName}.publicKey`, - pattern: search, - }]; + params.orSearch = [ + { + property: `${accountTableSchema.tableName}.name`, + pattern: search, + }, + { + property: `${accountTableSchema.tableName}.address`, + pattern: search, + }, + { + property: `${accountTableSchema.tableName}.publicKey`, + pattern: search, + }, + ]; } - const tokenInfos = await accountBalancesTable.find( - params, - [ - `${accountBalancesTableSchema.tableName}.balance`, - `${accountBalancesTableSchema.tableName}.address`, - `${accountTableSchema.tableName}.publicKey`, - `${accountTableSchema.tableName}.name`, - ], - ); + const tokenInfos = await accountBalancesTable.find(params, [ + `${accountBalancesTableSchema.tableName}.balance`, + `${accountBalancesTableSchema.tableName}.address`, + `${accountTableSchema.tableName}.publicKey`, + `${accountTableSchema.tableName}.name`, + ]); const filteredTokenInfos = []; // eslint-disable-next-line no-restricted-syntax @@ -90,7 +91,9 @@ const getTokenTopBalances = async (params) => { response.meta = { count: response.data[tokenID].length, offset: params.offset, - total: await accountBalancesTable.count(params, [`${accountBalancesTableSchema.tableName}.address`]), + total: await accountBalancesTable.count(params, [ + `${accountBalancesTableSchema.tableName}.address`, + ]), }; return response; diff --git a/services/blockchain-indexer/shared/dataService/business/transactions.js b/services/blockchain-indexer/shared/dataService/business/transactions.js index a45e88708..2fcf4a523 100644 --- a/services/blockchain-indexer/shared/dataService/business/transactions.js +++ b/services/blockchain-indexer/shared/dataService/business/transactions.js @@ -25,6 +25,7 @@ const { const { getBlockByID } = require('./blocks'); const { getEventsByHeight } = require('./events'); +const { getCurrentChainID } = require('./interoperability/chain'); const { getIndexedAccountInfo } = require('../utils/account'); const { requestConnector } = require('../../utils/request'); const { normalizeRangeParam } = require('../../utils/param'); @@ -41,12 +42,15 @@ const getTransactionsTable = () => getTableInstance(transactionsTableSchema, MYS const getTransactionIDsByBlockID = async blockID => { const transactionsTable = await getTransactionsTable(); - const transactions = await transactionsTable.find({ - whereIn: { - property: 'blockId', - values: [blockID], + const transactions = await transactionsTable.find( + { + whereIn: { + property: 'blockID', + values: [blockID], + }, }, - }, ['id']); + ['id'], + ); const transactionsIds = transactions.map(t => t.id); return transactionsIds; }; @@ -60,11 +64,6 @@ const normalizeTransactions = async txs => { return normalizedTransactions; }; -const getTransactionByID = async id => { - const response = await requestConnector('getTransactionByID', { id }); - return normalizeTransaction(response); -}; - const getTransactionsByIDs = async ids => { const response = await requestConnector('getTransactionsByIDs', { ids }); return normalizeTransactions(response); @@ -79,14 +78,28 @@ const validateParams = async params => { params = normalizeRangeParam(params, 'timestamp'); } - if (params.nonce && !(params.senderAddress)) { - throw new InvalidParamsException('Nonce based retrieval is only possible along with senderAddress'); + if (params.nonce && !params.senderAddress) { + throw new InvalidParamsException( + 'Nonce based retrieval is only possible along with senderAddress', + ); + } + + // If recieving chainID is current chain ID then return all transactions with receivingChainID = null + if (params.receivingChainID) { + const currentChainID = await getCurrentChainID(); + + if (params.receivingChainID === currentChainID) { + params.receivingChainID = null; + } } if (params.executionStatus) { const { executionStatus, ...remParams } = params; params = remParams; - const executionStatuses = executionStatus.split(',').map(e => e.trim()).filter(e => e !== 'any'); + const executionStatuses = executionStatus + .split(',') + .map(e => e.trim()) + .filter(e => e !== 'any'); params.whereIn = { property: 'executionStatus', values: executionStatuses }; } @@ -111,35 +124,33 @@ const getTransactions = async params => { params = await validateParams(params); const total = await transactionsTable.count(params); - const resultSet = await transactionsTable.find( - { ...params, limit: params.limit || total }, - ['id', 'timestamp', 'height', 'blockID', 'executionStatus', 'index', 'minFee'], - ); + const resultSet = await transactionsTable.find({ ...params, limit: params.limit || total }, [ + 'id', + 'timestamp', + 'height', + 'blockID', + 'executionStatus', + 'index', + 'minFee', + ]); params.ids = resultSet.map(row => row.id); if (params.ids.length) { const BATCH_SIZE = 25; for (let i = 0; i < Math.ceil(params.ids.length / BATCH_SIZE); i++) { transactions.data = transactions.data.concat( - // eslint-disable-next-line no-await-in-loop await getTransactionsByIDs(params.ids.slice(i * BATCH_SIZE, (i + 1) * BATCH_SIZE)), ); } - } else if (params.id) { - transactions.data.push(await getTransactionByID(params.id)); - if ('offset' in params && params.limit) { - transactions.data = transactions.data.slice(params.offset, params.offset + params.limit); - } } transactions.data = await BluebirdPromise.map( transactions.data, async transaction => { const senderAddress = getLisk32AddressFromPublicKey(transaction.senderPublicKey); - const senderAccount = await getIndexedAccountInfo( - { address: senderAddress, limit: 1 }, - ['name'], - ); + const senderAccount = await getIndexedAccountInfo({ address: senderAddress, limit: 1 }, [ + 'name', + ]); transaction.sender = { address: senderAddress, @@ -186,17 +197,15 @@ const getTransactions = async params => { return transactions; }; -const getTransactionsByBlockID = async blockID => { - const block = await getBlockByID(blockID); +const formatTransactionsInBlock = async block => { const transactions = await BluebirdPromise.map( block.transactions, - async (transaction) => { + async (transaction, index) => { const senderAddress = getLisk32AddressFromPublicKey(transaction.senderPublicKey); - const senderAccount = await getIndexedAccountInfo( - { address: senderAddress, limit: 1 }, - ['name'], - ); + const senderAccount = await getIndexedAccountInfo({ address: senderAddress, limit: 1 }, [ + 'name', + ]); transaction.sender = { address: senderAddress, @@ -223,13 +232,13 @@ const getTransactionsByBlockID = async blockID => { id: block.id, height: block.height, timestamp: block.timestamp, + isFinal: block.isFinal, }; const transactionsTable = await getTransactionsTable(); - const [indexedTxInfo = {}] = await transactionsTable.find( - { id: transaction.id, limit: 1 }, - ['executionStatus'], - ); + const [indexedTxInfo = {}] = await transactionsTable.find({ id: transaction.id, limit: 1 }, [ + 'executionStatus', + ]); if (indexedTxInfo.executionStatus) { transaction.executionStatus = indexedTxInfo.executionStatus; @@ -238,6 +247,7 @@ const getTransactionsByBlockID = async blockID => { transaction.executionStatus = await getTransactionExecutionStatus(transaction, events); } + transaction.index = index; return transaction; }, { concurrency: block.transactions.length }, @@ -253,13 +263,20 @@ const getTransactionsByBlockID = async blockID => { }; }; +const getTransactionsByBlockID = async blockID => { + const block = await getBlockByID(blockID); + return formatTransactionsInBlock(block); +}; + module.exports = { getTransactions, getTransactionIDsByBlockID, getTransactionsByBlockID, getTransactionsByIDs, normalizeTransaction, + formatTransactionsInBlock, // For unit test validateParams, + normalizeTransactions, }; diff --git a/services/blockchain-indexer/shared/dataService/business/transactionsDryRun.js b/services/blockchain-indexer/shared/dataService/business/transactionsDryRun.js index 38b6a379b..2591ada07 100644 --- a/services/blockchain-indexer/shared/dataService/business/transactionsDryRun.js +++ b/services/blockchain-indexer/shared/dataService/business/transactionsDryRun.js @@ -23,12 +23,16 @@ const dryRunTransactions = async params => { }; const { transaction, skipVerify, skipDecode, strict } = params; - const response = await requestConnector('dryRunTransaction', { transaction, skipVerify, skipDecode, strict }); + const response = await requestConnector('dryRunTransaction', { + transaction, + skipVerify, + skipDecode, + strict, + }); dryRunTransactionsRes.data = { ...response, - status: Object - .keys(TRANSACTION_VERIFY_RESULT) + status: Object.keys(TRANSACTION_VERIFY_RESULT) .find(e => TRANSACTION_VERIFY_RESULT[e] === response.result) .toLowerCase(), }; diff --git a/services/blockchain-indexer/shared/dataService/business/transactionsEstimateFees.js b/services/blockchain-indexer/shared/dataService/business/transactionsEstimateFees.js index d63f04ed9..bd86e472e 100644 --- a/services/blockchain-indexer/shared/dataService/business/transactionsEstimateFees.js +++ b/services/blockchain-indexer/shared/dataService/business/transactionsEstimateFees.js @@ -26,9 +26,13 @@ const { Logger, } = require('lisk-service-framework'); -const { resolveMainchainServiceURL, resolveChannelInfo, getCurrentChainID } = require('./interoperability'); +const { + resolveMainchainServiceURL, + resolveChannelInfo, + getCurrentChainID, +} = require('./interoperability'); const { dryRunTransactions } = require('./transactionsDryRun'); -const { tokenHasUserAccount, getTokenConstants } = require('./token'); +const { tokenHasUserAccount, getTokenConstants, getTokenBalances } = require('./token'); const { getSchemas } = require('./schemas'); const { @@ -38,6 +42,7 @@ const { LENGTH_BYTE_SIGNATURE, LENGTH_BYTE_ID, DEFAULT_NUM_OF_SIGNATURES, + CCM_SENT_FAILED_ERROR_MESSAGE, } = require('../../constants'); const { getLisk32AddressFromPublicKey } = require('../../utils/account'); @@ -63,9 +68,10 @@ const OPTIONAL_TRANSACTION_PROPERTIES = Object.freeze({ }, SIGNATURES: { propName: 'signatures', - defaultValue: (params) => new Array(params.numberOfSignatures) - .fill() - .map(() => getRandomBytes(LENGTH_BYTE_SIGNATURE).toString('hex')), + defaultValue: params => + new Array(params.numberOfSignatures) + .fill() + .map(() => getRandomBytes(LENGTH_BYTE_SIGNATURE).toString('hex')), }, ID: { propName: 'id', @@ -80,18 +86,16 @@ const OPTIONAL_TRANSACTION_PARAMS_PROPERTIES = Object.freeze({ }, MESSAGE_FEE_TOKEN_ID: { propName: 'messageFeeTokenID', - defaultValue: (params) => params.messageFeeTokenID, + defaultValue: params => params.messageFeeTokenID, }, }); const mockOptionalProperties = (inputObject, inputObjectOptionalProps, additionalParams) => { - Object - .values(inputObjectOptionalProps) - .forEach(optionalPropInfo => { - if (!(optionalPropInfo.propName in inputObject)) { - inputObject[optionalPropInfo.propName] = optionalPropInfo.defaultValue(additionalParams); - } - }); + Object.values(inputObjectOptionalProps).forEach(optionalPropInfo => { + if (!(optionalPropInfo.propName in inputObject)) { + inputObject[optionalPropInfo.propName] = optionalPropInfo.defaultValue(additionalParams); + } + }); return inputObject; }; @@ -113,34 +117,36 @@ const mockTransaction = async (_transaction, numberOfSignatures) => { { numberOfSignatures }, ); - const channelInfo = txWithRequiredProps.module === MODULE.TOKEN - && txWithRequiredProps.command === COMMAND.TRANSFER_CROSS_CHAIN - ? await resolveChannelInfo(txWithRequiredProps.params.receivingChainID) - : {}; + const channelInfo = + txWithRequiredProps.module === MODULE.TOKEN && + txWithRequiredProps.command === COMMAND.TRANSFER_CROSS_CHAIN + ? await resolveChannelInfo(txWithRequiredProps.params.receivingChainID) + : {}; const { messageFeeTokenID } = channelInfo; const mockedTransactionParams = messageFeeTokenID ? mockOptionalProperties( - filterOptionalProps( - txWithRequiredProps.params, - Object - .values(OPTIONAL_TRANSACTION_PARAMS_PROPERTIES) - .map(optionalProp => optionalProp.propName), - ), - OPTIONAL_TRANSACTION_PARAMS_PROPERTIES, - { messageFeeTokenID }, - ) + filterOptionalProps( + txWithRequiredProps.params, + Object.values(OPTIONAL_TRANSACTION_PARAMS_PROPERTIES).map( + optionalProp => optionalProp.propName, + ), + ), + OPTIONAL_TRANSACTION_PARAMS_PROPERTIES, + { messageFeeTokenID }, + ) : txWithRequiredProps.params; return { ...mockedTransaction, params: mockedTransactionParams }; }; -const getNumberOfSignatures = async (address) => { +const getNumberOfSignatures = async address => { try { const authAccountInfo = await requestConnector('getAuthAccount', { address }); - const numberOfSignatures = (authAccountInfo.mandatoryKeys.length - + authAccountInfo.optionalKeys.length) || DEFAULT_NUM_OF_SIGNATURES; + const numberOfSignatures = + authAccountInfo.mandatoryKeys.length + authAccountInfo.optionalKeys.length || + DEFAULT_NUM_OF_SIGNATURES; return numberOfSignatures; } catch (error) { logger.warn(`Error while retrieving auth information for the account ${address}.`); @@ -148,14 +154,32 @@ const getNumberOfSignatures = async (address) => { } }; -const getCcmBuffer = async (transaction) => { - if (transaction.module !== MODULE.TOKEN - || transaction.command !== COMMAND.TRANSFER_CROSS_CHAIN) return null; +const getCcmBuffer = async transaction => { + if (transaction.module !== MODULE.TOKEN || transaction.command !== COMMAND.TRANSFER_CROSS_CHAIN) + return null; - // TODO: Add error handling - const { data: { events } } = await dryRunTransactions({ transaction, skipVerify: true }); + const { + data: { events }, + } = await dryRunTransactions({ transaction, skipVerify: true }); const ccmSendSuccess = events.find(event => event.name === EVENT.CCM_SEND_SUCCESS); + if (!ccmSendSuccess) { + const { data: dryRunResult } = await dryRunTransactions({ transaction, skipVerify: false }); + if (dryRunResult.errorMessage) { + throw new ValidationException(dryRunResult.errorMessage); + } + + const ccmSentFailed = dryRunResult.events.find(event => event.name === EVENT.CCM_SENT_FAILED); + if (ccmSentFailed) { + throw new ValidationException(CCM_SENT_FAILED_ERROR_MESSAGE[ccmSentFailed.code]); + } + + // If none of the known reasons are matched, do not assign messageFee + // No messageFee will result in not bouncing the failed CCM + logger.warn(JSON.stringify({ transaction, dryRunResult }, null, '\t')); + return Buffer.from('', 'hex'); + } + // Encode CCM (required to calculate CCM length) const { ccm } = ccmSendSuccess.data; const ccmEncoded = await requestConnector('encodeCCM', { ccm }); @@ -165,12 +189,12 @@ const getCcmBuffer = async (transaction) => { }; const calcDynamicFeeEstimates = (estimatePerByte, minFee, size) => ({ - low: BigInt(minFee) + (BigInt(estimatePerByte.low) * BigInt(size)), - medium: BigInt(minFee) + (BigInt(estimatePerByte.med) * BigInt(size)), - high: BigInt(minFee) + (BigInt(estimatePerByte.high) * BigInt(size)), + low: BigInt(minFee) + BigInt(Math.round(Number(estimatePerByte.low) * Number(BigInt(size)))), + medium: BigInt(minFee) + BigInt(Math.round(Number(estimatePerByte.med) * Number(BigInt(size)))), + high: BigInt(minFee) + BigInt(Math.round(Number(estimatePerByte.high) * Number(BigInt(size)))), }); -const calcAdditionalFees = async (transaction) => { +const calcAdditionalFees = async transaction => { const additionalFees = { fee: {}, params: {}, @@ -181,13 +205,17 @@ const calcAdditionalFees = async (transaction) => { const { tokenID } = transaction.params; if (transaction.command === COMMAND.TRANSFER) { - const { data: { isExists } } = await tokenHasUserAccount({ + const { + data: { isExists }, + } = await tokenHasUserAccount({ tokenID, address: transaction.params.recipientAddress, }); if (!isExists) { - const { data: { extraCommandFees } } = await getTokenConstants(); + const { + data: { extraCommandFees }, + } = await getTokenConstants(); additionalFees.fee = { userAccountInitializationFee: extraCommandFees.userAccountInitializationFee, }; @@ -195,22 +223,41 @@ const calcAdditionalFees = async (transaction) => { } } else if (transaction.command === COMMAND.TRANSFER_CROSS_CHAIN) { const mainchainServiceURL = await resolveMainchainServiceURL(); - const { data: appMetadataResponse } = await HTTP - .get(`${mainchainServiceURL}/api/v3/blockchain/apps/meta?chainID=${transaction.params.receivingChainID}`); - - if (!appMetadataResponse || !appMetadataResponse.data - || appMetadataResponse.data.length === 0) { - throw new ValidationException(`Application off-chain metadata is not available for the chain: ${transaction.params.receivingChainID}.`); + const { data: appMetadataResponse } = await HTTP.get( + `${mainchainServiceURL}/api/v3/blockchain/apps/meta?chainID=${transaction.params.receivingChainID}`, + ); + + if ( + !appMetadataResponse || + !appMetadataResponse.data || + appMetadataResponse.data.length === 0 + ) { + throw new ValidationException( + `Application off-chain metadata is not available for the chain: ${transaction.params.receivingChainID}.`, + ); } - const { data: [{ serviceURLs: [{ http: receivingServiceURL }] }] } = appMetadataResponse; - const { data: tokenConstantsResponse } = await HTTP.get(`${receivingServiceURL}/api/v3/token/constants`); - const { data: { extraCommandFees } } = tokenConstantsResponse; + const { + data: [ + { + serviceURLs: [{ http: receivingServiceURL }], + }, + ], + } = appMetadataResponse; + const { data: tokenConstantsResponse } = await HTTP.get( + `${receivingServiceURL}/api/v3/token/constants`, + ); + const { + data: { extraCommandFees }, + } = tokenConstantsResponse; // Check if escrow account exists only when tokenID specified in the params is a native token const currentChainID = await getCurrentChainID(); if (tokenID.startsWith(currentChainID)) { - const { exists: escrowAccountExists } = await requestConnector('tokenHasEscrowAccount', { tokenID, escrowChainID: transaction.params.receivingChainID }); + const { exists: escrowAccountExists } = await requestConnector('tokenHasEscrowAccount', { + tokenID, + escrowChainID: transaction.params.receivingChainID, + }); if (!escrowAccountExists) { additionalFees.fee = { escrowAccountInitializationFee: extraCommandFees.escrowAccountInitializationFee, @@ -220,9 +267,12 @@ const calcAdditionalFees = async (transaction) => { } // Check if user account exists on the receiving chain - const { data: accountExistsResponse } = await HTTP - .get(`${receivingServiceURL}/api/v3/token/account/exists?tokenID=${tokenID}&address=${transaction.params.recipientAddress}`); - const { data: { isExists: userAccountExists } } = accountExistsResponse; + const { data: accountExistsResponse } = await HTTP.get( + `${receivingServiceURL}/api/v3/token/account/exists?tokenID=${tokenID}&address=${transaction.params.recipientAddress}`, + ); + const { + data: { isExists: userAccountExists }, + } = accountExistsResponse; if (!userAccountExists) { additionalFees.params = { messageFee: { @@ -254,8 +304,7 @@ const calcAdditionalFees = async (transaction) => { const validateTransactionParams = async transaction => { // Mock optional values if not present before schema validation. - if (transaction.module === MODULE.TOKEN - && transaction.command === COMMAND.TRANSFER_CROSS_CHAIN) { + if (transaction.module === MODULE.TOKEN && transaction.command === COMMAND.TRANSFER_CROSS_CHAIN) { if (!('messageFee' in transaction.params)) { transaction.params.messageFee = DEFAULT_MESSAGE_FEE; } @@ -265,20 +314,53 @@ const validateTransactionParams = async transaction => { } } + if (transaction.params.tokenID) { + const senderAddress = getLisk32AddressFromPublicKey(transaction.senderPublicKey); + const { + data: { extraCommandFees }, + } = await getTokenConstants(); + const { + data: [balanceInfo], + } = await getTokenBalances({ address: senderAddress, tokenID: transaction.params.tokenID }); + + if ( + BigInt(balanceInfo.availableBalance) < + BigInt(transaction.params.amount) + BigInt(extraCommandFees.userAccountInitializationFee) + ) { + throw new ValidationException( + `${senderAddress} has insufficient balance for ${transaction.params.tokenID} to send the transaction.`, + ); + } + } + const allSchemas = await getSchemas(); - const txCommand = allSchemas.data.commands.find(e => e.moduleCommand === `${transaction.module}:${transaction.command}`); + const txCommand = allSchemas.data.commands.find( + e => e.moduleCommand === `${transaction.module}:${transaction.command}`, + ); if (!txCommand || !txCommand.schema) { - throw new ValidationException(`${transaction.module}:${transaction.command} is not a valid transaction.`); + throw new ValidationException( + `${transaction.module}:${transaction.command} is not a valid transaction.`, + ); } - const txParamsSchema = txCommand.schema; - const parsedTxParams = parseInputBySchema(transaction.params, txParamsSchema); - try { + const txParamsSchema = txCommand.schema; + const parsedTxParams = parseInputBySchema(transaction.params, txParamsSchema); + validator.validate(txParamsSchema, parsedTxParams); } catch (err) { - throw new InvalidParamsException(err); + throw new ValidationException(err); + } +}; + +const validateUserHasTokenAccount = async (tokenID, address) => { + const response = await tokenHasUserAccount({ tokenID, address }); + + if (!response.data.isExists) { + throw new ValidationException( + `${address} has no balance for tokenID: ${tokenID}, necessary to make this transaction. Please top-up the account with some balance and retry.`, + ); } }; @@ -290,31 +372,36 @@ const estimateTransactionFees = async params => { meta: {}, }; + const senderAddress = getLisk32AddressFromPublicKey(params.transaction.senderPublicKey); + const feeEstimatePerByte = getFeeEstimates(); + + // Validate if the sender has balance for transaction fee + await validateUserHasTokenAccount(feeEstimatePerByte.feeTokenID, senderAddress); await validateTransactionParams(params.transaction); - const senderAddress = getLisk32AddressFromPublicKey(params.transaction.senderPublicKey); const numberOfSignatures = await getNumberOfSignatures(senderAddress); const trxWithMockProps = await mockTransaction(params.transaction, numberOfSignatures); const additionalFees = await calcAdditionalFees(trxWithMockProps); - let formattedTransaction = await requestConnector( - 'formatTransaction', - { transaction: trxWithMockProps, additionalFee: additionalFees.total.toString() }, - ); - const feeEstimatePerByte = getFeeEstimates(); + let formattedTransaction = await requestConnector('formatTransaction', { + transaction: trxWithMockProps, + additionalFee: additionalFees.total.toString(), + }); // Calculate message fee for cross-chain transfers if ( - params.transaction.module === MODULE.TOKEN - && params.transaction.command === COMMAND.TRANSFER_CROSS_CHAIN + params.transaction.module === MODULE.TOKEN && + params.transaction.command === COMMAND.TRANSFER_CROSS_CHAIN ) { + const channelInfo = await resolveChannelInfo(params.transaction.params.receivingChainID); + await validateUserHasTokenAccount(channelInfo.messageFeeTokenID, senderAddress); + // Calculate message fee const ccmBuffer = await getCcmBuffer({ ...formattedTransaction, fee: formattedTransaction.minFee, }); const ccmLength = ccmBuffer.length; - const channelInfo = await resolveChannelInfo(params.transaction.params.receivingChainID); const ccmByteFee = BigInt(ccmLength) * BigInt(channelInfo.minReturnFeePerByte); const totalMessageFee = additionalFees.params.messageFee @@ -329,20 +416,17 @@ const estimateTransactionFees = async params => { }; // Calculate the transaction size and minFee with updated params, for higher accuracy - formattedTransaction = await requestConnector( - 'formatTransaction', - { - transaction: { - ...trxWithMockProps, - params: { - ...trxWithMockProps.params, - messageFeeTokenID: channelInfo.messageFeeTokenID, - messageFee: totalMessageFee.toString(), - }, + formattedTransaction = await requestConnector('formatTransaction', { + transaction: { + ...trxWithMockProps, + params: { + ...trxWithMockProps.params, + messageFeeTokenID: channelInfo.messageFeeTokenID, + messageFee: totalMessageFee.toString(), }, - additionalFee: additionalFees.total.toString(), }, - ); + additionalFee: additionalFees.total.toString(), + }); // Add params to meta estimateTransactionFeesRes.meta.breakdown = { @@ -352,11 +436,12 @@ const estimateTransactionFees = async params => { ccmByteFee, additionalFees: BUFFER_BYTES_LENGTH ? { - ...additionalFees.params.messageFee, - bufferBytes: BigInt(BUFFER_BYTES_LENGTH * feeEstimatePerByte.minFeePerByte), - } : { - ...additionalFees.params.messageFee, - }, + ...additionalFees.params.messageFee, + bufferBytes: BigInt(BUFFER_BYTES_LENGTH * feeEstimatePerByte.minFeePerByte), + } + : { + ...additionalFees.params.messageFee, + }, }, }, }; @@ -364,9 +449,8 @@ const estimateTransactionFees = async params => { const { minFee, size } = formattedTransaction; - // TODO: Remove BUFFER_BYTES_LENGTH support after RC is tagged - const estimatedMinFee = BigInt(minFee) - + BigInt(BUFFER_BYTES_LENGTH * feeEstimatePerByte.minFeePerByte); + const estimatedMinFee = + BigInt(minFee) + BigInt(BUFFER_BYTES_LENGTH * feeEstimatePerByte.minFeePerByte); // Populate the response with transaction minimum fee information estimateTransactionFeesRes.data = { @@ -388,9 +472,9 @@ const estimateTransactionFees = async params => { byteFee: (BigInt(size) * BigInt(feeEstimatePerByte.minFeePerByte)).toString(), additionalFees: BUFFER_BYTES_LENGTH ? { - ...additionalFees.fee, - bufferBytes: BigInt(BUFFER_BYTES_LENGTH * feeEstimatePerByte.minFeePerByte), - } + ...additionalFees.fee, + bufferBytes: BigInt(BUFFER_BYTES_LENGTH * feeEstimatePerByte.minFeePerByte), + } : { ...additionalFees.fee }, }, }, @@ -400,8 +484,7 @@ const estimateTransactionFees = async params => { // Add priority only when the priority fee values are non-zero const { low, med, high } = feeEstimatePerByte; if (low !== 0 || med !== 0 || high !== 0) { - const dynamicFeeEstimates = calcDynamicFeeEstimates( - feeEstimatePerByte, estimatedMinFee, size); + const dynamicFeeEstimates = calcDynamicFeeEstimates(feeEstimatePerByte, estimatedMinFee, size); estimateTransactionFeesRes.transaction.fee.priority = dynamicFeeEstimates; } @@ -413,10 +496,12 @@ module.exports = { estimateTransactionFees, // Export for the unit tests + getCcmBuffer, calcDynamicFeeEstimates, mockTransaction, calcAdditionalFees, filterOptionalProps, getNumberOfSignatures, validateTransactionParams, + validateUserHasTokenAccount, }; diff --git a/services/blockchain-indexer/shared/dataService/business/validator/validatorInfo.js b/services/blockchain-indexer/shared/dataService/business/validator/validatorInfo.js index 9e68c421e..b7523b54b 100644 --- a/services/blockchain-indexer/shared/dataService/business/validator/validatorInfo.js +++ b/services/blockchain-indexer/shared/dataService/business/validator/validatorInfo.js @@ -13,7 +13,11 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { DB: { MySQL: { getTableInstance } } } = require('lisk-service-framework'); +const { + DB: { + MySQL: { getTableInstance }, + }, +} = require('lisk-service-framework'); const config = require('../../../../config'); const validatorsTableSchema = require('../../../database/schema/validators'); @@ -34,10 +38,12 @@ const getValidator = async params => { const { address } = params; const validatorsTable = await getValidatorsTable(); - const [{ proofOfPossession } = {}] = await validatorsTable.find({ address, limit: 1 }, ['proofOfPossession']); + const [{ proofOfPossession } = {}] = await validatorsTable.find({ address, limit: 1 }, [ + 'proofOfPossession', + ]); validator.data = { - ...await requestConnector('getValidator', { address }), + ...(await requestConnector('getValidator', { address })), proofOfPossession, }; diff --git a/services/blockchain-indexer/shared/dataService/dynamicReward/annualInflation.js b/services/blockchain-indexer/shared/dataService/dynamicReward/annualInflation.js index c5b4b317b..1b0ffd719 100644 --- a/services/blockchain-indexer/shared/dataService/dynamicReward/annualInflation.js +++ b/services/blockchain-indexer/shared/dataService/dynamicReward/annualInflation.js @@ -15,7 +15,7 @@ */ const business = require('../business'); -const getAnnualInflation = async (height) => { +const getAnnualInflation = async height => { const response = await business.getAnnualInflation(height); return response; }; diff --git a/services/blockchain-indexer/shared/dataService/dynamicReward/defaultReward.js b/services/blockchain-indexer/shared/dataService/dynamicReward/defaultReward.js index df4a51fa3..a99f04d1e 100644 --- a/services/blockchain-indexer/shared/dataService/dynamicReward/defaultReward.js +++ b/services/blockchain-indexer/shared/dataService/dynamicReward/defaultReward.js @@ -15,7 +15,7 @@ */ const business = require('../business'); -const getDefaultRewardAtHeight = async (params) => { +const getDefaultRewardAtHeight = async params => { const response = await business.getDefaultRewardAtHeight(params); return response; }; diff --git a/services/blockchain-indexer/shared/dataService/events.js b/services/blockchain-indexer/shared/dataService/events.js index 22470ed6c..4855bb425 100644 --- a/services/blockchain-indexer/shared/dataService/events.js +++ b/services/blockchain-indexer/shared/dataService/events.js @@ -15,7 +15,7 @@ */ const business = require('./business'); -const getEvents = async (params) => { +const getEvents = async params => { const response = await business.getEvents(params); return response; }; diff --git a/services/blockchain-indexer/shared/dataService/generators.js b/services/blockchain-indexer/shared/dataService/generators.js index 2027a6515..af34efc95 100644 --- a/services/blockchain-indexer/shared/dataService/generators.js +++ b/services/blockchain-indexer/shared/dataService/generators.js @@ -30,11 +30,13 @@ const getGenerators = async params => { const generatorsList = await business.getGenerators(); const validatorList = await getAllValidators(); - // TODO: Optimize. Generate the map with every 'chain_*' event and maintain in the memory const validatorMap = new Map(validatorList.map(validator => [validator.address, validator])); generatorsList.forEach(generator => { - if (validatorMap.has(generator.address) - && (!('search' in params) || isSubstringInArray([generator.name, generator.address, generator.publicKey], params.search))) { + if ( + validatorMap.has(generator.address) && + (!('search' in params) || + isSubstringInArray([generator.name, generator.address, generator.publicKey], params.search)) + ) { const validator = validatorMap.get(generator.address); generators.data.push({ ...generator, status: validator.status }); } diff --git a/services/blockchain-indexer/shared/dataService/index.js b/services/blockchain-indexer/shared/dataService/index.js index f15cbd444..892d990b3 100644 --- a/services/blockchain-indexer/shared/dataService/index.js +++ b/services/blockchain-indexer/shared/dataService/index.js @@ -25,8 +25,10 @@ const { getTransactionIDsByBlockID, getTransactionsByIDs, normalizeTransaction, + formatTransactionsInBlock, getEventsByHeight, cacheEventsByBlockID, + deleteEventsFromCacheByBlockID, getEventsByBlockID, deleteEventsFromCache, isMainchain, @@ -37,6 +39,7 @@ const { } = require('./business'); const { + formatBlock, getBlocks, getBlocksAssets, setLastBlock, @@ -110,6 +113,7 @@ const { invokeEndpoint } = require('./invoke'); module.exports = { // Blocks + formatBlock, getBlocks, getBlocksAssets, setLastBlock, @@ -143,6 +147,7 @@ module.exports = { getTransactionsByBlockID, dryRunTransactions, estimateTransactionFees, + formatTransactionsInBlock, // Interoperability getBlockchainApps, @@ -200,6 +205,7 @@ module.exports = { getPosLockedRewards, getEventsByHeight, cacheEventsByBlockID, + deleteEventsFromCacheByBlockID, getEventsByBlockID, deleteEventsFromCache, diff --git a/services/blockchain-indexer/shared/dataService/indexStatus.js b/services/blockchain-indexer/shared/dataService/indexStatus.js index 95ea60b67..f8ae737d7 100644 --- a/services/blockchain-indexer/shared/dataService/indexStatus.js +++ b/services/blockchain-indexer/shared/dataService/indexStatus.js @@ -21,19 +21,6 @@ let indexStatsCache = {}; let isIndexingInProgress = false; let lastUpdate = getCurrentTimestamp(); -const indexStatUpdateListener = _indexStats => { - indexStatsCache = _indexStats; - lastUpdate = getCurrentTimestamp(); -}; - -const indexingProgressListener = numJobsInProgress => { - isIndexingInProgress = numJobsInProgress > 0; - lastUpdate = getCurrentTimestamp(); -}; - -Signals.get('indexStatUpdate').add(indexStatUpdateListener); -Signals.get('numJobsInProgressUpdate').add(indexingProgressListener); - const getIndexStatus = async () => { const { currentChainHeight, @@ -60,9 +47,29 @@ const getIndexStatus = async () => { }; }; +const indexStatUpdateListener = async _indexStats => { + indexStatsCache = _indexStats; + lastUpdate = getCurrentTimestamp(); + + const indexStatus = await getIndexStatus(); + Signals.get('updateIndexStatus').dispatch(indexStatus); +}; + +const indexingProgressListener = numJobsInProgress => { + isIndexingInProgress = numJobsInProgress > 0; + lastUpdate = getCurrentTimestamp(); +}; + +Signals.get('indexStatUpdate').add(indexStatUpdateListener); +Signals.get('numJobsInProgressUpdate').add(indexingProgressListener); + const isBlockchainFullyIndexed = () => Number(indexStatsCache.percentage) === 100; module.exports = { getIndexStatus, isBlockchainFullyIndexed, + + // Testing + indexStatUpdateListener, + indexingProgressListener, }; diff --git a/services/blockchain-indexer/shared/dataService/invoke.js b/services/blockchain-indexer/shared/dataService/invoke.js index ddf7b93bd..90472bd48 100644 --- a/services/blockchain-indexer/shared/dataService/invoke.js +++ b/services/blockchain-indexer/shared/dataService/invoke.js @@ -15,7 +15,7 @@ */ const business = require('./business'); -const invokeEndpoint = async (params) => { +const invokeEndpoint = async params => { const response = await business.invokeEndpoint(params); return response; }; diff --git a/services/blockchain-indexer/shared/dataService/knownAccounts.js b/services/blockchain-indexer/shared/dataService/knownAccounts.js index 9f08c841b..e004c1ec4 100644 --- a/services/blockchain-indexer/shared/dataService/knownAccounts.js +++ b/services/blockchain-indexer/shared/dataService/knownAccounts.js @@ -27,13 +27,14 @@ const staticUrl = config.endpoints.liskStatic; let knowledge = {}; -const getAccountKnowledge = (address) => knowledge[address] ? knowledge[address] : {}; +const getAccountKnowledge = address => (knowledge[address] ? knowledge[address] : {}); -const resolveNetworkByChainID = (chainID) => { +const resolveNetworkByChainID = chainID => { const networkID = chainID.substring(0, LENGTH_NETWORK_ID); - const matchingNetwork = networkConfig.flatMap((network) => network) - .find((network) => network.chainID.startsWith(networkID)); + const matchingNetwork = networkConfig + .flatMap(network => network) + .find(network => network.chainID.startsWith(networkID)); return matchingNetwork ? matchingNetwork.name : null; }; @@ -42,7 +43,9 @@ const reloadAccountKnowledge = async () => { logger.debug('Reloading known accounts...'); try { - const { data: { chainID } } = await getNetworkStatus(); + const { + data: { chainID }, + } = await getNetworkStatus(); const networkName = resolveNetworkByChainID(chainID); if (networkName) { @@ -53,17 +56,19 @@ const reloadAccountKnowledge = async () => { if (typeof knownAccounts === 'object') { knowledge = knownAccounts; - logger.info(`Updated known accounts cache with ${Object.keys(knowledge).length} entries.`); + logger.info( + `Updated known accounts cache with ${Object.keys(knowledge).length} entries.`, + ); } } else { logger.warn('Lisk static URL did not respond with valid data.'); - logger.debug(`Recieved: ${util.inspect(res)}.`); + logger.debug(`Received: ${util.inspect(res)}.`); } } else { - logger.warn(`Static information anavailable for the current chainID: ${chainID}.`); + logger.warn(`Static information unavailable for the current chainID: ${chainID}.`); } } catch (err) { - logger.error(`Could not reload known accounts: ${err.message}.`); + logger.error(`Could not reload known accounts: ${err.message}`); logger.debug(err.stack); } }; diff --git a/services/blockchain-indexer/shared/dataService/legacy/legacy.js b/services/blockchain-indexer/shared/dataService/legacy/legacy.js index a34246baa..2b9212766 100644 --- a/services/blockchain-indexer/shared/dataService/legacy/legacy.js +++ b/services/blockchain-indexer/shared/dataService/legacy/legacy.js @@ -15,7 +15,7 @@ */ const business = require('../business'); -const getLegacyAccountInfo = async (params) => { +const getLegacyAccountInfo = async params => { const legacyAccountInfo = await business.getLegacyAccountInfo(params); return legacyAccountInfo; }; diff --git a/services/blockchain-indexer/shared/dataService/pos/index.js b/services/blockchain-indexer/shared/dataService/pos/index.js index ced30c19a..d7bff011f 100644 --- a/services/blockchain-indexer/shared/dataService/pos/index.js +++ b/services/blockchain-indexer/shared/dataService/pos/index.js @@ -19,11 +19,7 @@ const { getPosUnlocks } = require('./unlocks'); const { getPosConstants } = require('./constants'); const { getPosLockedRewards } = require('./lockedRewards'); const { getPosClaimableRewards } = require('./claimableRewards'); -const { - reloadValidatorCache, - getPosValidators, - getAllValidators, -} = require('./validators'); +const { reloadValidatorCache, getPosValidators, getAllValidators } = require('./validators'); module.exports = { // Stakes diff --git a/services/blockchain-indexer/shared/dataService/pos/validators.js b/services/blockchain-indexer/shared/dataService/pos/validators.js index 5aad8c831..e7058949c 100644 --- a/services/blockchain-indexer/shared/dataService/pos/validators.js +++ b/services/blockchain-indexer/shared/dataService/pos/validators.js @@ -34,10 +34,7 @@ const { getHexAddress } = require('../utils/account'); const { MODULE, COMMAND } = require('../../constants'); const { sortComparator } = require('../../utils/array'); const { parseToJSONCompatObj } = require('../../utils/parser'); -const { - updateAccountInfo, - getLisk32AddressFromPublicKey, -} = require('../../utils/account'); +const { updateAccountInfo, getLisk32AddressFromPublicKey } = require('../../utils/account'); const validatorsTableSchema = require('../../database/schema/validators'); const { indexAccountPublicKey } = require('../../indexer/accountIndex'); @@ -63,7 +60,7 @@ let validatorList = []; const validatorComparator = (a, b) => { const diff = BigInt(b.validatorWeight) - BigInt(a.validatorWeight); if (diff !== BigInt('0')) return Number(diff); - return Buffer.from(a.hexAddress, 'hex').compare(Buffer.from(b.hexAddress, 'hex')); + return Buffer.from(b.hexAddress, 'hex').compare(Buffer.from(a.hexAddress, 'hex')); }; const computeValidatorRank = async () => { @@ -88,27 +85,29 @@ const computeValidatorStatus = async () => { const generatorMap = new Map(generatorsList.map(generator => [generator.address, generator])); - const generatorInfo = (validatorList - .filter(validator => generatorMap.get(validator.address))) + const generatorInfo = validatorList + .filter(validator => generatorMap.get(validator.address)) .map(entry => ({ ...entry, hexAddress: getHexAddress(entry.address) })) .sort(validatorComparator); - const activeGeneratorsList = (generatorInfo.slice(0, numberActiveValidators)) + const activeGeneratorsList = generatorInfo + .slice(0, numberActiveValidators) .map(acc => acc.address); - const standByGeneratorsList = (generatorInfo - .slice(generatorInfo.length - numberStandbyValidators)).map(acc => acc.address); + const standByGeneratorsList = generatorInfo + .slice(generatorInfo.length - numberStandbyValidators) + .map(acc => acc.address); - const verifyIfPunished = (validator) => { + const verifyIfPunished = validator => { const isPunished = validator.punishmentPeriods.some( - punishmentPeriod => punishmentPeriod.start <= latestBlock.height - && latestBlock.height <= punishmentPeriod.end, + punishmentPeriod => + punishmentPeriod.start <= latestBlock.height && latestBlock.height <= punishmentPeriod.end, ); return isPunished; }; logger.debug('Determine validator status.'); - validatorList.forEach((validator) => { + validatorList.forEach(validator => { // Update validator status, if applicable if (validator.isBanned) { validator.status = VALIDATOR_STATUS.BANNED; @@ -150,12 +149,12 @@ const loadAllPosValidators = async () => { logger.info(`Updated validator list with ${validatorList.length} validators.`); } } catch (err) { - logger.warn(`Failed to load all validators due to: ${err.message}.`); + logger.warn(`Failed to load all validators due to: ${err.message}`); } }; const reloadValidatorCache = async () => { - if (!await business.isPosModuleRegistered()) return; + if (!(await business.isPosModuleRegistered())) return; await loadAllPosValidators(); await computeValidatorRank(); @@ -206,8 +205,10 @@ const getPosValidators = async params => { if (addressSet.size && !addressSet.has(validator.address)) return false; if (nameSet.size && !nameSet.has(validator.name)) return false; if (statusSet.size && !statusSet.has(validator.status)) return false; - if (params.search && !isSubstringInArray( - [validator.name, validator.address, validator.publicKey], params.search)) { + if ( + params.search && + !isSubstringInArray([validator.name, validator.address, validator.publicKey], params.search) + ) { return false; } @@ -254,7 +255,6 @@ const getPosValidators = async params => { return parseToJSONCompatObj(validators); }; -// TODO: Test // Keep the validator cache up-to-date const updateValidatorListEveryBlock = () => { const EVENT_NEW_BLOCK = 'newBlock'; @@ -268,24 +268,24 @@ const updateValidatorListEveryBlock = () => { block.transactions.forEach(tx => { if (tx.module === MODULE.POS) { if ([COMMAND.REGISTER_VALIDATOR, COMMAND.CHANGE_COMMISSION].includes(tx.command)) { - updatedValidatorAddresses - .push(getLisk32AddressFromPublicKey(tx.senderPublicKey)); + updatedValidatorAddresses.push(getLisk32AddressFromPublicKey(tx.senderPublicKey)); } else if (tx.command === COMMAND.STAKE) { - // TODO: Verify - tx.params.stakes - .forEach(stake => updatedValidatorAddresses.push(stake.validatorAddress)); + tx.params.stakes.forEach(stake => + updatedValidatorAddresses.push(stake.validatorAddress), + ); } } }); - // TODO: Validate the logic if there is need to update validator cache on (un-)stake tx if (updatedValidatorAddresses.length) { - const updatedValidatorAccounts = await business - .getPosValidators({ addresses: updatedValidatorAddresses }); + const updatedValidatorAccounts = await business.getPosValidators({ + addresses: updatedValidatorAddresses, + }); updatedValidatorAccounts.forEach(validator => { - const validatorIndex = validatorList - .findIndex(acc => acc.address === validator.address); + const validatorIndex = validatorList.findIndex( + acc => acc.address === validator.address, + ); if (eventType === EVENT_DELETE_BLOCK && validatorIndex !== -1) { // Remove validator from list when @@ -307,21 +307,26 @@ const updateValidatorListEveryBlock = () => { } // Update validator cache with generatedBlocks and rewards - const validatorIndex = validatorList - .findIndex(acc => acc.address === block.generatorAddress); - if (validatorList[validatorIndex] - && Object.getOwnPropertyNames(validatorList[validatorIndex]).length) { - // TODO: Update + const validatorIndex = validatorList.findIndex( + acc => acc.address === block.generatorAddress, + ); + if ( + validatorList[validatorIndex] && + Object.getOwnPropertyNames(validatorList[validatorIndex]).length + ) { if ( - validatorList[validatorIndex].generatedBlocks && validatorList[validatorIndex].rewards + validatorList[validatorIndex].generatedBlocks && + validatorList[validatorIndex].rewards ) { - validatorList[validatorIndex].generatedBlocks = eventType === EVENT_NEW_BLOCK - ? validatorList[validatorIndex].generatedBlocks + 1 - : validatorList[validatorIndex].generatedBlocks - 1; - - validatorList[validatorIndex].rewards = eventType === EVENT_NEW_BLOCK - ? (BigInt(validatorList[validatorIndex].rewards) + BigInt(block.reward)).toString() - : (BigInt(validatorList[validatorIndex].rewards) - BigInt(block.reward)).toString(); + validatorList[validatorIndex].generatedBlocks = + eventType === EVENT_NEW_BLOCK + ? validatorList[validatorIndex].generatedBlocks + 1 + : validatorList[validatorIndex].generatedBlocks - 1; + + validatorList[validatorIndex].rewards = + eventType === EVENT_NEW_BLOCK + ? (BigInt(validatorList[validatorIndex].rewards) + BigInt(block.reward)).toString() + : (BigInt(validatorList[validatorIndex].rewards) - BigInt(block.reward)).toString(); } } } @@ -330,10 +335,10 @@ const updateValidatorListEveryBlock = () => { } }; - const updateValidatorCacheOnNewBlockListener = (block) => { + const updateValidatorCacheOnNewBlockListener = block => { updateValidatorCacheListener(EVENT_NEW_BLOCK, block); }; - const updateValidatorCacheOnDeleteBlockListener = (block) => { + const updateValidatorCacheOnDeleteBlockListener = block => { updateValidatorCacheListener(EVENT_DELETE_BLOCK, block); }; Signals.get('newBlock').add(updateValidatorCacheOnNewBlockListener); @@ -342,7 +347,7 @@ const updateValidatorListEveryBlock = () => { // Updates the account details of the validators const updateValidatorListOnAccountsUpdate = () => { - const updateValidatorListOnAccountsUpdateListener = (addresses) => { + const updateValidatorListOnAccountsUpdateListener = addresses => { addresses.forEach(async address => { const validatorIndex = validatorList.findIndex(acc => acc.address === address); const validator = validatorList[validatorIndex] || {}; diff --git a/services/blockchain-indexer/shared/dataService/token/token.js b/services/blockchain-indexer/shared/dataService/token/token.js index 691aa5f65..cb049bb35 100644 --- a/services/blockchain-indexer/shared/dataService/token/token.js +++ b/services/blockchain-indexer/shared/dataService/token/token.js @@ -15,17 +15,17 @@ */ const business = require('../business'); -const tokenHasUserAccount = async (params) => business.tokenHasUserAccount(params); +const tokenHasUserAccount = async params => business.tokenHasUserAccount(params); -const getAvailableTokenIDs = async (params) => business.getAvailableTokenIDs(params); +const getAvailableTokenIDs = async params => business.getAvailableTokenIDs(params); -const getTokenBalances = async (params) => business.getTokenBalances(params); +const getTokenBalances = async params => business.getTokenBalances(params); -const getTokenSummary = async (params) => business.getTokenSummary(params); +const getTokenSummary = async params => business.getTokenSummary(params); const getTokenConstants = async () => business.getTokenConstants(); -const getTokenTopBalances = async (params) => business.getTokenTopBalances(params); +const getTokenTopBalances = async params => business.getTokenTopBalances(params); module.exports = { tokenHasUserAccount, diff --git a/services/blockchain-indexer/shared/dataService/transactions.js b/services/blockchain-indexer/shared/dataService/transactions.js index 465867d37..ffb1bebff 100644 --- a/services/blockchain-indexer/shared/dataService/transactions.js +++ b/services/blockchain-indexer/shared/dataService/transactions.js @@ -16,18 +16,15 @@ const business = require('./business'); const { TRANSACTION_STATUS } = require('../constants'); -const isIncludePendingTransactions = (executionStatus) => { +const isIncludePendingTransactions = executionStatus => { if (!executionStatus) return false; const INCLUDE_PENDING_WHEN_STATUSES = [TRANSACTION_STATUS.PENDING]; const execStatuses = executionStatus.split(','); - const isIncludePending = execStatuses.reduce( - (isInclude, status) => { - isInclude = isInclude || INCLUDE_PENDING_WHEN_STATUSES.includes(status); - return isInclude; - }, - false, - ); + const isIncludePending = execStatuses.reduce((isInclude, status) => { + isInclude = isInclude || INCLUDE_PENDING_WHEN_STATUSES.includes(status); + return isInclude; + }, false); return isIncludePending; }; @@ -44,7 +41,7 @@ const getPendingTransactions = async params => { return pendingTransactions; }; -const mergeTransactions = async (params) => { +const mergeTransactions = async params => { const allTransactions = { data: [], meta: {}, @@ -78,9 +75,10 @@ const mergeTransactions = async (params) => { transactions.meta.total = transactions.meta.total || 0; } - allTransactions.data = pendingTxs.data.length === limit - ? pendingTxs.data - : pendingTxs.data.concat(transactions.data).slice(0, limit); + allTransactions.data = + pendingTxs.data.length === limit + ? pendingTxs.data + : pendingTxs.data.concat(transactions.data).slice(0, limit); allTransactions.meta.count = allTransactions.data.length; allTransactions.meta.offset = offset; @@ -112,13 +110,14 @@ const postTransactions = async params => { transactionID: response.transactionId, }; } catch (err) { - if (err.message.includes('ECONNREFUSED')) return { - data: { error: 'Unable to reach a network node.' }, - status: 'INTERNAL_SERVER_ERROR', - }; + if (err.message.includes('ECONNREFUSED')) + return { + data: { error: 'Unable to reach a network node.' }, + status: 'INTERNAL_SERVER_ERROR', + }; return { - data: { error: `Transaction payload was rejected by the network node: ${err.message}.` }, + data: { error: `Transaction payload was rejected by the network node: ${err.message}` }, status: 'BAD_REQUEST', }; } @@ -133,13 +132,14 @@ const dryRunTransactions = async params => { const response = await business.dryRunTransactions(params); return response; } catch (err) { - if (err.message.includes('ECONNREFUSED')) return { - data: { error: 'Unable to reach a network node.' }, - status: 'INTERNAL_SERVER_ERROR', - }; + if (err.message.includes('ECONNREFUSED')) + return { + data: { error: 'Unable to reach a network node.' }, + status: 'INTERNAL_SERVER_ERROR', + }; return { - data: { error: `Failed to dry run transaction: ${err.message}.` }, + data: { error: `Failed to dry run transaction: ${err.message}` }, status: 'BAD_REQUEST', }; } diff --git a/services/blockchain-indexer/shared/dataService/utils/account.js b/services/blockchain-indexer/shared/dataService/utils/account.js index 866ff2447..5ae912cc2 100644 --- a/services/blockchain-indexer/shared/dataService/utils/account.js +++ b/services/blockchain-indexer/shared/dataService/utils/account.js @@ -14,14 +14,8 @@ * */ const { - address: { - getLisk32AddressFromAddress, - getAddressFromLisk32Address, - }, - legacyAddress: { - getLegacyAddressFromPublicKey, - - }, + address: { getLisk32AddressFromAddress, getAddressFromLisk32Address }, + legacyAddress: { getLegacyAddressFromPublicKey }, } = require('@liskhq/lisk-cryptography'); const { @@ -52,23 +46,29 @@ const getLegacyFormatAddressFromPublicKey = publicKey => { return legacyAddress; }; -const getLisk32AddressFromHexAddress = address => getLisk32AddressFromAddress(Buffer.from(address, 'hex')); +const getLisk32AddressFromHexAddress = address => + getLisk32AddressFromAddress(Buffer.from(address, 'hex')); -const getLisk32Address = address => address.startsWith('lsk') ? address : getLisk32AddressFromHexAddress(address); +const getLisk32Address = address => + address.startsWith('lsk') ? address : getLisk32AddressFromHexAddress(address); -const getHexAddress = address => address.startsWith('lsk') - ? getAddressFromLisk32Address(address).toString('hex') - : address; +const getHexAddress = address => + address.startsWith('lsk') ? getAddressFromLisk32Address(address).toString('hex') : address; const isStringType = value => typeof value === 'string'; -const parseAddress = address => isStringType(address) ? address.toUpperCase() : ''; +const parseAddress = address => (isStringType(address) ? address.toUpperCase() : ''); -const validateLisk32Address = address => (typeof address === 'string' && regex.ADDRESS_LISK32.test(address)); +const validateLisk32Address = address => + typeof address === 'string' && regex.ADDRESS_LISK32.test(address); const getCachedAccountBy = async (key, value) => { const accountsTable = await getAccountsTable(); - const [result] = await accountsTable.find({ [key]: value, limit: 1 }, ['address', 'name', 'publicKey']); + const [result] = await accountsTable.find({ [key]: value, limit: 1 }, [ + 'address', + 'name', + 'publicKey', + ]); if (!result) return null; const { address, name, publicKey } = result; const account = { address, name, publicKey }; diff --git a/services/blockchain-indexer/shared/dataService/utils/validator.js b/services/blockchain-indexer/shared/dataService/utils/validator.js index d634e5c1d..c9ab9209b 100644 --- a/services/blockchain-indexer/shared/dataService/utils/validator.js +++ b/services/blockchain-indexer/shared/dataService/utils/validator.js @@ -13,15 +13,13 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - CacheRedis, -} = require('lisk-service-framework'); +const { CacheRedis } = require('lisk-service-framework'); const config = require('../../../config'); const validatorCache = CacheRedis('validator', config.endpoints.cache); -const getAddressByName = async (name) => { +const getAddressByName = async name => { if (name) { const address = await validatorCache.get(name); if (address) return address; diff --git a/services/blockchain-indexer/shared/database/schema/events.js b/services/blockchain-indexer/shared/database/schema/events.js index 5a1bf6e23..59312ed17 100644 --- a/services/blockchain-indexer/shared/database/schema/events.js +++ b/services/blockchain-indexer/shared/database/schema/events.js @@ -33,14 +33,38 @@ module.exports = { timestamp: { type: 'range' }, }, compositeIndexes: { - timestamp_desc_index_asc: [{ key: 'timestamp', direction: 'DESC' }, { key: 'index', direction: 'ASC' }], - timestamp_asc_index_asc: [{ key: 'timestamp', direction: 'ASC' }, { key: 'index', direction: 'ASC' }], - timestamp_desc_index_desc: [{ key: 'timestamp', direction: 'DESC' }, { key: 'index', direction: 'DESC' }], - timestamp_asc_index_desc: [{ key: 'timestamp', direction: 'ASC' }, { key: 'index', direction: 'DESC' }], - height_desc_index_asc: [{ key: 'height', direction: 'DESC' }, { key: 'index', direction: 'ASC' }], - height_asc_index_asc: [{ key: 'height', direction: 'ASC' }, { key: 'index', direction: 'ASC' }], - height_desc_index_desc: [{ key: 'height', direction: 'DESC' }, { key: 'index', direction: 'DESC' }], - height_asc_index_desc: [{ key: 'height', direction: 'ASC' }, { key: 'index', direction: 'DESC' }], + timestamp_desc_index_asc: [ + { key: 'timestamp', direction: 'DESC' }, + { key: 'index', direction: 'ASC' }, + ], + timestamp_asc_index_asc: [ + { key: 'timestamp', direction: 'ASC' }, + { key: 'index', direction: 'ASC' }, + ], + timestamp_desc_index_desc: [ + { key: 'timestamp', direction: 'DESC' }, + { key: 'index', direction: 'DESC' }, + ], + timestamp_asc_index_desc: [ + { key: 'timestamp', direction: 'ASC' }, + { key: 'index', direction: 'DESC' }, + ], + height_desc_index_asc: [ + { key: 'height', direction: 'DESC' }, + { key: 'index', direction: 'ASC' }, + ], + height_asc_index_asc: [ + { key: 'height', direction: 'ASC' }, + { key: 'index', direction: 'ASC' }, + ], + height_desc_index_desc: [ + { key: 'height', direction: 'DESC' }, + { key: 'index', direction: 'DESC' }, + ], + height_asc_index_desc: [ + { key: 'height', direction: 'ASC' }, + { key: 'index', direction: 'DESC' }, + ], }, purge: {}, }; diff --git a/services/blockchain-indexer/shared/database/schema/transactions.js b/services/blockchain-indexer/shared/database/schema/transactions.js index f3dc4b6d9..44348c7e4 100644 --- a/services/blockchain-indexer/shared/database/schema/transactions.js +++ b/services/blockchain-indexer/shared/database/schema/transactions.js @@ -46,6 +46,7 @@ module.exports = { amount: { type: 'range' }, data: { type: 'key' }, senderAddress: { type: 'key' }, + receivingChainID: { type: 'key' }, executionStatus: { type: 'key' }, }, purge: {}, diff --git a/services/blockchain-indexer/shared/eventsProcessor.js b/services/blockchain-indexer/shared/eventsProcessor.js deleted file mode 100644 index ca477c1a6..000000000 --- a/services/blockchain-indexer/shared/eventsProcessor.js +++ /dev/null @@ -1,96 +0,0 @@ -/* - * LiskHQ/lisk-service - * Copyright © 2022 Lisk Foundation - * - * See the LICENSE file at the top-level directory of this distribution - * for licensing information. - * - * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, - * no part of this software, including this file, may be copied, modified, - * propagated, or distributed except according to the terms contained in the - * LICENSE file. - * - * Removal or modification of this copyright notice is prohibited. - * - */ -const MessageQueue = require('bull'); -const { Logger, Signals } = require('lisk-service-framework'); - -const { - getBlocks, - performLastBlockUpdate, - reloadGeneratorsCache, - reloadValidatorCache, - getGenerators, - getNumberOfGenerators, - normalizeBlocks, -} = require('./dataService'); - -const { deleteBlock, indexNewBlock } = require('./indexer/blockchainIndex'); - -const config = require('../config'); - -const logger = Logger(); - -const eventMessageQueue = new MessageQueue( - config.queue.event.name, - config.endpoints.messageQueue, - { defaultJobOptions: config.queue.defaultJobOptions }, -); - -const newBlockProcessor = async (block) => { - logger.debug(`New block arrived at height ${block.height}, id: ${block.id}`); - const response = await getBlocks({ height: block.height }); - const [newBlock] = response.data; - await indexNewBlock(newBlock); - await performLastBlockUpdate(newBlock); - Signals.get('newBlock').dispatch(response); -}; - -const deleteBlockProcessor = async (block) => { - let response; - try { - logger.debug(`Processing the delete block event for the block at height: ${block.height}, id: ${block.id}`); - response = await getBlocks({ blockID: block.id }); - await deleteBlock(block); - } catch (error) { - const normalizedBlocks = await normalizeBlocks([{ - header: block, - transactions: [], - assets: [], - }]); - response = { data: normalizedBlocks }; - } - Signals.get('deleteBlock').dispatch(response); -}; - -const newRoundProcessor = async () => { - logger.debug('Performing updates on new round.'); - await reloadValidatorCache(); - await reloadGeneratorsCache(); - const limit = await getNumberOfGenerators(); - const generators = await getGenerators({ limit, offset: 0 }); - const response = { generators: generators.data.map(generator => generator.address) }; - Signals.get('newRound').dispatch(response); -}; - -const initEventsProcess = async () => { - eventMessageQueue.process(async (job) => { - logger.debug('Subscribed to the events from coordinator.'); - const { isNewBlock, isDeleteBlock, isNewRound } = job.data; - - if (isNewBlock) { - const { blockHeader } = job.data; - await newBlockProcessor(blockHeader); - } else if (isDeleteBlock) { - const { blockHeader } = job.data; - await deleteBlockProcessor(blockHeader); - } else if (isNewRound) { - await newRoundProcessor(); - } - }); -}; - -module.exports = { - initEventsProcess, -}; diff --git a/services/blockchain-indexer/shared/indexer/accountBalanceIndex.js b/services/blockchain-indexer/shared/indexer/accountBalanceIndex.js index 9ddd481db..81bb7b1a0 100644 --- a/services/blockchain-indexer/shared/indexer/accountBalanceIndex.js +++ b/services/blockchain-indexer/shared/indexer/accountBalanceIndex.js @@ -13,12 +13,12 @@ * Removal or modification of this copyright notice is prohibited. * */ -const BluebirdPromise = require('bluebird'); +const Redis = require('ioredis'); const { DB: { MySQL: { getTableInstance }, }, - Queue, + Logger, } = require('lisk-service-framework'); const config = require('../../config'); @@ -26,11 +26,15 @@ const { MODULE } = require('../constants'); const { getTokenBalances } = require('../dataService'); const accountBalancesTableSchema = require('../database/schema/accountBalances'); +const logger = Logger(); + +const redis = new Redis(config.endpoints.cache); + const MYSQL_ENDPOINT = config.endpoints.mysql; const getAccountBalancesTable = () => getTableInstance(accountBalancesTableSchema, MYSQL_ENDPOINT); -const updateAccountBalances = async (address) => { +const updateAccountBalances = async address => { const accountBalancesTable = await getAccountBalancesTable(); const { data: balanceInfos } = await getTokenBalances({ address }); @@ -44,42 +48,61 @@ const updateAccountBalances = async (address) => { await accountBalancesTable.upsert(updatedTokenBalances); }; -const accountBalanceIndexProcessor = async job => updateAccountBalances(job.data.address); -const accountBalanceIndexQueue = Queue( - config.endpoints.cache, - config.queue.accountBalanceIndex.name, - accountBalanceIndexProcessor, - config.queue.accountBalanceIndex.concurrency, -); - -const scheduleAccountBalanceUpdateFromEvents = async (events) => { - await BluebirdPromise.map( - events, - async event => { - // Skip non token module events - if (event.module !== MODULE.TOKEN) return; - - const { data: eventData = {} } = event; - const eventDataKeys = Object.keys(eventData); - await BluebirdPromise.map( - eventDataKeys, - async key => { - // Schedule account balance update for address related properties - if (key.toLowerCase().includes('address')) { - await accountBalanceIndexQueue.add({ address: eventData[key] }); - } - }, - { concurrency: eventDataKeys.length }, - ); - }, - { concurrency: events.length }, +const scheduleAddressesBalanceUpdate = async addresses => { + if (addresses.length) { + redis.sadd(config.set.accountBalanceUpdate.name, addresses); + } +}; + +const getAddressesFromTokenEvents = events => { + const addressesToUpdate = []; + const tokenModuleEvents = events.filter(event => event.module === MODULE.TOKEN); + + // eslint-disable-next-line no-restricted-syntax + for (const event of tokenModuleEvents) { + const { data: eventData = {} } = event; + const eventDataKeys = Object.keys(eventData); + // eslint-disable-next-line no-restricted-syntax + for (const key of eventDataKeys) { + if (key.toLowerCase().includes('address')) { + const address = eventData[key]; + addressesToUpdate.push(address); + } + } + } + + return addressesToUpdate; +}; + +const triggerAccountsBalanceUpdate = async () => { + const addresses = await redis.spop( + config.set.accountBalanceUpdate.name, + config.set.accountBalanceUpdate.batchSize, ); + + const numAddressesScheduled = addresses.length; + try { + // eslint-disable-next-line no-restricted-syntax + while (addresses.length) { + const address = addresses.shift(); + await updateAccountBalances(address); + } + logger.info(`Successfully updated account balances for ${numAddressesScheduled} account(s).`); + } catch (err) { + // Reschedule accounts balance update on error for remaining addresses + await scheduleAddressesBalanceUpdate(addresses); + + const numPending = addresses.length; + const numSuccess = numAddressesScheduled - numPending; + logger.info( + `Successfully updated account balances for ${numSuccess} account(s). Rescheduling updates for ${numPending} account(s).`, + ); + } }; module.exports = { - scheduleAccountBalanceUpdateFromEvents, updateAccountBalances, - - // For testing - accountBalanceIndexQueue, + getAddressesFromTokenEvents, + triggerAccountsBalanceUpdate, + scheduleAddressesBalanceUpdate, }; diff --git a/services/blockchain-indexer/shared/indexer/accountIndex.js b/services/blockchain-indexer/shared/indexer/accountIndex.js index 76b9403e6..85781ea4b 100644 --- a/services/blockchain-indexer/shared/indexer/accountIndex.js +++ b/services/blockchain-indexer/shared/indexer/accountIndex.js @@ -36,7 +36,7 @@ const MYSQL_ENDPOINT = config.endpoints.mysql; const getAccountsTable = () => getTableInstance(accountsTableSchema, MYSQL_ENDPOINT); -const updateAccountInfoPk = async (job) => { +const updateAccountInfoPk = async job => { const publicKey = job.data; try { @@ -53,7 +53,7 @@ const updateAccountInfoPk = async (job) => { } }; -const updateAccountInfoAddr = async (job) => { +const updateAccountInfoAddr = async job => { const address = job.data; try { @@ -82,15 +82,11 @@ const accountAddrUpdateQueue = Queue( updateAccountInfoAddr, config.queue.accountQueueByAddress.concurrency, ); -const indexAccountPublicKey = async (publicKey) => redis.sadd( - config.queue.indexAccountPublicKey.name, - publicKey, -); +const indexAccountPublicKey = async publicKey => + redis.sadd(config.queue.indexAccountPublicKey.name, publicKey); -const indexAccountAddress = async (address) => redis.sadd( - config.queue.indexAccountAddress.name, - address, -); +const indexAccountAddress = async address => + redis.sadd(config.queue.indexAccountAddress.name, address); const triggerAccountUpdates = async () => { const publicKeys = await redis.spop( @@ -115,6 +111,7 @@ module.exports = { indexAccountPublicKey, indexAccountAddress, triggerAccountUpdates, + accountAddrUpdateQueue, // Testing updateAccountInfoPk, diff --git a/services/blockchain-indexer/shared/indexer/blockchainIndex.js b/services/blockchain-indexer/shared/indexer/blockchainIndex.js index 9842042be..cf6f430f1 100644 --- a/services/blockchain-indexer/shared/indexer/blockchainIndex.js +++ b/services/blockchain-indexer/shared/indexer/blockchainIndex.js @@ -26,11 +26,9 @@ const { startDBTransaction, commitDBTransaction, rollbackDBTransaction, - KVStore: { - getKeyValueTable, - }, }, }, + Utils: { waitForIt }, } = require('lisk-service-framework'); const { applyTransaction, revertTransaction } = require('./transactionProcessor'); @@ -42,24 +40,29 @@ const { getEventsByHeight, cacheEventsByBlockID, getEventsByBlockID, - deleteEventsFromCache, + deleteEventsFromCacheByBlockID, getTransactionsByBlockID, } = require('../dataService'); -const { - range, -} = require('../utils/array'); - +const { range } = require('../utils/array'); const { getLisk32AddressFromPublicKey } = require('../utils/account'); const { getTransactionExecutionStatus } = require('../utils/transactions'); const { getEventsInfoToIndex } = require('./utils/events'); const { calcCommissionAmount, calcSelfStakeReward } = require('./utils/validator'); +const { indexAccountPublicKey } = require('./accountIndex'); +const { getGenesisAssetIntervalTimeout, indexGenesisBlockAssets } = require('./genesisBlock'); +const { updateTotalLockedAmounts } = require('./utils/blockchainIndex'); +const { + getAddressesFromTokenEvents, + scheduleAddressesBalanceUpdate, +} = require('./accountBalanceIndex'); const { getFinalizedHeight, getGenesisHeight, EVENT, MODULE, + getCurrentHeight, } = require('../constants'); const config = require('../../config'); @@ -71,7 +74,6 @@ const transactionsTableSchema = require('../database/schema/transactions'); const validatorsTableSchema = require('../database/schema/validators'); const MYSQL_ENDPOINT = config.endpoints.mysql; -const keyValueTable = getKeyValueTable(); const logger = Logger(); @@ -81,48 +83,165 @@ const getEventTopicsTable = () => getTableInstance(eventTopicsTableSchema, MYSQL const getTransactionsTable = () => getTableInstance(transactionsTableSchema, MYSQL_ENDPOINT); const getValidatorsTable = () => getTableInstance(validatorsTableSchema, MYSQL_ENDPOINT); -const { indexGenesisBlockAssets } = require('./genesisBlock'); -const { updateTotalLockedAmounts } = require('./utils/blockchainIndex'); -const { scheduleAccountBalanceUpdateFromEvents } = require('./accountBalanceIndex'); -const { indexAccountPublicKey } = require('./accountIndex'); +const validateBlock = block => !!block && block.height >= 0; -const INDEX_VERIFIED_HEIGHT = 'indexVerifiedHeight'; +const DB_STATUS = Object.freeze({ + COMMIT: 'commit', + ROLLBACK: 'rollback', +}); -const validateBlock = (block) => !!block && block.height >= 0; +// eslint-disable-next-line consistent-return +const checkBlockHeightIndexStatusInDB = async (blockHeight, status) => { + const blocksTable = await getBlocksTable(); + const [{ height } = {}] = await blocksTable.find({ height: blockHeight }, ['height']); -const indexBlock = async job => { - const { block } = job.data; - if (!validateBlock(block)) throw new Error(`Invalid block ${block.id} at height ${block.height}.`); + const isCommit = DB_STATUS.COMMIT === status; + const isRollback = DB_STATUS.ROLLBACK === status; + if ((isCommit && height === blockHeight) || (isRollback && height === undefined)) { + logger.debug(`Block at height ${blockHeight} is ${isCommit ? 'committed' : 'rolled back'}.`); + return true; + } + + logger.debug( + `Block at height ${blockHeight} is not yet ${isCommit ? 'committed' : 'rolled back'}.`, + ); +}; + +// eslint-disable-next-line consistent-return +const checkBlockIDsDeleteStatusInDB = async (blockIDs, status) => { const blocksTable = await getBlocksTable(); - const connection = await getDBConnection(MYSQL_ENDPOINT); - const dbTrx = await startDBTransaction(connection); - logger.debug(`Created new MySQL transaction to index block ${block.id} at height ${block.height}.`); + const resultSet = await blocksTable.find({ whereIn: { property: 'id', values: blockIDs } }); + const numResults = resultSet.length; - let blockReward = BigInt('0'); + const isCommit = DB_STATUS.COMMIT === status; + const isRollback = DB_STATUS.ROLLBACK === status; + + const blockIDString = blockIDs.join(' ,'); + if ((isCommit && numResults === 0) || (isRollback && numResults !== 0)) { + logger.debug(`Deleting block(s) ${blockIDString} ${isCommit ? 'committed' : 'rolled back'}.`); + return true; + } + + logger.debug( + `Deleting block(s) ${blockIDString} not yet ${isCommit ? 'committed' : 'rolled back'}.`, + ); +}; + +const indexBlock = async job => { + const { height: blockHeightFromJobData } = job.data; + let blockHeightToIndex = blockHeightFromJobData; + let addressesToUpdateBalance = []; + let dbTrx; + let blockToIndexFromNode; + const genesisHeight = await getGenesisHeight(); try { - if (block.height === await getGenesisHeight()) { + const blocksTable = await getBlocksTable(); + + const [lastIndexedBlock = {}] = await blocksTable.find( + { + sort: 'height:desc', + limit: 1, + }, + ['height'], + ); + + const { height: lastIndexedHeight } = lastIndexedBlock; + + // Always index the last indexed blockHeight + 1 (sequential indexing) + if (typeof lastIndexedHeight !== 'undefined') { + blockHeightToIndex = lastIndexedHeight + 1; + + // Skip job run if the height to be indexed does not exist + if ((await getCurrentHeight()) < blockHeightToIndex) return; + } + + const [currentBlockInDB = {}] = await blocksTable.find( + { + where: { height: blockHeightToIndex }, + limit: 1, + }, + ['id', 'height'], + ); + + let prevBlockInDB = {}; + if (blockHeightToIndex > genesisHeight + 1) { + [prevBlockInDB] = await blocksTable.find( + { + where: { height: blockHeightToIndex - 1 }, + limit: 1, + }, + ['id', 'height'], + ); + } + + // Get block from node + blockToIndexFromNode = await getBlockByHeight(blockHeightToIndex); + if (!validateBlock(blockToIndexFromNode)) { + throw new Error( + `Invalid block ${blockToIndexFromNode.id} at height ${blockToIndexFromNode.height}.`, + ); + } + + // If current index block is incorrectly indexed then schedule for deletion + /* eslint-disable no-use-before-define */ + if (Object.keys(currentBlockInDB).length && blockToIndexFromNode.id !== currentBlockInDB.id) { + await scheduleBlockDeletion(currentBlockInDB); + await addHeightToIndexBlocksQueue(currentBlockInDB.height); + return; + } + + // Incase prev block is incorrect schedule that for deletion + if ( + Object.keys(prevBlockInDB).length && + prevBlockInDB.id !== blockToIndexFromNode.previousBlockID + ) { + await scheduleBlockDeletion(prevBlockInDB); + await addHeightToIndexBlocksQueue(prevBlockInDB.height); + return; + } + /* eslint-enable no-use-before-define */ + + // If current block is already indexed, then index the highest indexed block height + 1 + if (Object.keys(currentBlockInDB).length) { + // Skip indexing if the blockchain is fully indexed. + const currentBlockchainHeight = await getCurrentHeight(); + if (lastIndexedHeight >= currentBlockchainHeight) return; + + blockHeightToIndex = lastIndexedHeight + 1; + } + + // Create DB transaction. Queries from here sees a snapshot of the database + const connection = await getDBConnection(MYSQL_ENDPOINT); + dbTrx = await startDBTransaction(connection); + logger.debug( + `Created new MySQL transaction to index block ${blockToIndexFromNode.id} at height ${blockToIndexFromNode.height}.`, + ); + + let blockReward = BigInt('0'); + + if (blockToIndexFromNode.height === genesisHeight) { await indexGenesisBlockAssets(dbTrx); } - const events = await getEventsByHeight(block.height); - cacheEventsByBlockID(block.id, events); + const events = await getEventsByHeight(blockToIndexFromNode.height); + cacheEventsByBlockID(blockToIndexFromNode.id, events); - if (block.transactions.length) { - const { transactions, assets, ...blockHeader } = block; + if (blockToIndexFromNode.transactions.length) { + const { transactions, assets, ...blockHeader } = blockToIndexFromNode; const transactionsTable = await getTransactionsTable(); await BluebirdPromise.map( - block.transactions, + blockToIndexFromNode.transactions, async (tx, index) => { // Apply default transformations and index with minimal information by default tx.index = index; tx.moduleCommand = `${tx.module}:${tx.command}`; - tx.blockID = block.id; - tx.height = block.height; + tx.blockID = blockToIndexFromNode.id; + tx.height = blockToIndexFromNode.height; tx.senderAddress = getLisk32AddressFromPublicKey(tx.senderPublicKey); - tx.timestamp = block.timestamp; + tx.timestamp = blockToIndexFromNode.timestamp; tx.executionStatus = getTransactionExecutionStatus(tx, events); // Store address -> publicKey mapping @@ -133,59 +252,84 @@ const indexBlock = async job => { // Invoke 'applyTransaction' to execute command specific processing logic await applyTransaction(blockHeader, tx, events, dbTrx); }, - { concurrency: block.transactions.length }, + { concurrency: blockToIndexFromNode.transactions.length }, ); } // Update generatedBlocks count for the block generator const validatorsTable = await getValidatorsTable(); - const numRowsAffected = await validatorsTable.increment({ - increment: { generatedBlocks: 1 }, - where: { address: block.generatorAddress }, - }, dbTrx); + const numRowsAffected = await validatorsTable.increment( + { + increment: { generatedBlocks: 1 }, + where: { address: blockToIndexFromNode.generatorAddress }, + }, + dbTrx, + ); if (numRowsAffected === 0) { - await validatorsTable.upsert({ - address: block.generatorAddress, - generatedBlocks: 1, - }, dbTrx); + await validatorsTable.upsert( + { + address: blockToIndexFromNode.generatorAddress, + generatedBlocks: 1, + }, + dbTrx, + ); } if (events.length) { const eventsTable = await getEventsTable(); const eventTopicsTable = await getEventTopicsTable(); - const { eventsInfo, eventTopicsInfo } = await getEventsInfoToIndex(block, events); + const { eventsInfo, eventTopicsInfo } = getEventsInfoToIndex(blockToIndexFromNode, events); await eventsTable.upsert(eventsInfo, dbTrx); await eventTopicsTable.upsert(eventTopicsInfo, dbTrx); - // Update the generator's rewards + // Update block generator's rewards const blockRewardEvent = events.find( - e => [MODULE.REWARD, MODULE.DYNAMIC_REWARD].includes(e.module) - && e.name === EVENT.REWARD_MINTED, + e => + [MODULE.REWARD, MODULE.DYNAMIC_REWARD].includes(e.module) && + e.name === EVENT.REWARD_MINTED, ); if (blockRewardEvent) { blockReward = BigInt(blockRewardEvent.data.amount || '0'); if (blockReward !== BigInt('0')) { const commissionAmount = await calcCommissionAmount( - block.generatorAddress, block.height, blockReward, + blockToIndexFromNode.generatorAddress, + blockToIndexFromNode.height, + blockReward, ); const selfStakeReward = await calcSelfStakeReward( - block.generatorAddress, blockReward, commissionAmount, + blockToIndexFromNode.generatorAddress, + blockReward, + commissionAmount, ); - logger.trace(`Increasing commission for validator ${block.generatorAddress} by ${commissionAmount}.`); - await validatorsTable.increment({ - increment: { totalCommission: BigInt(commissionAmount) }, - where: { address: block.generatorAddress }, - }, dbTrx); - logger.debug(`Increased commission for validator ${block.generatorAddress} by ${commissionAmount}.`); - logger.trace(`Increasing self-stake rewards for validator ${block.generatorAddress} by ${selfStakeReward}.`); - await validatorsTable.increment({ - increment: { totalSelfStakeRewards: BigInt(selfStakeReward) }, - where: { address: block.generatorAddress }, - }, dbTrx); - logger.debug(`Increased self-stake rewards for validator ${block.generatorAddress} by ${selfStakeReward}.`); + logger.trace( + `Increasing commission for validator ${blockToIndexFromNode.generatorAddress} by ${commissionAmount}.`, + ); + await validatorsTable.increment( + { + increment: { totalCommission: BigInt(commissionAmount) }, + where: { address: blockToIndexFromNode.generatorAddress }, + }, + dbTrx, + ); + logger.debug( + `Increased commission for validator ${blockToIndexFromNode.generatorAddress} by ${commissionAmount}.`, + ); + logger.trace( + `Increasing self-stake rewards for validator ${blockToIndexFromNode.generatorAddress} by ${selfStakeReward}.`, + ); + await validatorsTable.increment( + { + increment: { totalSelfStakeRewards: BigInt(selfStakeReward) }, + where: { address: blockToIndexFromNode.generatorAddress }, + }, + dbTrx, + ); + logger.debug( + `Increased self-stake rewards for validator ${blockToIndexFromNode.generatorAddress} by ${selfStakeReward}.`, + ); } } @@ -194,9 +338,11 @@ const indexBlock = async job => { events.forEach(event => { const { data: eventData } = event; // Initialize map entry with BigInt - if ([EVENT.LOCK, EVENT.UNLOCK].includes(event.name) - && !(eventData.tokenID in tokenIDLockedAmountChangeMap)) { - tokenIDLockedAmountChangeMap[eventData.tokenID] = BigInt(0); + if ( + [EVENT.LOCK, EVENT.UNLOCK].includes(event.name) && + !(eventData.tokenID in tokenIDLockedAmountChangeMap) + ) { + tokenIDLockedAmountChangeMap[eventData.tokenID] = BigInt('0'); } if (event.name === EVENT.LOCK) { @@ -207,45 +353,117 @@ const indexBlock = async job => { }); await updateTotalLockedAmounts(tokenIDLockedAmountChangeMap, dbTrx); - // Schedule address balance updates from token module events - await scheduleAccountBalanceUpdateFromEvents(events); + // Get addresses to schedule account balance updates from token module events + addressesToUpdateBalance = getAddressesFromTokenEvents(events); } const blockToIndex = { - ...block, - assetsModules: block.assets.map(asset => asset.module), + ...blockToIndexFromNode, + assetsModules: blockToIndexFromNode.assets.map(asset => asset.module), numberOfEvents: events.length, reward: blockReward, }; await blocksTable.upsert(blockToIndex, dbTrx); await commitDBTransaction(dbTrx); - logger.debug(`Committed MySQL transaction to index block ${block.id} at height ${block.height}.`); + logger.debug( + `Committed MySQL transaction to index block ${blockToIndexFromNode.id} at height ${blockToIndexFromNode.height}.`, + ); + + // Add safety check to ensure that the DB transaction is actually committed + await waitForIt( + checkBlockHeightIndexStatusInDB.bind(null, blockToIndexFromNode.height, DB_STATUS.COMMIT), + config.db.durabilityVerifyFrequency, + ); + + // Only schedule address balance updates if the block is indexed successfully + await scheduleAddressesBalanceUpdate(addressesToUpdateBalance); + logger.info( + `Successfully indexed block ${blockToIndexFromNode.id} at height ${blockToIndexFromNode.height}.`, + ); } catch (error) { - await rollbackDBTransaction(dbTrx); - logger.debug(`Rolled back MySQL transaction to index block ${block.id} at height ${block.height}.`); + // Stop genesisAsset index progress logging on errors + clearInterval(getGenesisAssetIntervalTimeout()); + + // Block may not have been initialized when error occurred + const failedBlockInfo = { + id: typeof blockToIndexFromNode === 'undefined' ? undefined : blockToIndexFromNode.id, + height: + typeof blockToIndexFromNode === 'undefined' + ? blockHeightToIndex + : blockToIndexFromNode.height, + }; + + // Processing may fail before a transaction is created + if (dbTrx) { + await rollbackDBTransaction(dbTrx); + logger.debug( + failedBlockInfo.id + ? `Rolled back MySQL transaction to index block ${failedBlockInfo.id} at height ${failedBlockInfo.height}.` + : `Rolled back MySQL transaction to index block at height ${failedBlockInfo.height}.`, + ); + + // Add safety check to ensure that the DB transaction is rolled back successfully + await waitForIt( + checkBlockHeightIndexStatusInDB.bind(null, blockToIndexFromNode.height, DB_STATUS.ROLLBACK), + config.db.durabilityVerifyFrequency, + ); + } - if (['Deadlock found when trying to get lock', 'ER_LOCK_DEADLOCK'].some(e => error.message.includes(e))) { - const errMessage = `Deadlock encountered while indexing block ${block.id} at height ${block.height}. Will retry later.`; + if ( + ['Deadlock found when trying to get lock', 'ER_LOCK_DEADLOCK'].some(e => + error.message.includes(e), + ) + ) { + const errMessage = failedBlockInfo.id + ? `Deadlock encountered while indexing block ${failedBlockInfo.id} at height ${failedBlockInfo.height}. Will retry.` + : `Deadlock encountered while indexing block at height ${failedBlockInfo.height}. Will retry.`; logger.warn(errMessage); + logger.debug(`SQL query: ${error.sql}`); + throw new Error(errMessage); } - logger.warn(`Error occurred while indexing block ${block.id} at height ${block.height}. Will retry later.`); - logger.warn(error.stack); + logger.warn( + failedBlockInfo.id + ? `Error occurred while indexing block ${failedBlockInfo.id} at height ${failedBlockInfo.height}. Will retry.` + : `Error occurred while indexing block at height ${failedBlockInfo.height}. Will retry.`, + ); + logger.debug(error.stack); throw error; } }; -const updateBlockIndex = async job => { +// Returns a list of all indexed blocks since the minimum block height from job +const getBlocksToDelete = async blocks => { + if (!blocks.length) { + return blocks; + } + const blocksTable = await getBlocksTable(); - const { blocks } = job.data; - await blocksTable.upsert(blocks); + const minBlockHeight = Math.min(...blocks.map(b => b.height)); + + const blocksToRemove = await blocksTable.find( + { + propBetweens: [ + { + property: 'height', + greaterThanEqualTo: minBlockHeight, + }, + ], + sort: 'height:desc', + }, + ['id', 'height', 'generatorAddress', 'timestamp', 'isFinal'], + ); + + return blocksToRemove; }; const deleteIndexedBlocks = async job => { - const { blocks } = job.data; - const blockIDs = blocks.map(b => b.id).join(', '); + let addressesToUpdateBalance = []; + const { blocks: blocksFromJob } = job.data; + const blocksToDelete = await getBlocksToDelete(blocksFromJob); + const blockIDs = blocksToDelete.map(b => b.id); const blocksTable = await getBlocksTable(); const connection = await getDBConnection(MYSQL_ENDPOINT); @@ -256,31 +474,37 @@ const deleteIndexedBlocks = async job => { try { await BluebirdPromise.map( - blocks, - async block => { - const retrivedBlock = await getBlockByHeight(block.height); - if (retrivedBlock.id === block.id) return; + blocksToDelete, + async blockFromJob => { + // Check if the deleted block is indexed + const [blockFromDB] = await blocksTable.find({ height: blockFromJob.height, limit: 1 }); + + // Skip deletion if the block was not indexed previously. The fork doesn't have any impact on block indexing in this case. + if (!blockFromDB) { + logger.info( + `Deleted block ${blockFromJob.id} at height ${blockFromJob.height} was not previously indexed. Nothing to update.`, + ); + return; + } - let { data: forkedTransactions } = await getTransactionsByBlockID(block.id); + let { data: forkedTransactions } = await getTransactionsByBlockID(blockFromJob.id); const transactionsTable = await getTransactionsTable(); - const events = await getEventsByBlockID(block.id); + const events = await getEventsByBlockID(blockFromJob.id); if (Array.isArray(forkedTransactions)) { - const { assets, ...blockHeader } = block; + const { assets, ...blockHeader } = blockFromJob; + // Invoke 'revertTransaction' to execute command specific reverting logic await BluebirdPromise.map( forkedTransactions, - async (tx) => { - // Invoke 'revertTransaction' to execute command specific reverting logic - await revertTransaction(blockHeader, tx, events, dbTrx); - }, + async tx => revertTransaction(blockHeader, tx, events, dbTrx), { concurrency: 1 }, ); } - const forkedTransactionIDs = await getTransactionIDsByBlockID(block.id); + const forkedTransactionIDs = await getTransactionIDsByBlockID(blockFromJob.id); if (!Array.isArray(forkedTransactions)) { - const deletedTransactions = await BluebirdPromise.map( + const transactionsToDelete = await BluebirdPromise.map( forkedTransactionIDs, async txID => { const transaction = await getTransactions({ id: txID }); @@ -288,49 +512,93 @@ const deleteIndexedBlocks = async job => { }, { concurrency: 25 }, ); - forkedTransactions = deletedTransactions.map(e => e !== null); + forkedTransactions = transactionsToDelete.filter(t => ![null, undefined].includes(t)); + } + if (forkedTransactionIDs.length) { + await transactionsTable.deleteByPrimaryKey(forkedTransactionIDs, dbTrx); + Signals.get('deleteTransactions').dispatch({ + data: forkedTransactions, + meta: { offset: 0, count: forkedTransactions.length, total: forkedTransactions.length }, + }); } - await transactionsTable.deleteByPrimaryKey(forkedTransactionIDs, dbTrx); - Signals.get('deleteTransactions').dispatch({ data: forkedTransactions }); + + // Update generatedBlocks count for the block generator + const validatorsTable = await getValidatorsTable(); + logger.trace( + `Decreasing generatedBlocks for validator ${blockFromJob.generatorAddress} by 1.`, + ); + await validatorsTable.decrement( + { + decrement: { generatedBlocks: 1 }, + where: { address: blockFromJob.generatorAddress }, + }, + dbTrx, + ); + logger.debug( + `Decreased generatedBlocks for validator ${blockFromJob.generatorAddress} by 1.`, + ); // Calculate locked amount change from events and update in key_value_store table if (events.length) { const eventsTable = await getEventsTable(); const eventTopicsTable = await getEventTopicsTable(); - const { eventsInfo, eventTopicsInfo } = await getEventsInfoToIndex(block, events); - await eventsTable.delete(eventsInfo, dbTrx); - await eventTopicsTable.delete(eventTopicsInfo, dbTrx); + const { eventsInfo } = getEventsInfoToIndex(blockFromJob, events); + const eventIDs = eventsInfo.map(e => e.id); - // Update the generator's rewards + await eventTopicsTable.delete( + { whereIn: { property: 'eventID', values: eventIDs } }, + dbTrx, + ); + await eventsTable.deleteByPrimaryKey(eventIDs, dbTrx); + + // Update block generator's rewards const blockRewardEvent = events.find( - e => [MODULE.REWARD, MODULE.DYNAMIC_REWARD].includes(e.module) - && e.name === EVENT.REWARD_MINTED, + e => + [MODULE.REWARD, MODULE.DYNAMIC_REWARD].includes(e.module) && + e.name === EVENT.REWARD_MINTED, ); if (blockRewardEvent) { blockReward = BigInt(blockRewardEvent.data.amount || '0'); if (blockReward !== BigInt('0')) { const commissionAmount = await calcCommissionAmount( - block.generatorAddress, block.height, blockReward, + blockFromJob.generatorAddress, + blockFromJob.height, + blockReward, ); const selfStakeReward = await calcSelfStakeReward( - block.generatorAddress, blockReward, commissionAmount, + blockFromJob.generatorAddress, + blockReward, + commissionAmount, ); - const validatorsTable = await getValidatorsTable(); - logger.trace(`Decreasing commission for validator ${block.generatorAddress} by ${commissionAmount}.`); - await validatorsTable.decrement({ - decrement: { totalCommission: BigInt(commissionAmount) }, - where: { address: block.generatorAddress }, - }, dbTrx); - logger.debug(`Decreased commission for validator ${block.generatorAddress} by ${commissionAmount}.`); - logger.trace(`Decreasing self-stake rewards for validator ${block.generatorAddress} by ${selfStakeReward}.`); - await validatorsTable.decrement({ - decrement: { totalSelfStakeRewards: BigInt(selfStakeReward) }, - where: { address: block.generatorAddress }, - }, dbTrx); - logger.debug(`Decreased self-stake rewards for validator ${block.generatorAddress} by ${selfStakeReward}.`); + logger.trace( + `Decreasing commission for validator ${blockFromJob.generatorAddress} by ${commissionAmount}.`, + ); + await validatorsTable.decrement( + { + decrement: { totalCommission: BigInt(commissionAmount) }, + where: { address: blockFromJob.generatorAddress }, + }, + dbTrx, + ); + logger.debug( + `Decreased commission for validator ${blockFromJob.generatorAddress} by ${commissionAmount}.`, + ); + logger.trace( + `Decreasing self-stake rewards for validator ${blockFromJob.generatorAddress} by ${selfStakeReward}.`, + ); + await validatorsTable.decrement( + { + decrement: { totalSelfStakeRewards: BigInt(selfStakeReward) }, + where: { address: blockFromJob.generatorAddress }, + }, + dbTrx, + ); + logger.debug( + `Decreased self-stake rewards for validator ${blockFromJob.generatorAddress} by ${selfStakeReward}.`, + ); } } @@ -339,8 +607,10 @@ const deleteIndexedBlocks = async job => { events.forEach(event => { const { data: eventData } = event; // Initialize map entry with BigInt - if ([EVENT.LOCK, EVENT.UNLOCK].includes(event.name) - && !(eventData.tokenID in tokenIDLockedAmountChangeMap)) { + if ( + [EVENT.LOCK, EVENT.UNLOCK].includes(event.name) && + !(eventData.tokenID in tokenIDLockedAmountChangeMap) + ) { tokenIDLockedAmountChangeMap[eventData.tokenID] = BigInt(0); } @@ -353,113 +623,172 @@ const deleteIndexedBlocks = async job => { }); await updateTotalLockedAmounts(tokenIDLockedAmountChangeMap, dbTrx); - // Schedule address balance updates from token module events - await scheduleAccountBalanceUpdateFromEvents(events); + // Get addresses to schedule account balance updates from token module events + addressesToUpdateBalance = getAddressesFromTokenEvents(events); } - // Invalidate cached events for this block - // This must be done after processing all event related calculations - await deleteEventsFromCache(block.height); + // Invalidate cached events for this block. Must be done after processing all event related calculations + await deleteEventsFromCacheByBlockID(blockFromJob.id); }, { concurrency: 1 }, ); - await blocksTable.deleteByPrimaryKey(blockIDs); + await blocksTable.delete({ whereIn: { property: 'id', values: blockIDs } }, dbTrx); await commitDBTransaction(dbTrx); + + // Add safety check to ensure that the DB transaction is actually committed + await waitForIt( + checkBlockIDsDeleteStatusInDB.bind(null, blockIDs, DB_STATUS.COMMIT), + config.db.durabilityVerifyFrequency, + ); + + // Only schedule address balance updates if the block is deleted successfully + await scheduleAddressesBalanceUpdate(addressesToUpdateBalance); logger.debug(`Committed MySQL transaction to delete block(s) with ID(s): ${blockIDs}.`); } catch (error) { logger.debug(`Rolled back MySQL transaction to delete block(s) with ID(s): ${blockIDs}.`); await rollbackDBTransaction(dbTrx); + // Add safety check to ensure that the DB transaction is actually rolled back + await waitForIt( + checkBlockIDsDeleteStatusInDB.bind(null, blockIDs, DB_STATUS.ROLLBACK), + config.db.durabilityVerifyFrequency, + ); + if (error.message.includes('ER_LOCK_DEADLOCK')) { const errMessage = `Deadlock encountered while deleting block(s) with ID(s): ${blockIDs}. Will retry later.`; logger.warn(errMessage); throw new Error(errMessage); } - logger.warn(`Error occurred while deleting block(s) with ID(s): ${blockIDs}. Will retry later.`); + logger.warn( + `Deleting block(s) with ID(s): ${blockIDs} failed due to: ${error.message}. Will retry.`, + ); + logger.warn(error.stack); throw error; } }; +const deleteIndexedBlocksWrapper = async job => { + /* eslint-disable no-use-before-define */ + try { + if (!(await indexBlocksQueue.queue.isPaused())) { + await indexBlocksQueue.queue.pause(); + } + await deleteIndexedBlocks(job); + } catch (err) { + if (job.attemptsMade === job.opts.attempts - 1) { + await scheduleBlockDeletion(job.data.blocks); + } + } finally { + // Resume indexing once all deletion jobs are processed + if ((await getPendingDeleteJobCount()) === 0) { + await indexBlocksQueue.queue.resume(); + } + } + /* eslint-enable no-use-before-define */ +}; + // Initialize queues -const indexBlocksQueue = Queue( - config.endpoints.cache, - config.queue.indexBlocks.name, - indexBlock, - config.queue.indexBlocks.concurrency, -); -const updateBlockIndexQueue = Queue( - config.endpoints.cache, - config.queue.updateBlockIndex.name, - updateBlockIndex, - config.queue.updateBlockIndex.concurrency, -); -const deleteIndexedBlocksQueue = Queue( - config.endpoints.cache, - config.queue.deleteIndexedBlocks.name, - deleteIndexedBlocks, - config.queue.deleteIndexedBlocks.concurrency, -); +let indexBlocksQueue; +let deleteIndexedBlocksQueue; + +const initBlockProcessingQueues = async () => { + indexBlocksQueue = Queue( + config.endpoints.cache, + config.queue.indexBlocks.name, + indexBlock, + config.queue.indexBlocks.concurrency, + ); + + deleteIndexedBlocksQueue = Queue( + config.endpoints.cache, + config.queue.deleteIndexedBlocks.name, + deleteIndexedBlocksWrapper, + config.queue.deleteIndexedBlocks.concurrency, + ); +}; const getLiveIndexingJobCount = async () => { - const { queue: bullQueue } = indexBlocksQueue; - const jobCount = await bullQueue.getJobCounts(); - const count = jobCount.active + jobCount.waiting; + if (!indexBlocksQueue || !deleteIndexedBlocksQueue) return 0; + + const { queue: indexBlocksBullQueue } = indexBlocksQueue; + const { queue: deleteIndexedBlocksBullQueue } = deleteIndexedBlocksQueue; + + const jcIndexBlocksQueue = await indexBlocksBullQueue.getJobCounts(); + const jcDeleteIndexedBlocksQueue = await deleteIndexedBlocksBullQueue.getJobCounts(); + + const count = + jcIndexBlocksQueue.active + + jcIndexBlocksQueue.waiting + + jcDeleteIndexedBlocksQueue.active + + jcDeleteIndexedBlocksQueue.waiting; return count; }; -const deleteBlock = async (block) => deleteIndexedBlocksQueue.add({ blocks: [block] }); +const getPendingDeleteJobCount = async () => { + const { queue: bullQueue } = deleteIndexedBlocksQueue; + const jobCount = await bullQueue.getWaitingCount(); + return jobCount; +}; + +const scheduleBlockDeletion = async block => { + const blocks = Array.isArray(block) ? block : [block]; + await deleteIndexedBlocksQueue.add({ blocks }); +}; const indexNewBlock = async block => { const blocksTable = await getBlocksTable(); - logger.info(`Indexing new block: ${block.id} at height ${block.height}.`); - - const [blockInfo] = await blocksTable.find({ height: block.height, limit: 1 }, ['id', 'isFinal']); - // Schedule indexing of incoming block if it is not indexed before - // Or the indexed block is not final yet (chain fork) - if (!blockInfo || !blockInfo.isFinal) { - // Index if doesn't exist, or update if it isn't set to final - await indexBlocksQueue.add({ block }); - - // Update block finality status - const finalizedBlockHeight = await getFinalizedHeight(); - const nonFinalBlocks = await blocksTable.find({ isFinal: false, limit: 1000 }, - Object.keys(blocksTableSchema.schema)); - await updateBlockIndexQueue.add({ - blocks: nonFinalBlocks - .filter(b => b.height <= finalizedBlockHeight) - .map(b => ({ ...b, isFinal: true })), - }); - - if (blockInfo && blockInfo.id !== block.id) { - // Fork detected - const [highestIndexedBlock] = await blocksTable.find({ sort: 'height:desc', limit: 1 }, ['height']); - const blocksToRemove = await blocksTable.find({ - propBetweens: [{ - property: 'height', - from: block.height + 1, - to: highestIndexedBlock.height, - }], - limit: highestIndexedBlock.height - block.height, - }, ['id']); - await deleteIndexedBlocksQueue.add({ blocks: blocksToRemove }); - } + logger.info(`Scheduling indexing of new block: ${block.id} at height ${block.height}.`); + + const [blockFromDB] = await blocksTable.find({ height: block.height, limit: 1 }, [ + 'id', + 'height', + 'generatorAddress', + 'timestamp', + 'isFinal', + ]); + + // Schedule block deletion in case of an unprocessed fork detection + if (blockFromDB && blockFromDB.id !== block.id) { + logger.info( + `Fork detected while scheduling indexing at height: ${block.height}. Actual blockID: ${block.id}, indexed blockID: ${blockFromDB.id}.`, + ); + + await scheduleBlockDeletion(blockFromDB); + } + + // Schedule indexing of the incoming block if not already indexed or a fork was detected + if (!blockFromDB || blockFromDB.id !== block.id) { + await indexBlocksQueue.add({ height: block.height }); } + + // Update finality status of indexed blocks + const finalizedBlockHeight = await getFinalizedHeight(); + await blocksTable.update({ + where: { + isFinal: false, + propBetweens: [ + { + property: 'height', + lowerThanEqualTo: finalizedBlockHeight, + }, + ], + }, + updates: { isFinal: true }, + }); }; const findMissingBlocksInRange = async (fromHeight, toHeight) => { const result = []; const totalNumOfBlocks = toHeight - fromHeight + 1; - logger.info(`Checking for missing blocks between height ${fromHeight}-${toHeight} (${totalNumOfBlocks} blocks).`); + logger.info( + `Checking for missing blocks between height ${fromHeight}-${toHeight} (${totalNumOfBlocks} blocks).`, + ); const blocksTable = await getBlocksTable(); - const propBetweens = [{ - property: 'height', - from: fromHeight, - to: toHeight, - }]; + const propBetweens = [{ property: 'height', from: fromHeight, to: toHeight }]; const indexedBlockCount = await blocksTable.count({ propBetweens }); // This block helps determine empty index @@ -475,7 +804,7 @@ const findMissingBlocksInRange = async (fromHeight, toHeight) => { const missingBlocksQueryStatement = ` SELECT - (SELECT COALESCE(MAX(b0.height), ${batchStartHeight}) FROM blocks b0 WHERE b0.height < b1.height) AS 'from', + (SELECT COALESCE(MAX(b0.height + 1), ${batchStartHeight}) FROM blocks b0 WHERE b0.height < b1.height) AS 'from', (b1.height - 1) AS 'to' FROM blocks b1 WHERE b1.height BETWEEN ${batchStartHeight} + 1 AND ${batchEndHeight} @@ -483,54 +812,77 @@ const findMissingBlocksInRange = async (fromHeight, toHeight) => { AND NOT EXISTS (SELECT 1 FROM blocks b2 WHERE b2.height = b1.height - 1) `; - logger.trace(`Checking for missing blocks between heights: ${batchStartHeight} - ${batchEndHeight}.`); - // eslint-disable-next-line no-await-in-loop + logger.trace( + `Checking for missing blocks between heights: ${batchStartHeight} - ${batchEndHeight}.`, + ); const missingBlockRanges = await blocksTable.rawQuery(missingBlocksQueryStatement); - logger.trace(`Found the following missing block ranges between heights: ${missingBlockRanges}.`); + logger.trace( + `Found the following missing block ranges between heights: ${missingBlockRanges}.`, + ); result.push(...missingBlockRanges); } } - result.forEach(({ from, to }) => logger.info(`Missing blocks in range: ${from}-${to} (${to - from + 1} blocks).`)); + result.forEach(({ from, to }) => + logger.info(`Missing blocks in range: ${from}-${to} (${to - from + 1} blocks).`), + ); return result; }; -const getMissingBlocks = async (params) => { +const getMissingBlocks = async params => { const missingBlockRanges = await findMissingBlocksInRange(params.from, params.to); - const nestedListOfRanges = missingBlockRanges - .map(entry => range(entry.from, entry.to + 1)); // 'to + 1' as 'to' is non-inclusive + // 'to + 1' as 'to' is non-inclusive + const nestedListOfRanges = missingBlockRanges.map(entry => range(entry.from, entry.to + 1)); const listOfMissingBlocks = nestedListOfRanges.flat(); return listOfMissingBlocks; }; -const addBlockToQueue = async height => { - const block = await getBlockByHeight(height); - indexBlocksQueue.add({ block }); +const addHeightToIndexBlocksQueue = async (height, priority) => { + const liveIndexingJobCount = await getLiveIndexingJobCount(); + if (liveIndexingJobCount > config.queue.indexBlocks.scheduledJobsMaxCount) { + logger.trace( + `Skipping adding new job to the queue. Current liveIndexingJobCount: ${liveIndexingJobCount}.`, + ); + return null; + } + + return typeof priority === 'number' + ? indexBlocksQueue.add({ height }, { priority }) + : indexBlocksQueue.add({ height }); }; -const setIndexVerifiedHeight = ({ height }) => keyValueTable.set(INDEX_VERIFIED_HEIGHT, height); +const getIndexVerifiedHeight = async () => { + const blocksTable = await getBlocksTable(); + const [lastIndexedFinalBlock = {}] = await blocksTable.find( + { + isFinal: true, + sort: 'height:desc', + limit: 1, + }, + ['height'], + ); -const getIndexVerifiedHeight = () => keyValueTable.get(INDEX_VERIFIED_HEIGHT); + return lastIndexedFinalBlock.height || null; +}; const isGenesisBlockIndexed = async () => { const blocksTable = await getBlocksTable(); - const [{ height } = {}] = await blocksTable.find( - { height: await getGenesisHeight(), limit: 1 }, - ['height'], - ); + const [{ height } = {}] = await blocksTable.find({ height: await getGenesisHeight(), limit: 1 }, [ + 'height', + ]); return height !== undefined; }; module.exports = { indexNewBlock, - addBlockToQueue, + addHeightToIndexBlocksQueue, getMissingBlocks, - deleteBlock, - setIndexVerifiedHeight, + scheduleBlockDeletion, getIndexVerifiedHeight, getLiveIndexingJobCount, isGenesisBlockIndexed, + initBlockProcessingQueues, }; diff --git a/services/blockchain-indexer/shared/indexer/genesisBlock.js b/services/blockchain-indexer/shared/indexer/genesisBlock.js index 16c6be0f7..8a15b5b9b 100644 --- a/services/blockchain-indexer/shared/indexer/genesisBlock.js +++ b/services/blockchain-indexer/shared/indexer/genesisBlock.js @@ -13,47 +13,58 @@ * Removal or modification of this copyright notice is prohibited. * */ +const BluebirdPromise = require('bluebird'); + const { - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, Signals, + Logger, } = require('lisk-service-framework'); -const { - MODULE, - MODULE_SUB_STORE, - getGenesisHeight, -} = require('../constants'); -const { - updateTotalStake, - updateTotalSelfStake, -} = require('./transactionProcessor/pos/stake'); -const { requestConnector } = require('../utils/request'); -const { accountBalanceIndexQueue } = require('./accountBalanceIndex'); +const { MODULE, MODULE_SUB_STORE, getGenesisHeight } = require('../constants'); +const { updateTotalStake, updateTotalSelfStake } = require('./transactionProcessor/pos/stake'); +const { updateAccountBalances } = require('./accountBalanceIndex'); +const { indexAccountPublicKey, triggerAccountUpdates } = require('./accountIndex'); const { updateTotalLockedAmounts } = require('./utils/blockchainIndex'); +const { getIndexStats } = require('./indexStatus'); const requestAll = require('../utils/requestAll'); const config = require('../../config'); +const accountsTableSchema = require('../database/schema/accounts'); +const stakesTableSchema = require('../database/schema/stakes'); const commissionsTableSchema = require('../database/schema/commissions'); -const { getIndexStats } = require('./indexStatus'); + +const { getLisk32AddressFromPublicKey } = require('../utils/account'); +const { requestConnector } = require('../utils/request'); +const { INVALID_ED25519_KEY } = require('../constants'); + +const logger = Logger(); const MYSQL_ENDPOINT = config.endpoints.mysql; +const getStakesTable = () => getTableInstance(stakesTableSchema, MYSQL_ENDPOINT); +const getAccountsTable = () => getTableInstance(accountsTableSchema, MYSQL_ENDPOINT); const getCommissionsTable = () => getTableInstance(commissionsTableSchema, MYSQL_ENDPOINT); const allAccountsAddresses = []; +let intervalTimeout; let isTokensBalanceIndexed = false; -const indexTokenModuleAssets = async (dbTrx) => { - const genesisBlockAssetsLength = await requestConnector( - 'getGenesisAssetsLength', - { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER }, - ); - const totalUsers = genesisBlockAssetsLength[MODULE.TOKEN][MODULE_SUB_STORE.TOKEN.USER]; +const getGenesisAssetIntervalTimeout = () => intervalTimeout; +const indexTokenModuleAssets = async dbTrx => { + logger.info('Starting to index the genesis assets from the Token module.'); + const genesisBlockAssetsLength = await requestConnector('getGenesisAssetsLength', { + module: MODULE.TOKEN, + subStore: MODULE_SUB_STORE.TOKEN.USER, + }); + const totalUsers = genesisBlockAssetsLength[MODULE.TOKEN][MODULE_SUB_STORE.TOKEN.USER]; const tokenModuleData = await requestAll( requestConnector, 'getGenesisAssetByModule', - { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER }, + { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER, limit: 1000 }, totalUsers, ); const userSubStoreInfos = tokenModuleData[MODULE_SUB_STORE.TOKEN.USER]; @@ -72,81 +83,145 @@ const indexTokenModuleAssets = async (dbTrx) => { } // Index account balance - // eslint-disable-next-line no-await-in-loop allAccountsAddresses.push(userInfo.address); } await updateTotalLockedAmounts(tokenIDLockedAmountChangeMap, dbTrx); + logger.info('Finished indexing all the genesis assets from the Token module.'); }; +const isGeneratorKeyValid = generatorKey => generatorKey !== INVALID_ED25519_KEY; + const indexPosValidatorsInfo = async (numValidators, dbTrx) => { + logger.debug('Starting to index the validators information from the genesis PoS module assets.'); if (numValidators > 0) { const commissionsTable = await getCommissionsTable(); const posModuleData = await requestAll( requestConnector, 'getGenesisAssetByModule', - { module: MODULE.POS, subStore: MODULE_SUB_STORE.POS.VALIDATORS }, + { module: MODULE.POS, subStore: MODULE_SUB_STORE.POS.VALIDATORS, limit: 1000 }, numValidators, ); const validators = posModuleData[MODULE_SUB_STORE.POS.VALIDATORS]; const genesisHeight = await getGenesisHeight(); - const commissionEntries = validators.map(validator => ({ - address: validator.address, - commission: validator.commission, - height: genesisHeight, - })); + const commissionEntries = await BluebirdPromise.map( + validators, + async validator => { + // Index all valid public keys + if (isGeneratorKeyValid(validator.generatorKey)) { + const account = { + address: getLisk32AddressFromPublicKey(validator.generatorKey), + publicKey: validator.generatorKey, + }; + + const accountsTable = await getAccountsTable(); + await accountsTable + .upsert(account) + .catch(() => indexAccountPublicKey(validator.generatorKey)); + } + + return { + address: validator.address, + commission: validator.commission, + height: genesisHeight, + }; + }, + { concurrency: validators.length }, + ); await commissionsTable.upsert(commissionEntries, dbTrx); } + logger.debug('Finished indexing the validators information from the genesis PoS module assets.'); }; const indexPosStakesInfo = async (numStakers, dbTrx) => { - let totalStakeChange = BigInt(0); - let totalSelfStakeChange = BigInt(0); + logger.debug('Starting to index the stakes information from the genesis PoS module assets.'); + let totalStake = BigInt(0); + let totalSelfStake = BigInt(0); if (numStakers > 0) { + const stakesTable = await getStakesTable(); + const posModuleData = await requestAll( requestConnector, 'getGenesisAssetByModule', - { module: MODULE.POS, subStore: MODULE_SUB_STORE.POS.STAKERS }, + { module: MODULE.POS, subStore: MODULE_SUB_STORE.POS.STAKERS, limit: 1000 }, numStakers, ); const stakers = posModuleData[MODULE_SUB_STORE.POS.STAKERS]; + const allStakes = []; stakers.forEach(staker => { const { address: stakerAddress, stakes } = staker; - stakes.forEach(stake => { const { validatorAddress, amount } = stake; - totalStakeChange += BigInt(amount); - if (stakerAddress === validatorAddress) { totalSelfStakeChange += BigInt(amount); } + + allStakes.push({ + stakerAddress, + validatorAddress, + amount: BigInt(amount), + }); + + totalStake += BigInt(amount); + if (stakerAddress === validatorAddress) { + totalSelfStake += BigInt(amount); + } }); }); + + await stakesTable.upsert(allStakes, dbTrx); + logger.info(`Updated ${allStakes.length} stakes from the genesis block.`); } - await updateTotalStake(totalStakeChange, dbTrx); - await updateTotalSelfStake(totalSelfStakeChange, dbTrx); + await updateTotalStake(totalStake, dbTrx); + logger.info(`Updated total stakes at genesis: ${totalStake.toString()}.`); + + await updateTotalSelfStake(totalSelfStake, dbTrx); + logger.info(`Updated total self-stakes information at genesis: ${totalSelfStake.toString()}.`); + logger.debug('Finished indexing the stakes information from the genesis PoS module assets.'); }; -const indexPosModuleAssets = async (dbTrx) => { - const genesisBlockAssetsLength = await requestConnector('getGenesisAssetsLength', { module: MODULE.POS }); +const indexPosModuleAssets = async dbTrx => { + logger.info('Starting to index the genesis assets from the PoS module.'); + const genesisBlockAssetsLength = await requestConnector('getGenesisAssetsLength', { + module: MODULE.POS, + }); const numValidators = genesisBlockAssetsLength[MODULE.POS][MODULE_SUB_STORE.POS.VALIDATORS]; const numStakers = genesisBlockAssetsLength[MODULE.POS][MODULE_SUB_STORE.POS.STAKERS]; await indexPosValidatorsInfo(numValidators, dbTrx); await indexPosStakesInfo(numStakers, dbTrx); + logger.info('Finished indexing all the genesis assets from the PoS module.'); }; -const indexGenesisBlockAssets = async (dbTrx) => { +const indexGenesisBlockAssets = async dbTrx => { + logger.info('Starting to index the genesis assets.'); + intervalTimeout = setInterval( + () => logger.info('Genesis assets indexing still in progress...'), + 5000, + ); await indexTokenModuleAssets(dbTrx); await indexPosModuleAssets(dbTrx); + + await triggerAccountUpdates(); + clearInterval(intervalTimeout); + logger.info('Finished indexing all the genesis assets.'); }; const indexTokenBalances = async () => { - allAccountsAddresses.forEach(async address => accountBalanceIndexQueue.add({ address })); + // eslint-disable-next-line no-restricted-syntax + for (const address of allAccountsAddresses) { + await updateAccountBalances(address).catch(err => { + const errorMessage = `Updating account balance for ${address} failed. Retrying.\nError: ${err.message}`; + logger.warn(errorMessage); + logger.debug(err.stack); + + allAccountsAddresses.push(address); + }); + } isTokensBalanceIndexed = true; }; @@ -159,6 +234,7 @@ const indexTokenBalancesListener = async () => { Signals.get('chainNewBlock').add(indexTokenBalancesListener); module.exports = { + getGenesisAssetIntervalTimeout, indexGenesisBlockAssets, // For testing diff --git a/services/blockchain-indexer/shared/indexer/indexStatus.js b/services/blockchain-indexer/shared/indexer/indexStatus.js index b914c385d..9aad2d2cf 100644 --- a/services/blockchain-indexer/shared/indexer/indexStatus.js +++ b/services/blockchain-indexer/shared/indexer/indexStatus.js @@ -15,20 +15,13 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, Signals, } = require('lisk-service-framework'); -const { - indexValidatorCommissionInfo, - indexStakersInfo, -} = require('./validatorIndex'); - -const { - getCurrentHeight, - getGenesisHeight, - updateFinalizedHeight, -} = require('../constants'); +const { getCurrentHeight, getGenesisHeight } = require('../constants'); const logger = Logger(); @@ -41,7 +34,7 @@ const MYSQL_ENDPOINT = config.endpoints.mysqlReplica; const getBlocksTable = () => getTableInstance(blocksTableSchema, MYSQL_ENDPOINT); let isIndexReady = false; -const setIndexReadyStatus = isReady => isIndexReady = isReady; +const setIndexReadyStatus = isReady => (isIndexReady = isReady); const getIndexReadyStatus = () => isIndexReady; const getIndexStats = async () => { @@ -50,9 +43,11 @@ const getIndexStats = async () => { const currentChainHeight = await getCurrentHeight(); const genesisHeight = await getGenesisHeight(); const numBlocksIndexed = await blocksTable.count(); - const [lastIndexedBlock = {}] = await blocksTable.find({ sort: 'height:desc', limit: 1 }, ['height']); + const [lastIndexedBlock = {}] = await blocksTable.find({ sort: 'height:desc', limit: 1 }, [ + 'height', + ]); const chainLength = currentChainHeight - genesisHeight + 1; - const percentage = (Math.floor(((numBlocksIndexed) / chainLength) * 10000) / 100).toFixed(2); + const percentage = (Math.floor((numBlocksIndexed / chainLength) * 10000) / 100).toFixed(2); return { currentChainHeight, @@ -75,8 +70,11 @@ const validateIndexReadiness = async ({ strict } = {}) => { }; const checkIndexReadiness = async () => { - if (!getIndexReadyStatus() // status is set only once - && await validateIndexReadiness()) { // last block is being indexed atm + if ( + !getIndexReadyStatus() && // status is set only once + (await validateIndexReadiness()) + ) { + // last block is being indexed atm setIndexReadyStatus(true); logger.info('The blockchain index is complete.'); logger.debug(`'blockIndexReady' signal: ${Signals.get('blockIndexReady')}`); @@ -96,12 +94,16 @@ const reportIndexStatus = async () => { Signals.get('indexStatUpdate').dispatch(indexStats); - logger.info([ - `currentChainHeight: ${currentChainHeight}`, - `lastIndexedBlockHeight: ${lastIndexedBlock.height}`, - ].join(', ')); + logger.info( + [ + `currentChainHeight: ${currentChainHeight}`, + `lastIndexedBlockHeight: ${lastIndexedBlock.height}`, + ].join(', '), + ); - logger.info(`Block index status: ${numBlocksIndexed}/${chainLength} blocks indexed (${percentage}%).`); + logger.info( + `Block index status: ${numBlocksIndexed}/${chainLength} blocks indexed (${percentage}%).`, + ); }; const init = async () => { @@ -111,11 +113,6 @@ const init = async () => { // Register event listeners Signals.get('newBlock').add(checkIndexReadiness); - Signals.get('chainNewBlock').add(updateFinalizedHeight); - - // Index stakers and commission information available in genesis block - await indexValidatorCommissionInfo(); - await indexStakersInfo(); }; module.exports = { diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/0_moduleName/commandName1.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/0_moduleName/commandName1.js index df232fbfb..402d4849f 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/0_moduleName/commandName1.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/0_moduleName/commandName1.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../../../config'); @@ -48,7 +50,7 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { // Process the transaction to create the entityTableEntry // And, finally, perform DB operations to update the index await entityTable.upsert(entityTableEntry, dbTrx); // it is important to pass dbTrx - logger.debug('Add custom logs'); + logger.debug('Add custom logs.'); Promise.resolve({ blockHeader, tx }); }; @@ -64,7 +66,7 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { // Process the transaction to create the entityTableEntry // And, finally, perform DB operations to update the index and revert the induced changes await entityTable.delete(entityTableEntry, dbTrx); // it is important to pass dbTrx - logger.debug('Add custom logs'); + logger.debug('Add custom logs.'); Promise.resolve({ blockHeader, tx }); }; diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/0_moduleName/commandName2.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/0_moduleName/commandName2.js index 3d367ca45..a4839c191 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/0_moduleName/commandName2.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/0_moduleName/commandName2.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../../../config'); @@ -48,7 +50,7 @@ export const applyTransaction = async (blockHeader, tx, events, dbTrx) => { // Process the transaction to create the entityTableEntry // And, finally, perform DB operations to update the index await entityTable.upsert(entityTableEntry, dbTrx); // it is important to pass dbTrx - logger.debug('Add custom logs'); + logger.debug('Add custom logs.'); Promise.resolve({ blockHeader, tx }); }; @@ -64,7 +66,7 @@ export const revertTransaction = async (blockHeader, tx, events, dbTrx) => { // Process the transaction to create the entityTableEntry // And, finally, perform DB operations to update the index and revert the induced changes await entityTable.delete(entityTableEntry, dbTrx); // it is important to pass dbTrx - logger.debug('Add custom logs'); + logger.debug('Add custom logs.'); Promise.resolve({ blockHeader, tx }); }; diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/auth/registerMultisignature.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/auth/registerMultisignature.js index 9f4002111..83fd2f057 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/auth/registerMultisignature.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/auth/registerMultisignature.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../../../config'); @@ -34,7 +36,7 @@ const getMultisignatureTable = () => getTableInstance(multisignatureTableSchema, // Command specific constants const COMMAND_NAME = 'registerMultisignature'; -const resolveMultisignatureMemberships = (tx) => { +const resolveMultisignatureMemberships = tx => { const multisignatureInfoToIndex = []; const allKeys = tx.params.mandatoryKeys.concat(tx.params.optionalKeys); @@ -53,24 +55,28 @@ const resolveMultisignatureMemberships = (tx) => { // eslint-disable-next-line no-unused-vars const applyTransaction = async (blockHeader, tx, events, dbTrx) => { // Asynchronously index all the publicKeys - tx.params.mandatoryKeys.forEach((key) => indexAccountPublicKey(key)); - tx.params.optionalKeys.forEach((key) => indexAccountPublicKey(key)); + tx.params.mandatoryKeys.forEach(key => indexAccountPublicKey(key)); + tx.params.optionalKeys.forEach(key => indexAccountPublicKey(key)); if (tx.executionStatus !== TRANSACTION_STATUS.SUCCESSFUL) return; const multisignatureTable = await getMultisignatureTable(); - logger.trace(`Indexing multisignature information in transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.trace( + `Indexing multisignature information in transaction ${tx.id} contained in block at height ${tx.height}.`, + ); const multisignatureInfoToIndex = resolveMultisignatureMemberships(tx); await multisignatureTable.upsert(multisignatureInfoToIndex, dbTrx); - logger.debug(`Indexed multisignature information in transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.debug( + `Indexed multisignature information in transaction ${tx.id} contained in block at height ${tx.height}.`, + ); }; // eslint-disable-next-line no-unused-vars const revertTransaction = async (blockHeader, tx, events, dbTrx) => { // Asynchronously index all the publicKeys - tx.params.mandatoryKeys.forEach((key) => indexAccountPublicKey(key)); - tx.params.optionalKeys.forEach((key) => indexAccountPublicKey(key)); + tx.params.mandatoryKeys.forEach(key => indexAccountPublicKey(key)); + tx.params.optionalKeys.forEach(key => indexAccountPublicKey(key)); if (tx.executionStatus !== TRANSACTION_STATUS.SUCCESSFUL) return; @@ -79,9 +85,13 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { const multisignatureInfo = resolveMultisignatureMemberships(tx); const multisignatureIdsToDelete = multisignatureInfo.map(item => item.id); - logger.trace(`Reverting multisignature information in transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.trace( + `Reverting multisignature information in transaction ${tx.id} contained in block at height ${tx.height}.`, + ); await multisignatureTable.deleteByPrimaryKey(multisignatureIdsToDelete, dbTrx); - logger.debug(`Reverted multisignature information in transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.debug( + `Reverted multisignature information in transaction ${tx.id} contained in block at height ${tx.height}.`, + ); }; module.exports = { diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/index.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/index.js index 603e72c62..db32ef0a6 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/index.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/index.js @@ -32,19 +32,20 @@ const getAvailableModuleProcessors = async () => { return processors.filter(e => !IGNORE_DIRS.includes(e)); }; -const getCommandProcessors = async (MODULE_NAME) => requireAll({ - dirname: `${__dirname}/${MODULE_NAME}`, - filter: /(.+)\.js$/, - excludeDirs: /^\.(git|svn)$/, - recursive: false, -}); +const getCommandProcessors = async MODULE_NAME => + requireAll({ + dirname: `${__dirname}/${MODULE_NAME}`, + filter: /(.+)\.js$/, + excludeDirs: /^\.(git|svn)$/, + recursive: false, + }); const buildModuleCommandProcessorMap = async () => { const systemMetadata = await requestConnector('getSystemMetadata'); const registeredModules = systemMetadata.modules.map(m => m.name); const availableModuleProcessors = await getAvailableModuleProcessors(); - const promises = availableModuleProcessors.map(async (moduleNameVal) => { + const promises = availableModuleProcessors.map(async moduleNameVal => { const { index, ...availableCommandProcessors } = await getCommandProcessors(moduleNameVal); const { MODULE_NAME } = index; @@ -52,11 +53,10 @@ const buildModuleCommandProcessorMap = async () => { if (!moduleProcessorMap.has(MODULE_NAME)) moduleProcessorMap.set(MODULE_NAME, new Map()); const moduleCommandProcessorMap = moduleProcessorMap.get(MODULE_NAME); - Object.values(availableCommandProcessors) - .forEach(e => { - moduleCommandProcessorMap.set(`apply_${e.COMMAND_NAME}`, e.applyTransaction); - moduleCommandProcessorMap.set(`revert_${e.COMMAND_NAME}`, e.revertTransaction); - }); + Object.values(availableCommandProcessors).forEach(e => { + moduleCommandProcessorMap.set(`apply_${e.COMMAND_NAME}`, e.applyTransaction); + moduleCommandProcessorMap.set(`revert_${e.COMMAND_NAME}`, e.revertTransaction); + }); } }); @@ -67,13 +67,17 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { if (moduleProcessorMap.size === 0) await buildModuleCommandProcessorMap(); if (!moduleProcessorMap.has(tx.module)) { - logger.warn(`No processors implemented for transactions from module: ${tx.module}. Continuing with generic transaction indexing.`); + logger.warn( + `No processors implemented for transactions from module: ${tx.module}. Continuing with generic transaction indexing.`, + ); return Promise.resolve(); } const moduleCommandProcessorMap = moduleProcessorMap.get(tx.module); if (!moduleCommandProcessorMap.has(`apply_${tx.command}`)) { - logger.warn(`No applyTransaction hook implemented for transaction with moduleCommand: ${tx.module}:${tx.command}. Continuing with generic transaction indexing.`); + logger.warn( + `No applyTransaction hook implemented for transaction with moduleCommand: ${tx.module}:${tx.command}. Continuing with generic transaction indexing.`, + ); return Promise.resolve(); } const transactionProcessor = moduleCommandProcessorMap.get(`apply_${tx.command}`); @@ -85,13 +89,17 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { if (moduleProcessorMap.size === 0) await buildModuleCommandProcessorMap(); if (!moduleProcessorMap.has(tx.module)) { - logger.warn(`No processors implemented for transactions from module: ${tx.module}. Continuing with removal of the transaction from the index.`); + logger.warn( + `No processors implemented for transactions from module: ${tx.module}. Continuing with removal of the transaction from the index.`, + ); return Promise.resolve(); } const moduleCommandProcessorMap = moduleProcessorMap.get(tx.module); if (!moduleCommandProcessorMap.has(`revert_${tx.command}`)) { - logger.warn(`No revertTransaction hook implemented for transactions with moduleCommand: ${tx.module}:${tx.command}. Continuing with removal of the transaction from the index.`); + logger.warn( + `No revertTransaction hook implemented for transactions with moduleCommand: ${tx.module}:${tx.command}. Continuing with removal of the transaction from the index.`, + ); return Promise.resolve(); } const transactionProcessor = moduleCommandProcessorMap.get(`revert_${tx.command}`); diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/initializeMessageRecovery.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/initializeMessageRecovery.js index 05e379e45..b450c3d33 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/initializeMessageRecovery.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/initializeMessageRecovery.js @@ -17,10 +17,10 @@ const COMMAND_NAME = 'initializeMessageRecovery'; // eslint-disable-next-line no-unused-vars -const applyTransaction = async (blockHeader, tx, events, dbTrx) => { }; +const applyTransaction = async (blockHeader, tx, events, dbTrx) => {}; // eslint-disable-next-line no-unused-vars -const revertTransaction = async (blockHeader, tx, events, dbTrx) => { }; +const revertTransaction = async (blockHeader, tx, events, dbTrx) => {}; module.exports = { COMMAND_NAME, diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/initializeStateRecovery.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/initializeStateRecovery.js index 6b2e6c468..47dd5c49d 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/initializeStateRecovery.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/initializeStateRecovery.js @@ -17,10 +17,10 @@ const COMMAND_NAME = 'initializeStateRecovery'; // eslint-disable-next-line no-unused-vars -const applyTransaction = async (blockHeader, tx, events, dbTrx) => { }; +const applyTransaction = async (blockHeader, tx, events, dbTrx) => {}; // eslint-disable-next-line no-unused-vars -const revertTransaction = async (blockHeader, tx, events, dbTrx) => { }; +const revertTransaction = async (blockHeader, tx, events, dbTrx) => {}; module.exports = { COMMAND_NAME, diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/recoverMessage.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/recoverMessage.js index b86116fa7..de3ef857c 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/recoverMessage.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/recoverMessage.js @@ -17,10 +17,10 @@ const COMMAND_NAME = 'recoverMessage'; // eslint-disable-next-line no-unused-vars -const applyTransaction = async (blockHeader, tx, events, dbTrx) => { }; +const applyTransaction = async (blockHeader, tx, events, dbTrx) => {}; // eslint-disable-next-line no-unused-vars -const revertTransaction = async (blockHeader, tx, events, dbTrx) => { }; +const revertTransaction = async (blockHeader, tx, events, dbTrx) => {}; module.exports = { COMMAND_NAME, diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/recoverState.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/recoverState.js index 3b4af787f..8cba39913 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/recoverState.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/recoverState.js @@ -17,10 +17,10 @@ const COMMAND_NAME = 'recoverState'; // eslint-disable-next-line no-unused-vars -const applyTransaction = async (blockHeader, tx, events, dbTrx) => { }; +const applyTransaction = async (blockHeader, tx, events, dbTrx) => {}; // eslint-disable-next-line no-unused-vars -const revertTransaction = async (blockHeader, tx, events, dbTrx) => { }; +const revertTransaction = async (blockHeader, tx, events, dbTrx) => {}; module.exports = { COMMAND_NAME, diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/registerMainchain.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/registerMainchain.js index f95d10a4b..b3264ae6a 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/registerMainchain.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/registerMainchain.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const { getLisk32AddressFromPublicKey } = require('../../../utils/account'); diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/registerSidechain.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/registerSidechain.js index a8ac75994..6b83d08c2 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/registerSidechain.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/registerSidechain.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const { getLisk32AddressFromPublicKey } = require('../../../utils/account'); diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/submitSidechainCrossChainUpdate.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/submitSidechainCrossChainUpdate.js index 0e217625a..98ef20fdd 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/submitSidechainCrossChainUpdate.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/submitSidechainCrossChainUpdate.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const { MODULE_NAME } = require('./index'); @@ -48,7 +50,9 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { const chainInfo = await getChainInfo(tx.params.sendingChainID); - logger.trace(`Indexing cross chain update transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.trace( + `Indexing cross chain update transaction ${tx.id} contained in block at height ${tx.height}.`, + ); const appInfo = { chainID: tx.params.sendingChainID, @@ -58,13 +62,18 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { }; await blockchainAppsTable.upsert(appInfo, dbTrx); - await ccuTable.upsert({ - height: tx.height, - sendingChainID: tx.params.sendingChainID, - transactionID: tx.id, - }, dbTrx); - - logger.debug(`Indexed cross chain update transaction ${tx.id} contained in block at height ${tx.height}.`); + await ccuTable.upsert( + { + height: tx.height, + sendingChainID: tx.params.sendingChainID, + transactionID: tx.id, + }, + dbTrx, + ); + + logger.debug( + `Indexed cross chain update transaction ${tx.id} contained in block at height ${tx.height}.`, + ); }; const revertTransaction = async (blockHeader, tx, events, dbTrx) => { @@ -73,7 +82,9 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { const blockchainAppsTable = await getBlockchainAppsTable(); const ccuTable = await getCCUTable(); - logger.trace(`Reverting cross chain update transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.trace( + `Reverting cross chain update transaction ${tx.id} contained in block at height ${tx.height}.`, + ); let prevTransaction; const chainInfo = await getChainInfo(tx.params.sendingChainID); @@ -81,22 +92,25 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { if (chainInfo.status === APP_STATUS.ACTIVATED) { const searchParams = { sendingChainID: tx.params.sendingChainID, - propBetweens: [{ - property: 'height', - lowerThan: blockHeader.height, - }], + propBetweens: [ + { + property: 'height', + lowerThan: blockHeader.height, + }, + ], sort: 'height:desc', }; const resultSet = await ccuTable.find(searchParams, 'height'); for (let i = 0; i < resultSet.length; i++) { - /* eslint-disable no-await-in-loop */ - const result = (await getTransactions({ - height: resultSet[i].height, - moduleCommand: tx.moduleCommand, - executionStatus: TRANSACTION_STATUS.SUCCESSFUL, - })).data; + const result = ( + await getTransactions({ + height: resultSet[i].height, + moduleCommand: tx.moduleCommand, + executionStatus: TRANSACTION_STATUS.SUCCESSFUL, + }) + ).data; if (result.length) { prevTransaction = result.find(e => e.params.sendingChainID === tx.params.sendingChainID); @@ -104,18 +118,22 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { } } } else if (chainInfo.status === APP_STATUS.REGISTERED) { - const COMMAND = await isMainchain() + const COMMAND = (await isMainchain()) ? COMMAND_NAME_REGISTER_SIDECHAIN : COMMAND_NAME_REGISTER_MAINCHAIN; - const result = (await getTransactions({ - moduleCommand: `${MODULE_NAME}:${COMMAND}`, - executionStatus: TRANSACTION_STATUS.SUCCESSFUL, - propBetweens: [{ - property: 'height', - lowerThan: blockHeader.height, - }], - })).data; + const result = ( + await getTransactions({ + moduleCommand: `${MODULE_NAME}:${COMMAND}`, + executionStatus: TRANSACTION_STATUS.SUCCESSFUL, + propBetweens: [ + { + property: 'height', + lowerThan: blockHeader.height, + }, + ], + }) + ).data; if (result.length) { prevTransaction = result.find(e => e.params.sendingChainID === tx.params.sendingChainID); @@ -130,8 +148,9 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { }; await blockchainAppsTable.upsert(appInfo, dbTrx); - /* eslint-enable no-await-in-loop */ - logger.debug(`Reverted cross chain update transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.debug( + `Reverted cross chain update transaction ${tx.id} contained in block at height ${tx.height}.`, + ); }; module.exports = { diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/terminateSidechainForLiveness.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/terminateSidechainForLiveness.js index bb27894bd..00136536e 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/terminateSidechainForLiveness.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/interoperability/terminateSidechainForLiveness.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../../../config'); const { TRANSACTION_STATUS } = require('../../../constants'); diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/legacy/registerKeys.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/legacy/registerKeys.js index e76fc1a36..be2abe240 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/legacy/registerKeys.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/legacy/registerKeys.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const { getLisk32AddressFromPublicKey } = require('../../../utils/account'); diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/changeCommission.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/changeCommission.js index cf10e3e89..92ed521f4 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/changeCommission.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/changeCommission.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const { getLisk32AddressFromPublicKey } = require('../../../utils/account'); @@ -53,9 +55,13 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { const commissionInfo = getCommissionIndexingInfo(blockHeader, tx); - logger.trace(`Indexing commission update for address ${commissionInfo.address} at height ${commissionInfo.height}.`); + logger.trace( + `Indexing commission update for address ${commissionInfo.address} at height ${commissionInfo.height}.`, + ); await commissionsTable.upsert(commissionInfo, dbTrx); - logger.debug(`Indexed commission update for address ${commissionInfo.address} at height ${commissionInfo.height}.`); + logger.debug( + `Indexed commission update for address ${commissionInfo.address} at height ${commissionInfo.height}.`, + ); }; const revertTransaction = async (blockHeader, tx, events, dbTrx) => { @@ -65,9 +71,13 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { const commissionInfo = getCommissionIndexingInfo(blockHeader, tx); - logger.trace(`Remove commission entry for address ${commissionInfo.address} at height ${commissionInfo.height}.`); + logger.trace( + `Remove commission entry for address ${commissionInfo.address} at height ${commissionInfo.height}.`, + ); await commissionsTable.delete(commissionInfo, dbTrx); - logger.debug(`Remove commission entry for address ${commissionInfo.address} at height ${commissionInfo.height}.`); + logger.debug( + `Remove commission entry for address ${commissionInfo.address} at height ${commissionInfo.height}.`, + ); }; module.exports = { diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/registerValidator.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/registerValidator.js index cea4de498..aa272282b 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/registerValidator.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/registerValidator.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../../../config'); @@ -93,9 +95,13 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { logger.debug(`Indexed transaction ${tx.id} contained in block at height ${tx.height}.`); const commissionInfo = await getCommissionIndexingInfo(blockHeader, tx); - logger.trace(`Indexing commission update for address ${commissionInfo.address} at height ${commissionInfo.height}.`); + logger.trace( + `Indexing commission update for address ${commissionInfo.address} at height ${commissionInfo.height}.`, + ); await commissionsTable.upsert(commissionInfo, dbTrx); - logger.debug(`Indexed commission update for address ${commissionInfo.address} at height ${commissionInfo.height}.`); + logger.debug( + `Indexed commission update for address ${commissionInfo.address} at height ${commissionInfo.height}.`, + ); }; // eslint-disable-next-line no-unused-vars @@ -127,9 +133,13 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { logger.debug(`Removed validator entry for address ${account.address}.`); const commissionInfo = await getCommissionIndexingInfo(blockHeader, tx); - logger.trace(`Deleting commission entry for address ${commissionInfo.address} at height ${commissionInfo.height}.`); + logger.trace( + `Deleting commission entry for address ${commissionInfo.address} at height ${commissionInfo.height}.`, + ); await commissionsTable.delete(commissionInfo, dbTrx); - logger.debug(`Deleted commission entry for address ${commissionInfo.address} at height ${commissionInfo.height}.`); + logger.debug( + `Deleted commission entry for address ${commissionInfo.address} at height ${commissionInfo.height}.`, + ); }; module.exports = { diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/reportMisbehavior.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/reportMisbehavior.js index 08daec035..e77755307 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/reportMisbehavior.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/reportMisbehavior.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - Logger, -} = require('lisk-service-framework'); +const { Logger } = require('lisk-service-framework'); const { reloadValidatorCache } = require('../../../dataService'); const { TRANSACTION_STATUS } = require('../../../constants'); diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/stake.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/stake.js index 0e5cd7340..725c5b8b9 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/stake.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/stake.js @@ -20,9 +20,7 @@ const { DB: { MySQL: { getTableInstance, - KVStore: { - getKeyValueTable, - }, + KVStore: { getKeyValueTable }, }, }, } = require('lisk-service-framework'); @@ -46,7 +44,7 @@ const getStakesTable = () => getTableInstance(stakesTableSchema, MYSQL_ENDPOINT) // Command specific constants const COMMAND_NAME = 'stake'; -const getStakeIndexingInfo = async (tx) => { +const getStakeIndexingInfo = async tx => { const stakes = await BluebirdPromise.map( tx.params.stakes, async stake => { @@ -54,7 +52,7 @@ const getStakeIndexingInfo = async (tx) => { stakeEntry.stakerAddress = getLisk32AddressFromPublicKey(tx.senderPublicKey); stakeEntry.validatorAddress = stake.validatorAddress; - stakeEntry.amount = stake.amount; + stakeEntry.amount = BigInt(stake.amount); return stakeEntry; }, { concurrency: tx.params.stakes.length }, @@ -101,7 +99,7 @@ const decrementStakeTrx = async (stake, trx) => { const updateTotalStake = async (changeAmount, dbTrx) => { const tokenID = await getPosTokenID(); const tokenKey = KV_STORE_KEY.PREFIX.TOTAL_STAKED.concat(tokenID); - const curStakedAmount = BigInt(await keyValueTable.get(tokenKey) || 0); + const curStakedAmount = BigInt((await keyValueTable.get(tokenKey)) || 0); const newStakedAmount = curStakedAmount + changeAmount; await keyValueTable.set(tokenKey, newStakedAmount, dbTrx); @@ -110,7 +108,7 @@ const updateTotalStake = async (changeAmount, dbTrx) => { const updateTotalSelfStake = async (changeAmount, dbTrx) => { const tokenID = await getPosTokenID(); const tokenKey = KV_STORE_KEY.PREFIX.TOTAL_SELF_STAKED.concat(tokenID); - const curStakedAmount = BigInt(await keyValueTable.get(tokenKey) || 0); + const curStakedAmount = BigInt((await keyValueTable.get(tokenKey)) || 0); const newStakedAmount = curStakedAmount + changeAmount; await keyValueTable.set(tokenKey, newStakedAmount, dbTrx); @@ -124,10 +122,12 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { let totalStakeChange = BigInt(0); let totalSelfStakeChange = BigInt(0); - logger.trace(`Indexing stakes in transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.trace( + `Indexing stakes in transaction ${tx.id} contained in block at height ${tx.height}.`, + ); await BluebirdPromise.map( stakes, - async (stake) => { + async stake => { await incrementStakeTrx(stake, dbTrx); if (stake.stakerAddress === stake.validatorAddress) { @@ -151,11 +151,14 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { let totalStakeChange = BigInt(0); let totalSelfStakeChange = BigInt(0); - logger.trace(`Reverting stakes in transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.trace( + `Reverting stakes in transaction ${tx.id} contained in block at height ${tx.height}.`, + ); await BluebirdPromise.map( stakes, - async (stake) => { + async stake => { await decrementStakeTrx(stake, dbTrx); + // Subtract to reverse the impact if (stake.stakerAddress === stake.validatorAddress) { totalSelfStakeChange -= BigInt(stake.amount); @@ -167,7 +170,9 @@ const revertTransaction = async (blockHeader, tx, events, dbTrx) => { // Update total stake amount in key value store table. await updateTotalStake(totalStakeChange, dbTrx); await updateTotalSelfStake(totalSelfStakeChange, dbTrx); - logger.debug(`Reverted stakes in transaction ${tx.id} contained in block at height ${tx.height}.`); + logger.debug( + `Reverted stakes in transaction ${tx.id} contained in block at height ${tx.height}.`, + ); }; module.exports = { diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/updateGeneratorKey.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/updateGeneratorKey.js index 5d66f2342..a7aadac29 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/updateGeneratorKey.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/pos/updateGeneratorKey.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const { getLisk32AddressFromPublicKey } = require('../../../utils/account'); diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/token/transfer.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/token/transfer.js index 95fe28dbf..ae8a1d7c9 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/token/transfer.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/token/transfer.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../../../config'); @@ -38,7 +40,9 @@ const EVENT_NAME_INITIALIZE_USER_ACCOUNT = 'initializeUserAccount'; // eslint-disable-next-line no-unused-vars const applyTransaction = async (blockHeader, tx, events, dbTrx) => { - logger.trace(`Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`); + logger.trace( + `Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`, + ); indexAccountAddress(tx.params.recipientAddress); if (tx.executionStatus !== TRANSACTION_STATUS.SUCCESSFUL) return; @@ -48,10 +52,12 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { ...tx.params, }; - const filterInitializeUserAccountEvent = events - .find(event => event.name === EVENT_NAME_INITIALIZE_USER_ACCOUNT - && event.data.address === tx.params.recipientAddress - && event.topics.includes(tx.id)); + const filterInitializeUserAccountEvent = events.find( + event => + event.name === EVENT_NAME_INITIALIZE_USER_ACCOUNT && + event.data.address === tx.params.recipientAddress && + event.topics.includes(tx.id), + ); if (filterInitializeUserAccountEvent) { const formattedTransaction = await requestConnector('formatTransaction', { @@ -70,7 +76,9 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { // eslint-disable-next-line no-unused-vars const revertTransaction = async (blockHeader, tx, events, dbTrx) => { - logger.trace(`Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`); + logger.trace( + `Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`, + ); indexAccountAddress(tx.params.recipientAddress); }; diff --git a/services/blockchain-indexer/shared/indexer/transactionProcessor/token/transferCrossChain.js b/services/blockchain-indexer/shared/indexer/transactionProcessor/token/transferCrossChain.js index 5fb7d3dc5..cd2af7286 100644 --- a/services/blockchain-indexer/shared/indexer/transactionProcessor/token/transferCrossChain.js +++ b/services/blockchain-indexer/shared/indexer/transactionProcessor/token/transferCrossChain.js @@ -15,7 +15,9 @@ */ const { Logger, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../../../config'); @@ -38,7 +40,9 @@ const EVENT_NAME_INITIALIZE_ESCROW_ACCOUNT = 'initializeEscrowAccount'; // eslint-disable-next-line no-unused-vars const applyTransaction = async (blockHeader, tx, events, dbTrx) => { - logger.trace(`Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`); + logger.trace( + `Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`, + ); indexAccountAddress(tx.params.recipientAddress); if (tx.executionStatus !== TRANSACTION_STATUS.SUCCESSFUL) return; @@ -48,10 +52,12 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { ...tx.params, }; - const filterInitializeEscrowAccountEvent = events - .find(event => event.name === EVENT_NAME_INITIALIZE_ESCROW_ACCOUNT - && event.data.address === tx.params.recipientAddress - && event.topics.includes(tx.id)); + const filterInitializeEscrowAccountEvent = events.find( + event => + event.name === EVENT_NAME_INITIALIZE_ESCROW_ACCOUNT && + event.data.address === tx.params.recipientAddress && + event.topics.includes(tx.id), + ); if (filterInitializeEscrowAccountEvent) { const formattedTransaction = await requestConnector('formatTransaction', { @@ -70,7 +76,9 @@ const applyTransaction = async (blockHeader, tx, events, dbTrx) => { // eslint-disable-next-line no-unused-vars const revertTransaction = async (blockHeader, tx, events, dbTrx) => { - logger.trace(`Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`); + logger.trace( + `Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`, + ); indexAccountAddress(tx.params.recipientAddress); }; diff --git a/services/blockchain-indexer/shared/indexer/utils/blockchainIndex.js b/services/blockchain-indexer/shared/indexer/utils/blockchainIndex.js index a33e4bf6a..014012baf 100644 --- a/services/blockchain-indexer/shared/indexer/utils/blockchainIndex.js +++ b/services/blockchain-indexer/shared/indexer/utils/blockchainIndex.js @@ -27,17 +27,18 @@ const { KV_STORE_KEY } = require('../../constants'); const keyValueTable = getKeyValueTable(); -const updateTotalLockedAmounts = async (tokenIDLockedAmountChangeMap, dbTrx) => BluebirdPromise.map( - Object.entries(tokenIDLockedAmountChangeMap), - async ([tokenID, lockedAmountChange]) => { - const tokenKey = KV_STORE_KEY.PREFIX.TOTAL_LOCKED.concat(tokenID); - const curLockedAmount = BigInt(await keyValueTable.get(tokenKey) || 0); - const newLockedAmount = curLockedAmount + lockedAmountChange; +const updateTotalLockedAmounts = async (tokenIDLockedAmountChangeMap, dbTrx) => + BluebirdPromise.map( + Object.entries(tokenIDLockedAmountChangeMap), + async ([tokenID, lockedAmountChange]) => { + const tokenKey = KV_STORE_KEY.PREFIX.TOTAL_LOCKED.concat(tokenID); + const curLockedAmount = BigInt((await keyValueTable.get(tokenKey)) || 0); + const newLockedAmount = curLockedAmount + lockedAmountChange; - await keyValueTable.set(tokenKey, newLockedAmount, dbTrx); - }, - { concurrency: Object.entries(tokenIDLockedAmountChangeMap).length }, -); + await keyValueTable.set(tokenKey, newLockedAmount, dbTrx); + }, + { concurrency: Object.entries(tokenIDLockedAmountChangeMap).length }, + ); module.exports = { updateTotalLockedAmounts, diff --git a/services/blockchain-indexer/shared/indexer/utils/events.js b/services/blockchain-indexer/shared/indexer/utils/events.js index 0209e02ce..8da50dd66 100644 --- a/services/blockchain-indexer/shared/indexer/utils/events.js +++ b/services/blockchain-indexer/shared/indexer/utils/events.js @@ -22,14 +22,12 @@ const { startDBTransaction, commitDBTransaction, rollbackDBTransaction, - KVStore: { - getKeyValueTable, - }, + KVStore: { getKeyValueTable }, }, }, } = require('lisk-service-framework'); -const { getGenesisHeight } = require('../../constants'); +const { getGenesisHeight, EVENT, EVENT_TOPIC_PREFIX, LENGTH_ID } = require('../../constants'); const config = require('../../../config'); const eventsTableSchema = require('../../database/schema/events'); @@ -44,13 +42,13 @@ const keyValueTable = getKeyValueTable(); const getEventsTable = () => getTableInstance(eventsTableSchema, MYSQL_ENDPOINT); -const getEventsInfoToIndex = async (block, events) => { +const getEventsInfoToIndex = (block, events) => { const eventsInfoToIndex = { eventsInfo: [], eventTopicsInfo: [], }; - events.forEach((event) => { + events.forEach((event, eventIndex) => { const eventInfo = { id: event.id, name: event.name, @@ -62,7 +60,7 @@ const getEventsInfoToIndex = async (block, events) => { }; // Store whole event when persistence is enabled or block is not finalized yet - // Storing event of non-finalized block is required to fetch events of a dropped block + // Storing event of non-finalized block is required to fetch events of a deleted block if (!block.isFinal || config.db.isPersistEvents) { eventInfo.eventStr = JSON.stringify(event); } @@ -75,38 +73,71 @@ const getEventsInfoToIndex = async (block, events) => { topic, }; eventsInfoToIndex.eventTopicsInfo.push(eventTopicInfo); + + // Add the corresponding transactionID as a topic when not present in the topics list + // i.e. only when the topic starts with the CCM ID prefix + // Useful to fetch the relevant events when queried by transactionID + if ( + topic.startsWith(EVENT_TOPIC_PREFIX.CCM_ID) && + topic.length === EVENT_TOPIC_PREFIX.CCM_ID.length + LENGTH_ID + ) { + const commandExecResultEvent = events + .slice(eventIndex) + .find(e => e.name === EVENT.COMMAND_EXECUTION_RESULT); + + const [topicTransactionID] = commandExecResultEvent.topics; + + const transactionID = // Remove the topic prefix from transactionID before indexing + topicTransactionID.length === EVENT_TOPIC_PREFIX.TX_ID.length + LENGTH_ID + ? topicTransactionID.slice(EVENT_TOPIC_PREFIX.TX_ID.length) + : topicTransactionID; + + const eventTopicAdditionalInfo = { + eventID: event.id, + topic: transactionID, + }; + eventsInfoToIndex.eventTopicsInfo.push(eventTopicAdditionalInfo); + } }); }); return eventsInfoToIndex; }; -const deleteEventStrTillHeight = async (toHeight) => { +const deleteEventStrTillHeight = async toHeight => { const eventsTable = await getEventsTable(); const fromHeight = await keyValueTable.get(LAST_DELETED_EVENTS_HEIGHT); const connection = await getDBConnection(MYSQL_ENDPOINT); const dbTrx = await startDBTransaction(connection); - logger.debug(`Created new MySQL transaction to delete serialized events until height ${toHeight}.`); + logger.debug( + `Created new MySQL transaction to delete serialized events until height ${toHeight}.`, + ); try { const queryParams = { - propBetweens: [{ - property: 'height', - from: fromHeight ? fromHeight + 1 : await getGenesisHeight(), - to: toHeight, - }], + propBetweens: [ + { + property: 'height', + from: fromHeight ? fromHeight + 1 : await getGenesisHeight(), + to: toHeight, + }, + ], }; await eventsTable.update({ where: queryParams, updates: { eventStr: null } }, dbTrx); await keyValueTable.set(LAST_DELETED_EVENTS_HEIGHT, toHeight, dbTrx); await commitDBTransaction(dbTrx); - logger.debug(`Committed MySQL transaction to delete serialized events until height ${toHeight}.`); + logger.debug( + `Committed MySQL transaction to delete serialized events until height ${toHeight}.`, + ); } catch (_) { await rollbackDBTransaction(dbTrx); - logger.debug(`Rolled back MySQL transaction to delete serialized events until height ${toHeight}.`); + logger.debug( + `Rolled back MySQL transaction to delete serialized events until height ${toHeight}.`, + ); } }; diff --git a/services/blockchain-indexer/shared/indexer/utils/validator.js b/services/blockchain-indexer/shared/indexer/utils/validator.js index e59232462..6f3d5bd77 100644 --- a/services/blockchain-indexer/shared/indexer/utils/validator.js +++ b/services/blockchain-indexer/shared/indexer/utils/validator.js @@ -13,9 +13,13 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { math: { q96 } } = require('@liskhq/lisk-utils'); const { - DB: { MySQL: { getTableInstance } }, + math: { q96 }, +} = require('@liskhq/lisk-utils'); +const { + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../../config'); @@ -34,14 +38,18 @@ const calcCommissionAmount = async (generatorAddress, blockHeight, blockReward) const queryParams = { address: generatorAddress, - propBetweens: [{ - property: 'height', - lowerThan: blockHeight, - }], + propBetweens: [ + { + property: 'height', + lowerThan: blockHeight, + }, + ], sort: 'height:desc', limit: 1, }; - const [{ commission } = { commission: 0 }] = await commissionsTable.find(queryParams, ['commission']); + const [{ commission } = { commission: 0 }] = await commissionsTable.find(queryParams, [ + 'commission', + ]); const blockRewardQ = q96(blockReward); const currentCommissionQ = q96(BigInt(commission)); @@ -51,10 +59,10 @@ const calcCommissionAmount = async (generatorAddress, blockHeight, blockReward) const calcSelfStakeReward = async (generatorAddress, blockReward, commissionAmount) => { const stakesTable = await getStakesTable(); - const stakerInfo = await stakesTable.find( - { validatorAddress: generatorAddress }, - ['stakerAddress', 'amount'], - ); + const stakerInfo = await stakesTable.find({ validatorAddress: generatorAddress }, [ + 'stakerAddress', + 'amount', + ]); if (stakerInfo.length) { const selfStakesInfo = stakerInfo.filter(stake => stake.stakerAddress === generatorAddress); diff --git a/services/blockchain-indexer/shared/indexer/validatorIndex.js b/services/blockchain-indexer/shared/indexer/validatorIndex.js deleted file mode 100644 index e8cd46416..000000000 --- a/services/blockchain-indexer/shared/indexer/validatorIndex.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - * LiskHQ/lisk-service - * Copyright © 2022 Lisk Foundation - * - * See the LICENSE file at the top-level directory of this distribution - * for licensing information. - * - * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, - * no part of this software, including this file, may be copied, modified, - * propagated, or distributed except according to the terms contained in the - * LICENSE file. - * - * Removal or modification of this copyright notice is prohibited. - * - */ -const { - DB: { MySQL: { getTableInstance } }, -} = require('lisk-service-framework'); - -const { requestConnector } = require('../utils/request'); -const commissionsTableSchema = require('../database/schema/commissions'); -const stakesTableSchema = require('../database/schema/stakes'); - -const { - getBlockByHeight, -} = require('../dataService'); -const { getGenesisHeight } = require('../constants'); - -const config = require('../../config'); - -const MYSQL_ENDPOINT = config.endpoints.mysql; - -const getCommissionsTable = () => getTableInstance(commissionsTableSchema, MYSQL_ENDPOINT); -const getStakesTable = () => getTableInstance(stakesTableSchema, MYSQL_ENDPOINT); - -const indexValidatorCommissionInfo = async () => { - const genesisBlock = await getBlockByHeight(await getGenesisHeight()); - const commissionsTable = await getCommissionsTable(); - const validators = await requestConnector('getPoSGenesisValidators'); - const commissionInfo = validators.map(validator => ({ - address: validator.address, - height: genesisBlock.height, - commission: validator.commission, - })); - if (commissionInfo.length) await commissionsTable.upsert(commissionInfo); -}; - -const indexStakersInfo = async () => { - const stakesTable = await getStakesTable(); - const stakers = await requestConnector('getPoSGenesisStakers'); - const stakesToIndex = []; - await stakers.forEach(async staker => staker.stakes.forEach(stake => { - stakesToIndex.push({ - stakerAddress: staker.address, - validatorAddress: stake.validatorAddress, - amount: stake.amount, - }); - })); - - if (stakesToIndex.length) await stakesTable.upsert(stakesToIndex); -}; - -module.exports = { - indexValidatorCommissionInfo, - indexStakersInfo, -}; diff --git a/services/blockchain-indexer/shared/init.js b/services/blockchain-indexer/shared/init.js index ce61063ff..ad536ff7e 100644 --- a/services/blockchain-indexer/shared/init.js +++ b/services/blockchain-indexer/shared/init.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - Logger, -} = require('lisk-service-framework'); +const { Logger } = require('lisk-service-framework'); const config = require('../config'); @@ -26,8 +24,9 @@ const { initFeeEstimates, } = require('./dataService'); const { getFeeEstimatesFromFeeEstimator } = require('./dataService/business/feeEstimates'); +const { initBlockProcessingQueues } = require('./indexer/blockchainIndex'); const indexStatus = require('./indexer/indexStatus'); -const processor = require('./processor'); +const messageProcessor = require('./messageProcessor'); const logger = Logger(); const snapshotUtils = require('./utils/snapshot'); @@ -48,7 +47,7 @@ const init = async () => { await snapshotUtils.initSnapshot(); logger.info('Successfully downloaded and applied the snapshot.'); } catch (err) { - logger.warn(`Unable to apply snapshot:\n${err.message}.`); + logger.warn(`Unable to apply snapshot:\n${err.message}`); } } @@ -59,11 +58,13 @@ const init = async () => { await getFeeEstimatesFromFeeEstimator(); if (config.operations.isIndexingModeEnabled) { - await processor.init(); + await initBlockProcessingQueues(); + await messageProcessor.init(); } - } catch (error) { - logger.error(`Unable to initialize due to: ${error.message}. Try restarting the application.`); - logger.trace(error.stack); + } catch (err) { + logger.error(`Unable to initialize due to: ${err.message}. Try restarting the application.`); + logger.trace(err.stack); + throw err; } }; diff --git a/services/blockchain-indexer/shared/jobs/deleteFinalizedCCUMetadata.js b/services/blockchain-indexer/shared/jobs/deleteFinalizedCCUMetadata.js index ab368683e..21df71ab8 100644 --- a/services/blockchain-indexer/shared/jobs/deleteFinalizedCCUMetadata.js +++ b/services/blockchain-indexer/shared/jobs/deleteFinalizedCCUMetadata.js @@ -14,7 +14,9 @@ * */ const { - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../config'); @@ -23,14 +25,16 @@ const ccuTableSchema = require('../database/schema/ccu'); const getCCUTable = () => getTableInstance(ccuTableSchema, MYSQL_ENDPOINT); -const deleteFinalizedCCUMetadata = async (height) => { +const deleteFinalizedCCUMetadata = async height => { const ccuTable = await getCCUTable(); const searchParams = { - propBetweens: [{ - property: 'height', - to: height, - }], + propBetweens: [ + { + property: 'height', + to: height, + }, + ], }; await ccuTable.delete(searchParams); diff --git a/services/blockchain-indexer/shared/jobs/validateValidatorsCache.js b/services/blockchain-indexer/shared/jobs/validateValidatorsCache.js index 108574ccf..c111a4568 100644 --- a/services/blockchain-indexer/shared/jobs/validateValidatorsCache.js +++ b/services/blockchain-indexer/shared/jobs/validateValidatorsCache.js @@ -16,10 +16,7 @@ const { Logger } = require('lisk-service-framework'); const _ = require('lodash'); -const { - reloadValidatorCache, - getAllValidators, -} = require('../dataService'); +const { reloadValidatorCache, getAllValidators } = require('../dataService'); const business = require('../dataService/business'); @@ -31,7 +28,9 @@ const validateValidatorCache = async () => { const cachedValidators = _.cloneDeep(await getAllValidators()); if (validatorsByStake.length > cachedValidators.length) { - logger.warn(`Eligible validator count is more than cached validator count. Reloading the cache. \n\tEligible validator count: ${validatorsByStake.length} \n\tCached validators count: ${cachedValidators.length}`); + logger.warn( + `Eligible validator count is more than cached validator count. Reloading the cache. \n\tEligible validator count: ${validatorsByStake.length} \n\tCached validators count: ${cachedValidators.length}`, + ); await reloadValidatorCache(); return; } @@ -39,7 +38,6 @@ const validateValidatorCache = async () => { for (let index = 0; index < validatorsByStake.length; index++) { if (validatorsByStake[index].address !== cachedValidators[index].address) { logger.warn('Incorrect validator ranking detected. Reloading the validators cache.'); - // eslint-disable-next-line no-await-in-loop await reloadValidatorCache(); return; } diff --git a/services/blockchain-indexer/shared/messageProcessor.js b/services/blockchain-indexer/shared/messageProcessor.js new file mode 100644 index 000000000..410dd783c --- /dev/null +++ b/services/blockchain-indexer/shared/messageProcessor.js @@ -0,0 +1,170 @@ +/* + * LiskHQ/lisk-service + * Copyright © 2022 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ +const MessageQueue = require('bull'); + +const { Logger, Signals } = require('lisk-service-framework'); + +const config = require('../config'); + +const logger = Logger(); + +const { initNodeConstants } = require('./constants'); + +const { + addHeightToIndexBlocksQueue, + scheduleBlockDeletion, + indexNewBlock, +} = require('./indexer/blockchainIndex'); + +const { + formatBlock, + performLastBlockUpdate, + reloadGeneratorsCache, + reloadValidatorCache, + getGenerators, + getNumberOfGenerators, +} = require('./dataService'); +const { accountAddrUpdateQueue } = require('./indexer/accountIndex'); + +const STATS_INTERVAL = 1 * 60 * 1000; // ms + +const accountMessageQueue = new MessageQueue( + config.queue.account.name, + config.endpoints.messageQueue, + { defaultJobOptions: config.queue.defaultJobOptions }, +); + +// Missing blocks +const blockMessageQueue = new MessageQueue(config.queue.block.name, config.endpoints.messageQueue, { + defaultJobOptions: config.queue.defaultJobOptions, +}); + +// Newly generated blocks +const eventMessageQueue = new MessageQueue(config.queue.event.name, config.endpoints.messageQueue, { + defaultJobOptions: config.queue.defaultJobOptions, +}); + +const queueStatus = async messageQueue => { + setInterval(async () => { + const jc = await messageQueue.getJobCounts(); + const logSuffix = + jc.waiting || jc.active || jc.failed || jc.paused + ? `waiting: ${jc.waiting}, active: ${jc.active}, failed: ${jc.failed}, paused: ${jc.paused}` + : 'All scheduled jobs are done'; + + logger.info(`Message queue counters for ${messageQueue.name}: ${logSuffix}.`); + }, STATS_INTERVAL); +}; + +const initQueueStatus = async () => { + await queueStatus(accountMessageQueue); + await queueStatus(blockMessageQueue); + await queueStatus(eventMessageQueue); +}; + +const newBlockProcessor = async block => { + logger.debug(`New block (${block.header.id}) received at height ${block.header.height}.`); + const response = await formatBlock(block); + const [newBlock] = response.data; + + await indexNewBlock(newBlock); + await performLastBlockUpdate(newBlock); + Signals.get('newBlock').dispatch(response); + logger.info( + `Finished scheduling new block (${block.header.id}) event for block height ${block.header.height}.`, + ); +}; + +const deleteBlockProcessor = async header => { + try { + logger.debug( + `Scheduling the delete block (${header.id}) event for block height ${header.height}.`, + ); + const response = await formatBlock({ header }, true); + await scheduleBlockDeletion(header); + Signals.get('deleteBlock').dispatch(response); + logger.info( + `Finished scheduling the delete block (${header.id}) event for block height ${header.height}.`, + ); + } catch (err) { + logger.warn( + `Processing delete block event for ID ${header.id} at height ${header.height} failed due to: ${err.message}. Will retry.`, + ); + throw err; + } +}; + +const newRoundProcessor = async () => { + logger.debug('Performing updates on new round.'); + await reloadValidatorCache(); + await reloadGeneratorsCache(); + const limit = await getNumberOfGenerators(); + const generators = await getGenerators({ limit, offset: 0 }); + Signals.get('newRound').dispatch(generators); + logger.info(`Finished performing all updates on new round.`); +}; + +const initMessageProcessors = async () => { + logger.info(`Registering job processor for ${accountMessageQueue.name} message queue.`); + accountMessageQueue.process(async job => { + const { account } = job.data; + logger.debug(`Scheduling indexing for account with address: ${account.address}.`); + await accountAddrUpdateQueue.add(account); + }); + + logger.info(`Registering job processor for ${blockMessageQueue.name} message queue.`); + blockMessageQueue.process(async job => { + logger.debug('Subscribed to block index message queue.'); + const { height } = job.data; + + logger.debug(`Scheduling indexing for block at height: ${height}.`); + await addHeightToIndexBlocksQueue(height); + }); + + logger.info(`Registering job processor for ${eventMessageQueue.name} message queue.`); + + eventMessageQueue.process(async job => { + logger.debug('Subscribed to the events from coordinator.'); + const { isNewBlock, isDeleteBlock, isNewRound } = job.data; + + if (isNewBlock) { + const { block } = job.data; + await newBlockProcessor(block); + } else if (isDeleteBlock) { + try { + const { header } = job.data; + await deleteBlockProcessor(header); + } catch (err) { + if (job.attemptsMade === job.opts.attempts - 1) { + await eventMessageQueue.add(job.data); + } + } + } else if (isNewRound) { + await newRoundProcessor(); + } + }); + + await initQueueStatus(); +}; + +const init = async () => { + await initNodeConstants(); + await initMessageProcessors(); +}; + +module.exports = { + init, +}; diff --git a/services/blockchain-indexer/shared/processor.js b/services/blockchain-indexer/shared/processor.js deleted file mode 100644 index 76e06f8cd..000000000 --- a/services/blockchain-indexer/shared/processor.js +++ /dev/null @@ -1,90 +0,0 @@ -/* - * LiskHQ/lisk-service - * Copyright © 2022 Lisk Foundation - * - * See the LICENSE file at the top-level directory of this distribution - * for licensing information. - * - * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, - * no part of this software, including this file, may be copied, modified, - * propagated, or distributed except according to the terms contained in the - * LICENSE file. - * - * Removal or modification of this copyright notice is prohibited. - * - */ -const MessageQueue = require('bull'); - -const { - Logger, -} = require('lisk-service-framework'); - -const logger = Logger(); - -const { initEventsProcess } = require('./eventsProcessor'); -const { - addAccountToDirectUpdateQueue, -} = require('./indexer/accountIndex'); - -const { addBlockToQueue } = require('./indexer/blockchainIndex'); - -const config = require('../config'); - -const STATS_INTERVAL = 1 * 60 * 1000; // ms - -const blockMessageQueue = new MessageQueue( - config.queue.block.name, - config.endpoints.messageQueue, - { defaultJobOptions: config.queue.defaultJobOptions }, -); - -const accountMessageQueue = new MessageQueue( - config.queue.account.name, - config.endpoints.messageQueue, - { defaultJobOptions: config.queue.defaultJobOptions }, -); - -const queueStatus = async (queueInstance) => { - setInterval(async () => { - const jc = await queueInstance.getJobCounts(); - if (Number(jc.waiting) > 0 || Number(jc.active) > 0 - || Number(jc.failed) > 0 || Number(jc.paused) > 0) { - logger.info(`Queue counters for ${queueInstance.name}: waiting: ${jc.waiting}, active: ${jc.active}, failed: ${jc.failed}, paused: ${jc.paused}`); - } else { - logger.info(`Queue counters for ${queueInstance.name}: All scheduled jobs are done.`); - } - }, STATS_INTERVAL); -}; - -const initQueueStatus = async () => { - await queueStatus(blockMessageQueue); - await queueStatus(accountMessageQueue); -}; - -const initProcess = async () => { - blockMessageQueue.process(async (job) => { - logger.debug('Subscribed to block index message queue'); - const { height } = job.data; - - logger.debug(`Scheduling indexing for block at height: ${height}`); - await addBlockToQueue(height); - }); - - accountMessageQueue.process(async (job) => { - logger.debug('Subscribed to account index message queue'); - const { account } = job.data; - logger.debug(`Scheduling indexing for account with address: ${account.address}`); - await addAccountToDirectUpdateQueue(account); - }); - - await initQueueStatus(); -}; - -const init = async () => { - await initProcess(); - await initEventsProcess(); -}; - -module.exports = { - init, -}; diff --git a/services/blockchain-indexer/shared/regex.js b/services/blockchain-indexer/shared/regex.js index daa188a4d..54d8b435b 100644 --- a/services/blockchain-indexer/shared/regex.js +++ b/services/blockchain-indexer/shared/regex.js @@ -18,7 +18,7 @@ const ADDRESS_LISK32 = /^lsk[a-hjkm-z2-9]{38}$/; const BLS_KEY = /^\b[a-fA-F0-9]{96}\b$/; const PROOF_OF_POSSESSION = /^\b[a-fA-F0-9]{192}\b$/; const PUBLIC_KEY = /^([A-Fa-f0-9]{2}){32}$/; -const NAME = /^[\w!@$&.]{3,20}$/; +const NAME = /^[a-z0-9!@$&_.]{1,20}$/; const TOKEN_ID = /^\b[a-fA-F0-9]{16}\b$/; const MAINCHAIN_ID = /^[a-fA-F0-9]{2}000000$/; const CHAIN_ID = /^\b[a-fA-F0-9]{8}\b$/; diff --git a/services/blockchain-indexer/shared/utils/account.js b/services/blockchain-indexer/shared/utils/account.js index 4b5c2791a..0652f2f7a 100644 --- a/services/blockchain-indexer/shared/utils/account.js +++ b/services/blockchain-indexer/shared/utils/account.js @@ -14,13 +14,13 @@ * */ const { - address: { - getLisk32AddressFromPublicKey: getLisk32AddressFromPublicKeyHelper, - }, + address: { getLisk32AddressFromPublicKey: getLisk32AddressFromPublicKeyHelper }, } = require('@liskhq/lisk-cryptography'); const { - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const accountsTableSchema = require('../database/schema/accounts'); @@ -30,9 +30,10 @@ const MYSQL_ENDPOINT = config.endpoints.mysql; const getAccountsTable = () => getTableInstance(accountsTableSchema, MYSQL_ENDPOINT); -const getLisk32AddressFromPublicKey = publicKey => getLisk32AddressFromPublicKeyHelper(Buffer.from(publicKey, 'hex')); +const getLisk32AddressFromPublicKey = publicKey => + getLisk32AddressFromPublicKeyHelper(Buffer.from(publicKey, 'hex')); -const updateAccountInfo = async (params) => { +const updateAccountInfo = async params => { const accountInfo = {}; Object.keys(accountsTableSchema.schema).forEach(columnName => { if (columnName in params) { diff --git a/services/blockchain-indexer/shared/utils/array.js b/services/blockchain-indexer/shared/utils/array.js index 19ced8586..42411deb1 100644 --- a/services/blockchain-indexer/shared/utils/array.js +++ b/services/blockchain-indexer/shared/utils/array.js @@ -13,7 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const dropDuplicates = arr => arr.filter((v, i, a) => a.findIndex(t => (t === v)) === i); +const dropDuplicates = arr => arr.filter((v, i, a) => a.findIndex(t => t === v) === i); const range = (start = 0, end, step = 1) => { if (!end) { @@ -26,17 +26,17 @@ const range = (start = 0, end, step = 1) => { return new Array(arrSize).fill().map((_, index) => start + index * step); }; -const sortComparator = (sortParam) => { +const sortComparator = sortParam => { const [sortProp, sortOrder] = sortParam.split(':'); const comparator = (a, b) => { try { if (Number.isNaN(Number(a[sortProp]))) throw new Error('Not a number, try string sorting.'); - return (sortOrder === 'asc') + return sortOrder === 'asc' ? Number(a[sortProp] - b[sortProp]) : Number(b[sortProp] - a[sortProp]); } catch (_) { - return (sortOrder === 'asc') + return sortOrder === 'asc' ? a[sortProp].localeCompare(b[sortProp]) : b[sortProp].localeCompare(a[sortProp]); } @@ -44,8 +44,8 @@ const sortComparator = (sortParam) => { return comparator; }; -const isSubstringInArray = (collection, pattern) => collection.some((item) => item && pattern - && item.toLowerCase().includes(pattern.toLowerCase())); +const isSubstringInArray = (collection, pattern) => + collection.some(item => item && pattern && item.toLowerCase().includes(pattern.toLowerCase())); module.exports = { dropDuplicates, diff --git a/services/blockchain-indexer/shared/utils/file.js b/services/blockchain-indexer/shared/utils/file.js index cbed850ee..8d642aed7 100644 --- a/services/blockchain-indexer/shared/utils/file.js +++ b/services/blockchain-indexer/shared/utils/file.js @@ -22,7 +22,7 @@ const { const camelCase = require('camelcase'); const requireAll = require('require-all'); -const getDirectoryNamesInPath = async (sourceDirPath) => { +const getDirectoryNamesInPath = async sourceDirPath => { const directories = await getDirectories(sourceDirPath, { withFileTypes: true }); const dirNames = directories.map(path => path.split('/').pop()); return dirNames; @@ -32,19 +32,17 @@ const getAllJSFiles = async ( sourceDirPath, pascalCase = false, preserveConsecutiveUppercase = true, -) => requireAll({ - dirname: sourceDirPath, - filter: /(.+)\.js$/, - excludeDirs: /^\.(git|svn)$/, - recursive: false, - map: (fileName) => { - const formattedFileName = camelCase( - fileName, - { pascalCase, preserveConsecutiveUppercase }, - ); - return formattedFileName; - }, -}); +) => + requireAll({ + dirname: sourceDirPath, + filter: /(.+)\.js$/, + excludeDirs: /^\.(git|svn)$/, + recursive: false, + map: fileName => { + const formattedFileName = camelCase(fileName, { pascalCase, preserveConsecutiveUppercase }); + return formattedFileName; + }, + }); module.exports = { getDirectoryNamesInPath, diff --git a/services/blockchain-indexer/shared/utils/param.js b/services/blockchain-indexer/shared/utils/param.js index 3e9c9d9e7..631218765 100644 --- a/services/blockchain-indexer/shared/utils/param.js +++ b/services/blockchain-indexer/shared/utils/param.js @@ -32,8 +32,12 @@ const normalizeRangeParam = (params, property) => { const from = Number(fromStr); const to = Number(toStr); - if (Number.isNaN(from) || Number.isNaN(to)) throw new ValidationException(`Invalid (non-numeric) '${property}' range values supplied: ${params[property]}.`); - if (fromStr && toStr && from > to) throw new ValidationException(`From ${property} cannot be greater than to ${property}.`); + if (Number.isNaN(from) || Number.isNaN(to)) + throw new ValidationException( + `Invalid (non-numeric) '${property}' range values supplied: ${params[property]}.`, + ); + if (fromStr && toStr && from > to) + throw new ValidationException(`From ${property} cannot be greater than to ${property}.`); if (fromStr === EMPTY_STRING) { propBetweens.push({ property, to }); @@ -43,13 +47,10 @@ const normalizeRangeParam = (params, property) => { propBetweens.push({ property, from, to }); } - const paramsWithoutProperty = Object.keys(params).reduce( - (acc, key) => { - if (key !== property) acc[key] = params[key]; - return acc; - }, - {}, - ); + const paramsWithoutProperty = Object.keys(params).reduce((acc, key) => { + if (key !== property) acc[key] = params[key]; + return acc; + }, {}); return { ...paramsWithoutProperty, propBetweens, diff --git a/services/blockchain-indexer/shared/utils/parser.js b/services/blockchain-indexer/shared/utils/parser.js index 37dfbfc85..f94a75347 100644 --- a/services/blockchain-indexer/shared/utils/parser.js +++ b/services/blockchain-indexer/shared/utils/parser.js @@ -13,7 +13,9 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { address: { getAddressFromLisk32Address } } = require('@liskhq/lisk-cryptography'); +const { + address: { getAddressFromLisk32Address }, +} = require('@liskhq/lisk-cryptography'); const LISK_ADDRESS_FORMAT = 'lisk32'; @@ -23,16 +25,20 @@ const parseToJSONCompatObj = obj => { if (['string', 'number'].includes(typeof obj)) return obj; if (obj instanceof Buffer) return Buffer.from(obj).toString('hex'); if (typeof obj === 'bigint') return String(obj); - if (typeof obj === 'object' && Array.isArray(obj)) return (() => { obj.forEach((o, i) => obj[i] = parseToJSONCompatObj(o)); return obj; })(); + if (typeof obj === 'object' && Array.isArray(obj)) + return (() => { + obj.forEach((o, i) => (obj[i] = parseToJSONCompatObj(o))); + return obj; + })(); - Object.entries(obj) - .forEach(([k, v]) => { - if (v instanceof Buffer) obj[k] = Buffer.from(v).toString('hex'); - else if (typeof v === 'bigint') obj[k] = String(v); - else if (typeof v === 'object' && Array.isArray(v)) obj[k].forEach((o, i) => obj[k][i] = parseToJSONCompatObj(o)); - else if (typeof v === 'object' && v !== null) obj[k] = parseToJSONCompatObj(v); - else obj[k] = v; - }); + Object.entries(obj).forEach(([k, v]) => { + if (v instanceof Buffer) obj[k] = Buffer.from(v).toString('hex'); + else if (typeof v === 'bigint') obj[k] = String(v); + else if (typeof v === 'object' && Array.isArray(v)) + obj[k].forEach((o, i) => (obj[k][i] = parseToJSONCompatObj(o))); + else if (typeof v === 'object' && v !== null) obj[k] = parseToJSONCompatObj(v); + else obj[k] = v; + }); return obj; }; @@ -60,13 +66,15 @@ const parseInputBySchema = (input, schema) => { if (type === 'array') { acc[key] = currValue.map(item => parseInputBySchema(item, itemsSchema)); } else { - const innerSchema = (typeof currValue === 'object') ? schema.properties[key] : { dataType, format }; + const innerSchema = + typeof currValue === 'object' ? schema.properties[key] : { dataType, format }; acc[key] = parseInputBySchema(currValue, innerSchema); } return acc; }, {}); return formattedObj; - } if (schemaType === 'array') { + } + if (schemaType === 'array') { const formattedArray = input.map(item => parseInputBySchema(item, schemaItemsSchema)); return formattedArray; } diff --git a/services/blockchain-indexer/shared/utils/pos.js b/services/blockchain-indexer/shared/utils/pos.js index 59fc8e253..7ca501bf0 100644 --- a/services/blockchain-indexer/shared/utils/pos.js +++ b/services/blockchain-indexer/shared/utils/pos.js @@ -16,9 +16,7 @@ const { DB: { MySQL: { - KVStore: { - getKeyValueTable, - }, + KVStore: { getKeyValueTable }, }, }, } = require('lisk-service-framework'); @@ -28,7 +26,7 @@ const { KV_STORE_KEY } = require('../constants'); const keyValueTable = getKeyValueTable(); -const getStakeInfo = async (keyPrefix) => { +const getStakeInfo = async keyPrefix => { const [row] = await keyValueTable.getByPattern(keyPrefix); const stakeAmount = row && row.value ? row.value.toString() : '0'; diff --git a/services/blockchain-indexer/shared/utils/regex.js b/services/blockchain-indexer/shared/utils/regex.js index 982719f18..1ede1b7af 100644 --- a/services/blockchain-indexer/shared/utils/regex.js +++ b/services/blockchain-indexer/shared/utils/regex.js @@ -16,7 +16,7 @@ const ADDRESS_LISK32 = /^lsk[a-hjkm-z2-9]{38}$/; const TOKEN_ID = /[0-9A-Fa-f]{16}/; const MAINCHAIN_ID = /^\d{2}0{6}$/; -const NAME = /^[\w!@$&.]{1,20}$/; +const NAME = /^[a-z0-9!@$&_.]{1,20}$/; const PUBLIC_KEY = /^([A-Fa-f0-9]{2}){32}$/; const PRIVATE_IP_REGEX = /^(10(\.\d{1,3}){3})|((172\.(1[6-9]|2\d|3[0-1])|192\.168)(\.\d{1,3}){2})$/; diff --git a/services/blockchain-indexer/shared/utils/request.js b/services/blockchain-indexer/shared/utils/request.js index 3bc9c9d82..a9508f078 100644 --- a/services/blockchain-indexer/shared/utils/request.js +++ b/services/blockchain-indexer/shared/utils/request.js @@ -17,7 +17,7 @@ const { Utils } = require('lisk-service-framework'); let app; -const setAppContext = (h) => app = h; +const setAppContext = h => (app = h); const getAppContext = () => app; diff --git a/services/blockchain-indexer/shared/utils/requestAll.js b/services/blockchain-indexer/shared/utils/requestAll.js index e74cf9332..0a2d9bc15 100644 --- a/services/blockchain-indexer/shared/utils/requestAll.js +++ b/services/blockchain-indexer/shared/utils/requestAll.js @@ -16,23 +16,21 @@ const { Utils } = require('lisk-service-framework'); const requestAll = async (fn, method, params, limit) => { - const maxAmount = limit || 1e9; + const maxAmount = limit || Number.MAX_SAFE_INTEGER; const oneRequestLimit = params.limit || 100; - const firstRequest = await fn(method, - { - ...params, - ...{ - limit: oneRequestLimit, - offset: 0, - }, - }); + const firstRequest = await fn(method, { + ...params, + ...{ + limit: oneRequestLimit, + offset: 0, + }, + }); const totalResponse = firstRequest; if (!totalResponse.error) { if (maxAmount > oneRequestLimit) { for (let page = 1; page < Math.ceil(maxAmount / oneRequestLimit); page++) { const curOffset = oneRequestLimit * page; - /* eslint-disable-next-line no-await-in-loop */ const result = await fn(method, { ...params, ...{ @@ -51,16 +49,15 @@ const requestAll = async (fn, method, params, limit) => { // When response is an object, we should traverse the properties and merge the values. // We can safely assume that the properties would be of type array, so concatenation will // result in the whole response. If property is not an array, the latest value is kept. - Object.entries(totalResponse).forEach( - ([dataKey, dataVal]) => { - if (Array.isArray(dataVal)) { - totalResponse[dataKey].push(...result[dataKey]); - } else if (Utils.isObject(dataVal)) { - totalResponse[dataKey] = { ...totalResponse[dataKey], ...result[dataKey] }; - } else { - totalResponse[dataKey] = result[dataKey]; - } - }); + Object.entries(totalResponse).forEach(([dataKey, dataVal]) => { + if (Array.isArray(dataVal)) { + totalResponse[dataKey].push(...result[dataKey]); + } else if (Utils.isObject(dataVal)) { + totalResponse[dataKey] = { ...totalResponse[dataKey], ...result[dataKey] }; + } else { + totalResponse[dataKey] = result[dataKey]; + } + }); } } } diff --git a/services/blockchain-indexer/shared/utils/snapshot.js b/services/blockchain-indexer/shared/utils/snapshot.js index 23c9a89ed..5e8c45c76 100644 --- a/services/blockchain-indexer/shared/utils/snapshot.js +++ b/services/blockchain-indexer/shared/utils/snapshot.js @@ -37,26 +37,27 @@ const logger = Logger(); let snapshotFilePath = './data/service-snapshot.sql'; const MYSQL_ENDPOINT = config.endpoints.mysql; -const getHTTPProtocolByURL = (url) => url.startsWith('https') ? https : http; +const getHTTPProtocolByURL = url => (url.startsWith('https') ? https : http); const checkCommandAvailability = async () => { const { stdout: mysqlAvailable } = await execInShell('which mysql').catch(() => ({})); if (!mysqlAvailable) throw new NotFoundException('mysql command is unavailable in PATH.'); }; -const calculateSHA256 = async (file) => new Promise((resolve, reject) => { - const hash = crypto.createHash('sha256'); - const stream = fs.createReadStream(file); +const calculateSHA256 = async file => + new Promise((resolve, reject) => { + const hash = crypto.createHash('sha256'); + const stream = fs.createReadStream(file); - stream.on('data', (data) => hash.update(data)); - stream.on('end', () => resolve(hash.digest('hex'))); - stream.on('error', (error) => reject(error)); -}); + stream.on('data', data => hash.update(data)); + stream.on('end', () => resolve(hash.digest('hex'))); + stream.on('error', error => reject(error)); + }); // Check if the IP address is local/private -const isLocalIP = (ip) => ip === '127.0.0.1' || regex.PRIVATE_IP_REGEX.test(ip); +const isLocalIP = ip => ip === '127.0.0.1' || regex.PRIVATE_IP_REGEX.test(ip); -const validateSnapshotURL = async (snapshotURL) => { +const validateSnapshotURL = async snapshotURL => { const { hostname } = new URL(snapshotURL); // Check if the hostname is a local/private IP address or localhost @@ -71,16 +72,23 @@ const validateSnapshotURL = async (snapshotURL) => { method: 'HEAD', }; - getHTTPProtocolByURL(snapshotURL).request(snapshotURL, options, (res) => { - if (res.statusCode === 200 && res.headers['content-type'] === 'application/octet-stream') { - logger.info('Content type is valid. Downloading the snapshot file.'); - resolve(); - } else { - reject(new Error(`Invalid content type or download failed when using snapshot URL: ${snapshotURL}.`)); - } - }).on('error', (err) => { - reject(err); - }).end(); + getHTTPProtocolByURL(snapshotURL) + .request(snapshotURL, options, res => { + if (res.statusCode === 200 && res.headers['content-type'] === 'application/octet-stream') { + logger.info('Content type is valid. Downloading the snapshot file.'); + resolve(); + } else { + reject( + new Error( + `Invalid content type or download failed when using snapshot URL: ${snapshotURL}.`, + ), + ); + } + }) + .on('error', err => { + reject(err); + }) + .end(); }); }; @@ -90,71 +98,79 @@ const downloadUnzipAndVerifyChecksum = async (fileUrl, checksumUrl, filePath) => return new Promise((resolve, reject) => { // Download the checksum file logger.info('Attempting to download the snapshot checksum.'); - getHTTPProtocolByURL(checksumUrl).get(checksumUrl, (response) => { - if (response.statusCode === 200) { - let checksumData = ''; - - response.on('data', (chunk) => { - checksumData += chunk; - }); - - response.on('end', () => { - // Extract the SHA256 hash from the downloaded data - const checksum = checksumData.trim().split(' ')[0]; + getHTTPProtocolByURL(checksumUrl) + .get(checksumUrl, response => { + if (response.statusCode === 200) { + let checksumData = ''; - // Download and unzip the file - logger.info('Attempting to download the snapshot file.'); - getHTTPProtocolByURL(fileUrl).get(fileUrl, (res) => { - if (res.statusCode === 200) { - const unzip = zlib.createUnzip(); - const writeFile = fs.createWriteStream(filePath); - - res.pipe(unzip).pipe(writeFile); - - res.on('error', (err) => { - reject(new Error(err)); - }); + response.on('data', chunk => { + checksumData += chunk; + }); - writeFile.on('finish', () => { - // calculate hash from file. - calculateSHA256(filePath).then((calculatedChecksum) => { - if (calculatedChecksum === checksum) { - resolve(); + response.on('end', () => { + // Extract the SHA256 hash from the downloaded data + const checksum = checksumData.trim().split(' ')[0]; + + // Download and unzip the file + logger.info('Attempting to download the snapshot file.'); + getHTTPProtocolByURL(fileUrl) + .get(fileUrl, res => { + if (res.statusCode === 200) { + const unzip = zlib.createUnzip(); + const writeFile = fs.createWriteStream(filePath); + + res.pipe(unzip).pipe(writeFile); + + res.on('error', err => { + reject(new Error(err)); + }); + + writeFile.on('finish', () => { + // calculate hash from file. + calculateSHA256(filePath) + .then(calculatedChecksum => { + if (calculatedChecksum === checksum) { + resolve(); + } else { + reject(new Error('Checksum verification failed.')); + } + }) + .catch(err => { + reject(err); + }); + }); + + writeFile.on('error', err => { + reject(err); + }); + } else { + const errMessage = `Download failed with HTTP status code: ${res.statusCode} (${res.statusMessage}).`; + console.error(errMessage); + if (res.statusCode === 404) { + reject(new NotFoundException(errMessage)); } else { - reject(new Error('Checksum verification failed.')); + reject(new Error(errMessage)); } - }).catch(err => { - reject(err); - }); - }); - - writeFile.on('error', (err) => { - reject(err); + } + }) + .on('error', err => { + reject(new Error(err)); }); - } else { - const errMessage = `Download failed with HTTP status code: ${res.statusCode} (${res.statusMessage}).`; - console.error(errMessage); - if (res.statusCode === 404) { - reject(new NotFoundException(errMessage)); - } else { - reject(new Error(errMessage)); - } - } - }).on('error', (err) => { - reject(new Error(err)); }); - }); - } else { - logger.error(`Failed to download the checksum file. HTTP status code: ${response.statusCode} (${response.statusMessage}).`); - reject(new Error('Failed to download the checksum file.')); - } - }).on('error', (err) => { - reject(new Error(err)); - }); + } else { + logger.error( + `Failed to download the checksum file. HTTP status code: ${response.statusCode} (${response.statusMessage}).`, + ); + reject(new Error('Failed to download the checksum file.')); + } + }) + .on('error', err => { + reject(new Error(err)); + }); }); }; -const resolveSnapshotRestoreCommand = async (connEndpoint) => { +const resolveSnapshotRestoreCommand = async connEndpoint => { await checkCommandAvailability(); const [user, password] = connEndpoint.split('//')[1].split('@')[0].split(':'); const [host, port, database] = connEndpoint.split('@')[1].split(new RegExp('/|:', 'g')); @@ -177,7 +193,7 @@ const applySnapshot = async (connEndpoint = MYSQL_ENDPOINT) => { } }; -const downloadSnapshot = async (snapshotUrl) => { +const downloadSnapshot = async snapshotUrl => { const directoryPath = path.dirname(snapshotFilePath); if (!(await exists(directoryPath))) await mkdir(directoryPath, { recursive: true }); @@ -192,8 +208,7 @@ const initSnapshot = async () => { } const { chainID } = await requestConnector('getNetworkStatus'); - const network = config.networks.LISK - .find(networkInfo => networkInfo.chainID === chainID); + const network = config.networks.LISK.find(networkInfo => networkInfo.chainID === chainID); snapshotFilePath = `./data/${network.name}/service-snapshot.sql`; let { snapshotUrl } = network; @@ -202,12 +217,16 @@ const initSnapshot = async () => { // Override if custom snapshot URL is specified snapshotUrl = config.snapshot.url; } else if (!snapshotUrl) { - logger.warn(`Cannot apply snapshot. Snapshot URL for network (${network.name}) is unavailable.\nTry updating the config file or setting the 'INDEX_SNAPSHOT_URL' environment variable.`); + logger.warn( + `Cannot apply snapshot. Snapshot URL for network (${network.name}) is unavailable.\nTry updating the config file or setting the 'INDEX_SNAPSHOT_URL' environment variable.`, + ); return; } if (!snapshotUrl.startsWith('https') && !config.snapshot.allowInsecureHttp) { - throw new Error(`Please consider using a secured source (HTTPS). To continue to download snapshot from ${snapshotUrl}, set 'ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP' env variable.`); + throw new Error( + `Please consider using a secured source (HTTPS). To continue to download snapshot from ${snapshotUrl}, set 'ENABLE_SNAPSHOT_ALLOW_INSECURE_HTTP' env variable.`, + ); } await downloadSnapshot(snapshotUrl); diff --git a/services/blockchain-indexer/shared/utils/token.js b/services/blockchain-indexer/shared/utils/token.js index a506f092f..2d2510752 100644 --- a/services/blockchain-indexer/shared/utils/token.js +++ b/services/blockchain-indexer/shared/utils/token.js @@ -16,9 +16,7 @@ const { DB: { MySQL: { - KVStore: { - getKeyValueTable, - }, + KVStore: { getKeyValueTable }, }, }, } = require('lisk-service-framework'); @@ -28,9 +26,7 @@ const { KV_STORE_KEY } = require('../constants'); const keyValueTable = getKeyValueTable(); const getTotalLocked = async () => { - const lockAmountsInfo = await keyValueTable.getByPattern( - KV_STORE_KEY.PREFIX.TOTAL_LOCKED, - ); + const lockAmountsInfo = await keyValueTable.getByPattern(KV_STORE_KEY.PREFIX.TOTAL_LOCKED); const totalLockedResponse = lockAmountsInfo.map(({ key, value }) => { const tokenID = key.split(KV_STORE_KEY.PREFIX.TOTAL_LOCKED).pop(); diff --git a/services/blockchain-indexer/shared/utils/transactions.js b/services/blockchain-indexer/shared/utils/transactions.js index afa478d8c..7355bbae2 100644 --- a/services/blockchain-indexer/shared/utils/transactions.js +++ b/services/blockchain-indexer/shared/utils/transactions.js @@ -14,7 +14,7 @@ * */ const { parseToJSONCompatObj } = require('./parser'); -const { TRANSACTION_STATUS, EVENT } = require('../constants'); +const { TRANSACTION_STATUS, EVENT, EVENT_TOPIC_PREFIX } = require('../constants'); const normalizeTransaction = async tx => { tx.moduleCommand = `${tx.module}:${tx.command}`; @@ -24,12 +24,13 @@ const normalizeTransaction = async tx => { const getTransactionExecutionStatus = (tx, events) => { const expectedEventName = `${tx.module}:${EVENT.COMMAND_EXECUTION_RESULT}`; const commandExecResultEvents = events.filter(e => `${e.module}:${e.name}` === expectedEventName); - const txExecResultEvent = commandExecResultEvents.find(e => e.topics.includes(tx.id)); - if (!txExecResultEvent) throw Error(`Event unavailable to determine execution status for transaction: ${tx.id}.`); + const txExecResultEvent = commandExecResultEvents.find( + e => e.topics.includes(EVENT_TOPIC_PREFIX.TX_ID.concat(tx.id)) || e.topics.includes(tx.id), + ); + if (!txExecResultEvent) + throw Error(`Event unavailable to determine execution status for transaction: ${tx.id}.`); - return txExecResultEvent.data.success - ? TRANSACTION_STATUS.SUCCESSFUL - : TRANSACTION_STATUS.FAILED; + return txExecResultEvent.data.success ? TRANSACTION_STATUS.SUCCESSFUL : TRANSACTION_STATUS.FAILED; }; module.exports = { diff --git a/services/blockchain-indexer/shared/utils/validator.js b/services/blockchain-indexer/shared/utils/validator.js index 1de75cffc..37e5e5787 100644 --- a/services/blockchain-indexer/shared/utils/validator.js +++ b/services/blockchain-indexer/shared/utils/validator.js @@ -15,7 +15,9 @@ */ const { CacheRedis, - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../config'); @@ -27,7 +29,7 @@ const validatorCache = CacheRedis('validator', config.endpoints.cache); const getAccountsTable = () => getTableInstance(accountsTableSchema, MYSQL_ENDPOINT); -const getNameByAddress = async (address) => { +const getNameByAddress = async address => { if (address) { const name = await validatorCache.get(address); if (name) { diff --git a/services/blockchain-indexer/tests/constants/endpoints.js b/services/blockchain-indexer/tests/constants/endpoints.js index 8daf157ca..62c6b0630 100644 --- a/services/blockchain-indexer/tests/constants/endpoints.js +++ b/services/blockchain-indexer/tests/constants/endpoints.js @@ -89,9 +89,7 @@ const engineEndpoints = [ }, ]; -const allRegisteredEndpoints = engineEndpoints - .map(e => e.name) - .concat(registeredEndpoints); +const allRegisteredEndpoints = engineEndpoints.map(e => e.name).concat(registeredEndpoints); module.exports = { registeredEndpoints, diff --git a/services/blockchain-indexer/tests/constants/events.js b/services/blockchain-indexer/tests/constants/events.js index f5ee790a8..e7877380f 100644 --- a/services/blockchain-indexer/tests/constants/events.js +++ b/services/blockchain-indexer/tests/constants/events.js @@ -16,7 +16,8 @@ const validTx = { module: 'token', command: 'transfer', - params: '0a0804000000000000001080c8afa0251a1402604d9e57a39772fa12f2a860ecf6c1e9cae911221054657374207472616e73616374696f6e', + params: + '0a0804000000000000001080c8afa0251a1402604d9e57a39772fa12f2a860ecf6c1e9cae911221054657374207472616e73616374696f6e', nonce: '0', fee: '100000000', senderPublicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', @@ -34,9 +35,7 @@ const eventsForValidTx = [ data: { success: true, }, - topics: [ - '3187fcfe95e11849ecd1c31c0e497512eee86a8b32e5a96613c4356fb036b486', - ], + topics: ['3187fcfe95e11849ecd1c31c0e497512eee86a8b32e5a96613c4356fb036b486'], index: 7, block: { id: 'ac558649b4c06ef300db7dd86612c1f4f8e3011c4c632ba8a8a8eaa1c54e7993', @@ -54,9 +53,7 @@ const eventsWithFailStatus = [ data: { success: false, }, - topics: [ - '3187fcfe95e11849ecd1c31c0e497512eee86a8b32e5a96613c4356fb036b486', - ], + topics: ['3187fcfe95e11849ecd1c31c0e497512eee86a8b32e5a96613c4356fb036b486'], index: 7, block: { id: 'ac558649b4c06ef300db7dd86612c1f4f8e3011c4c632ba8a8a8eaa1c54e7993', @@ -95,10 +92,7 @@ const eventsIncludingTokenModule = [ index: 1, module: 'token', name: 'initializeEscrowAccount', - topics: [ - '76d4488029f123f8754f5f8182aba8574638ba3ac40a5d4d03c7ff7d2aa31472', - '04000001', - ], + topics: ['76d4488029f123f8754f5f8182aba8574638ba3ac40a5d4d03c7ff7d2aa31472', '04000001'], height: 8, id: '07b9af818f25f7671411e2e7939c6db60474f3dd04a2e1c52ba073d39a8ac58b', }, @@ -116,10 +110,7 @@ const eventsIncludingTokenModule = [ index: 2, module: 'interoperability', name: 'chainAccountUpdated', - topics: [ - '76d4488029f123f8754f5f8182aba8574638ba3ac40a5d4d03c7ff7d2aa31472', - '04000001', - ], + topics: ['76d4488029f123f8754f5f8182aba8574638ba3ac40a5d4d03c7ff7d2aa31472', '04000001'], height: 8, id: 'be9f3fd78c455be02dbdcb2c80d333730983b369f4e087486e139dc3a0a6261d', }, @@ -227,9 +218,7 @@ const eventsIncludingTokenModule = [ index: 8, module: 'interoperability', name: 'commandExecutionResult', - topics: [ - '76d4488029f123f8754f5f8182aba8574638ba3ac40a5d4d03c7ff7d2aa31472', - ], + topics: ['76d4488029f123f8754f5f8182aba8574638ba3ac40a5d4d03c7ff7d2aa31472'], height: 8, id: '6296d435e43aaa2568b9cd6ae17098790053ffce78e7699e179d5c1295c1685b', }, @@ -241,10 +230,7 @@ const eventsIncludingTokenModule = [ index: 9, module: 'dynamicReward', name: 'rewardMinted', - topics: [ - '03', - 'lsk6q3eq5qnahyytpywoxkgarzh8gck396wmd3yeu', - ], + topics: ['03', 'lsk6q3eq5qnahyytpywoxkgarzh8gck396wmd3yeu'], height: 8, id: '4fe3de569aa98e98a7fb42435e4a8c053b2ef79ed120f0be332b6718a26f8e26', }, diff --git a/services/blockchain-indexer/tests/constants/metadata.js b/services/blockchain-indexer/tests/constants/metadata.js index fc4aae0a2..036c36801 100644 --- a/services/blockchain-indexer/tests/constants/metadata.js +++ b/services/blockchain-indexer/tests/constants/metadata.js @@ -61,12 +61,7 @@ const metadata = { fieldNumber: 4, }, }, - required: [ - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - 'signatures', - ], + required: ['numberOfSignatures', 'mandatoryKeys', 'optionalKeys', 'signatures'], }, }, ], @@ -76,11 +71,7 @@ const metadata = { data: { $id: '/auth/events/multisigRegData', type: 'object', - required: [ - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - ], + required: ['numberOfSignatures', 'mandatoryKeys', 'optionalKeys'], properties: { numberOfSignatures: { dataType: 'uint32', @@ -198,12 +189,7 @@ const metadata = { fieldNumber: 4, }, }, - required: [ - 'nonce', - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - ], + required: ['nonce', 'numberOfSignatures', 'mandatoryKeys', 'optionalKeys'], }, }, ], @@ -219,9 +205,7 @@ const metadata = { format: 'lisk32', }, }, - required: [ - 'address', - ], + required: ['address'], }, response: { $id: '/auth/account', @@ -260,12 +244,7 @@ const metadata = { fieldNumber: 4, }, }, - required: [ - 'nonce', - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - ], + required: ['nonce', 'numberOfSignatures', 'mandatoryKeys', 'optionalKeys'], }, }, { @@ -279,9 +258,7 @@ const metadata = { format: 'hex', }, }, - required: [ - 'transaction', - ], + required: ['transaction'], }, response: { $id: '/auth/verifyResult', @@ -291,9 +268,7 @@ const metadata = { type: 'boolean', }, }, - required: [ - 'verified', - ], + required: ['verified'], }, }, { @@ -307,9 +282,7 @@ const metadata = { format: 'hex', }, }, - required: [ - 'transaction', - ], + required: ['transaction'], }, response: { $id: '/auth/verifyResult', @@ -319,9 +292,7 @@ const metadata = { type: 'boolean', }, }, - required: [ - 'verified', - ], + required: ['verified'], }, }, { @@ -329,13 +300,7 @@ const metadata = { response: { $id: '/auth/command/regMultisigMsg', type: 'object', - required: [ - 'address', - 'nonce', - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - ], + required: ['address', 'nonce', 'numberOfSignatures', 'mandatoryKeys', 'optionalKeys'], properties: { address: { dataType: 'bytes', @@ -376,10 +341,7 @@ const metadata = { name: 'sortMultisignatureGroup', request: { $id: '/auth/command/sortMultisig', - required: [ - 'mandatory', - 'optional', - ], + required: ['mandatory', 'optional'], type: 'object', properties: { mandatory: { @@ -464,11 +426,7 @@ const metadata = { fieldNumber: 3, }, }, - required: [ - 'mandatoryKeys', - 'optionalKeys', - 'signatures', - ], + required: ['mandatoryKeys', 'optionalKeys', 'signatures'], }, }, { @@ -481,9 +439,7 @@ const metadata = { type: 'string', }, }, - required: [ - 'tag', - ], + required: ['tag'], }, }, ], @@ -493,19 +449,14 @@ const metadata = { data: { $id: '/auth/module/genesis', type: 'object', - required: [ - 'authDataSubstore', - ], + required: ['authDataSubstore'], properties: { authDataSubstore: { type: 'array', fieldNumber: 1, items: { type: 'object', - required: [ - 'address', - 'authAccount', - ], + required: ['address', 'authAccount'], properties: { address: { dataType: 'bytes', @@ -514,12 +465,7 @@ const metadata = { authAccount: { type: 'object', fieldNumber: 2, - required: [ - 'nonce', - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - ], + required: ['nonce', 'numberOfSignatures', 'mandatoryKeys', 'optionalKeys'], properties: { nonce: { dataType: 'uint64', @@ -558,6 +504,5055 @@ const metadata = { ], name: 'auth', }, + { + commands: [], + events: [ + { + name: 'rewardMinted', + data: { + $id: '/reward/events/rewardMintedData', + type: 'object', + required: ['amount', 'reduction'], + properties: { + amount: { + dataType: 'uint64', + fieldNumber: 1, + }, + reduction: { + dataType: 'uint32', + fieldNumber: 2, + }, + }, + }, + }, + ], + stores: [ + { + key: '054253ec0000', + data: { + $id: '/dynamicRewards/endOfRoundTimestamp', + type: 'object', + properties: { + timestamp: { + dataType: 'uint32', + fieldNumber: 1, + }, + }, + required: ['timestamp'], + }, + }, + ], + endpoints: [ + { + name: 'getDefaultRewardAtHeight', + request: { + $id: '/reward/endpoint/height', + type: 'object', + required: ['height'], + properties: { + height: { + type: 'integer', + format: 'uint32', + }, + }, + }, + response: { + $id: '/reward/endpoint/getDefaultRewardAtHeightResponse', + type: 'object', + required: ['reward'], + properties: { + reward: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + { + name: 'getAnnualInflation', + request: { + $id: '/reward/endpoint/height', + type: 'object', + required: ['height'], + properties: { + height: { + type: 'integer', + format: 'uint32', + }, + }, + }, + response: { + $id: '/reward/endpoint/getAnnualInflationResponse', + type: 'object', + required: ['tokenID', 'rate'], + properties: { + tokenID: { + type: 'string', + format: 'hex', + }, + rate: { + type: 'string', + format: 'uint64', + minLength: 16, + maxLength: 16, + }, + }, + }, + }, + { + name: 'getRewardTokenID', + response: { + $id: '/reward/endpoint/getRewardTokenID', + type: 'object', + required: ['tokenID'], + properties: { + tokenID: { + type: 'string', + format: 'hex', + minLength: 16, + maxLength: 16, + }, + }, + }, + }, + { + name: 'getExpectedValidatorRewards', + request: { + $id: 'modules/pos/endpoint/getExpectedSharedRewardsRequest', + type: 'object', + required: ['validatorAddress', 'validatorReward', 'stake'], + properties: { + validatorAddress: { + type: 'string', + format: 'lisk32', + }, + validatorReward: { + type: 'string', + format: 'uint64', + }, + stake: { + type: 'string', + format: 'uint64', + }, + }, + }, + response: { + $id: 'modules/pos/endpoint/getExpectedSharedRewardsResponse', + type: 'object', + required: ['reward'], + properties: { + reward: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + ], + assets: [], + name: 'dynamicReward', + }, + { + commands: [], + events: [ + { + name: 'generatorFeeProcessed', + data: { + $id: '/fee/events/generatorFeeProcessed', + type: 'object', + required: ['senderAddress', 'generatorAddress', 'burntAmount', 'generatorAmount'], + properties: { + senderAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + generatorAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 2, + }, + burntAmount: { + dataType: 'uint64', + fieldNumber: 3, + }, + generatorAmount: { + dataType: 'uint64', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'relayerFeeProcessed', + data: { + $id: '/fee/events/relayerFeeProcessed', + type: 'object', + required: ['ccmID', 'relayerAddress', 'burntAmount', 'relayerAmount'], + properties: { + ccmID: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + relayerAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 2, + }, + burntAmount: { + dataType: 'uint64', + fieldNumber: 3, + }, + relayerAmount: { + dataType: 'uint64', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'insufficientFee', + data: { + $id: '/lisk/empty', + type: 'object', + properties: {}, + }, + }, + ], + stores: [], + endpoints: [ + { + name: 'getMinFeePerByte', + response: { + $id: '/fee/endpoint/getMinFeePerByteResponse', + type: 'object', + properties: { + minFeePerByte: { + type: 'integer', + format: 'uint32', + }, + }, + required: ['minFeePerByte'], + }, + }, + { + name: 'getFeeTokenID', + response: { + $id: '/fee/endpoint/getFeeTokenIDResponseSchema', + type: 'object', + properties: { + feeTokenID: { + type: 'string', + format: 'hex', + }, + }, + required: ['feeTokenID'], + }, + }, + ], + assets: [], + name: 'fee', + }, + { + commands: [ + { + name: 'submitMainchainCrossChainUpdate', + params: { + $id: '/modules/interoperability/ccu', + type: 'object', + required: [ + 'sendingChainID', + 'certificate', + 'activeValidatorsUpdate', + 'certificateThreshold', + 'inboxUpdate', + ], + properties: { + sendingChainID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 4, + maxLength: 4, + }, + certificate: { + dataType: 'bytes', + fieldNumber: 2, + }, + activeValidatorsUpdate: { + type: 'object', + fieldNumber: 3, + required: ['blsKeysUpdate', 'bftWeightsUpdate', 'bftWeightsUpdateBitmap'], + properties: { + blsKeysUpdate: { + type: 'array', + fieldNumber: 1, + items: { + dataType: 'bytes', + minLength: 48, + maxLength: 48, + }, + }, + bftWeightsUpdate: { + type: 'array', + fieldNumber: 2, + items: { + dataType: 'uint64', + }, + }, + bftWeightsUpdateBitmap: { + dataType: 'bytes', + fieldNumber: 3, + }, + }, + }, + certificateThreshold: { + dataType: 'uint64', + fieldNumber: 4, + }, + inboxUpdate: { + type: 'object', + fieldNumber: 5, + required: ['crossChainMessages', 'messageWitnessHashes', 'outboxRootWitness'], + properties: { + crossChainMessages: { + type: 'array', + fieldNumber: 1, + items: { + dataType: 'bytes', + }, + }, + messageWitnessHashes: { + type: 'array', + fieldNumber: 2, + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + }, + outboxRootWitness: { + type: 'object', + fieldNumber: 3, + required: ['bitmap', 'siblingHashes'], + properties: { + bitmap: { + dataType: 'bytes', + fieldNumber: 1, + }, + siblingHashes: { + type: 'array', + fieldNumber: 2, + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: 'initializeMessageRecovery', + params: { + $id: '/modules/interoperability/mainchain/messageRecoveryInitialization', + type: 'object', + required: ['chainID', 'channel', 'bitmap', 'siblingHashes'], + properties: { + chainID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 4, + maxLength: 4, + }, + channel: { + dataType: 'bytes', + fieldNumber: 2, + }, + bitmap: { + dataType: 'bytes', + fieldNumber: 3, + }, + siblingHashes: { + type: 'array', + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'recoverMessage', + params: { + $id: '/modules/interoperability/mainchain/messageRecovery', + type: 'object', + required: ['chainID', 'crossChainMessages', 'idxs', 'siblingHashes'], + properties: { + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + crossChainMessages: { + type: 'array', + items: { + dataType: 'bytes', + }, + fieldNumber: 2, + }, + idxs: { + type: 'array', + items: { + dataType: 'uint32', + }, + fieldNumber: 3, + }, + siblingHashes: { + type: 'array', + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'registerSidechain', + params: { + $id: '/modules/interoperability/mainchain/sidechainRegistration', + type: 'object', + required: ['chainID', 'name', 'sidechainValidators', 'sidechainCertificateThreshold'], + properties: { + chainID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 4, + maxLength: 4, + }, + name: { + dataType: 'string', + fieldNumber: 2, + minLength: 1, + maxLength: 32, + }, + sidechainValidators: { + type: 'array', + items: { + type: 'object', + required: ['blsKey', 'bftWeight'], + properties: { + blsKey: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 48, + maxLength: 48, + }, + bftWeight: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + minItems: 1, + fieldNumber: 3, + maxItems: 199, + }, + sidechainCertificateThreshold: { + dataType: 'uint64', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'recoverState', + params: { + $id: '/modules/interoperability/mainchain/commands/stateRecovery', + type: 'object', + required: ['chainID', 'module', 'storeEntries', 'siblingHashes'], + properties: { + chainID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 4, + maxLength: 4, + }, + module: { + dataType: 'string', + fieldNumber: 2, + minLength: 1, + maxLength: 32, + }, + storeEntries: { + type: 'array', + fieldNumber: 3, + items: { + type: 'object', + properties: { + substorePrefix: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 2, + maxLength: 2, + }, + storeKey: { + dataType: 'bytes', + fieldNumber: 2, + }, + storeValue: { + dataType: 'bytes', + fieldNumber: 3, + }, + bitmap: { + dataType: 'bytes', + fieldNumber: 4, + }, + }, + required: ['substorePrefix', 'storeKey', 'storeValue', 'bitmap'], + }, + }, + siblingHashes: { + type: 'array', + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'terminateSidechainForLiveness', + params: { + $id: '/modules/interoperability/mainchain/terminateSidechainForLiveness', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 4, + maxLength: 4, + }, + }, + }, + }, + ], + events: [ + { + name: 'chainAccountUpdated', + data: { + $id: '/modules/interoperability/chainData', + type: 'object', + required: ['name', 'lastCertificate', 'status'], + properties: { + name: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + lastCertificate: { + type: 'object', + fieldNumber: 2, + required: ['height', 'timestamp', 'stateRoot', 'validatorsHash'], + properties: { + height: { + dataType: 'uint32', + fieldNumber: 1, + }, + timestamp: { + dataType: 'uint32', + fieldNumber: 2, + }, + stateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + validatorsHash: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 4, + }, + }, + }, + status: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'ccmProcessed', + data: { + $id: '/interoperability/events/ccmProcessed', + type: 'object', + required: ['ccm', 'result', 'code'], + properties: { + ccm: { + fieldNumber: 1, + type: 'object', + required: [ + 'module', + 'crossChainCommand', + 'nonce', + 'fee', + 'sendingChainID', + 'receivingChainID', + 'params', + 'status', + ], + properties: { + module: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + crossChainCommand: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 2, + }, + nonce: { + dataType: 'uint64', + fieldNumber: 3, + }, + fee: { + dataType: 'uint64', + fieldNumber: 4, + }, + sendingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 5, + }, + receivingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 6, + }, + params: { + dataType: 'bytes', + fieldNumber: 7, + }, + status: { + dataType: 'uint32', + fieldNumber: 8, + }, + }, + }, + result: { + dataType: 'uint32', + fieldNumber: 2, + }, + code: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'ccmSendSuccess', + data: { + $id: '/interoperability/events/ccmSendSuccess', + type: 'object', + required: ['ccm'], + properties: { + ccm: { + fieldNumber: 1, + type: 'object', + required: [ + 'module', + 'crossChainCommand', + 'nonce', + 'fee', + 'sendingChainID', + 'receivingChainID', + 'params', + 'status', + ], + properties: { + module: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + crossChainCommand: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 2, + }, + nonce: { + dataType: 'uint64', + fieldNumber: 3, + }, + fee: { + dataType: 'uint64', + fieldNumber: 4, + }, + sendingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 5, + }, + receivingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 6, + }, + params: { + dataType: 'bytes', + fieldNumber: 7, + }, + status: { + dataType: 'uint32', + fieldNumber: 8, + }, + }, + }, + }, + }, + }, + { + name: 'ccmSentFailed', + data: { + $id: '/interoperability/events/ccmSendFail', + type: 'object', + required: ['ccm', 'code'], + properties: { + ccm: { + $id: '/modules/interoperability/ccm', + type: 'object', + required: [ + 'module', + 'crossChainCommand', + 'nonce', + 'fee', + 'sendingChainID', + 'receivingChainID', + 'params', + 'status', + ], + properties: { + module: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + crossChainCommand: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 2, + }, + nonce: { + dataType: 'uint64', + fieldNumber: 3, + }, + fee: { + dataType: 'uint64', + fieldNumber: 4, + }, + sendingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 5, + }, + receivingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 6, + }, + params: { + dataType: 'bytes', + fieldNumber: 7, + }, + status: { + dataType: 'uint32', + fieldNumber: 8, + }, + }, + fieldNumber: 1, + }, + code: { + dataType: 'uint32', + fieldNumber: 2, + }, + }, + }, + }, + { + name: 'invalidRegistrationSignature', + data: { + $id: '/lisk/empty', + type: 'object', + properties: {}, + }, + }, + { + name: 'terminatedStateCreated', + data: { + $id: '/modules/interoperability/terminatedState', + type: 'object', + required: ['stateRoot', 'mainchainStateRoot', 'initialized'], + properties: { + stateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + mainchainStateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 2, + }, + initialized: { + dataType: 'boolean', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'terminatedOutboxCreated', + data: { + $id: '/modules/interoperability/terminatedOutbox', + type: 'object', + required: ['outboxRoot', 'outboxSize', 'partnerChainInboxSize'], + properties: { + outboxRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + outboxSize: { + dataType: 'uint32', + fieldNumber: 2, + }, + partnerChainInboxSize: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'invalidSMTVerification', + data: { + $id: '/lisk/empty', + type: 'object', + properties: {}, + }, + }, + { + name: 'invalidRMTVerification', + data: { + $id: '/lisk/empty', + type: 'object', + properties: {}, + }, + }, + { + name: 'invalidCertificateSignature', + data: { + $id: '/lisk/empty', + type: 'object', + properties: {}, + }, + }, + ], + stores: [ + { + key: '83ed0d250000', + data: { + $id: '/modules/interoperability/outbox', + type: 'object', + required: ['root'], + properties: { + root: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + }, + }, + }, + { + key: '83ed0d258000', + data: { + $id: '/modules/interoperability/chainData', + type: 'object', + required: ['name', 'lastCertificate', 'status'], + properties: { + name: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + lastCertificate: { + type: 'object', + fieldNumber: 2, + required: ['height', 'timestamp', 'stateRoot', 'validatorsHash'], + properties: { + height: { + dataType: 'uint32', + fieldNumber: 1, + }, + timestamp: { + dataType: 'uint32', + fieldNumber: 2, + }, + stateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + validatorsHash: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 4, + }, + }, + }, + status: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + { + key: '83ed0d25b000', + data: { + $id: '/modules/interoperability/ownChainAccount', + type: 'object', + required: ['name', 'chainID', 'nonce'], + properties: { + name: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 2, + }, + nonce: { + dataType: 'uint64', + fieldNumber: 3, + }, + }, + }, + }, + { + key: '83ed0d25a000', + data: { + $id: '/modules/interoperability/channel', + type: 'object', + required: [ + 'inbox', + 'outbox', + 'partnerChainOutboxRoot', + 'messageFeeTokenID', + 'minReturnFeePerByte', + ], + properties: { + inbox: { + type: 'object', + fieldNumber: 1, + required: ['appendPath', 'size', 'root'], + properties: { + appendPath: { + type: 'array', + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + fieldNumber: 1, + }, + size: { + dataType: 'uint32', + fieldNumber: 2, + }, + root: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + }, + }, + outbox: { + type: 'object', + fieldNumber: 2, + required: ['appendPath', 'size', 'root'], + properties: { + appendPath: { + type: 'array', + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + fieldNumber: 1, + }, + size: { + dataType: 'uint32', + fieldNumber: 2, + }, + root: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + }, + }, + partnerChainOutboxRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + messageFeeTokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 4, + }, + minReturnFeePerByte: { + dataType: 'uint64', + fieldNumber: 5, + }, + }, + }, + }, + { + key: '83ed0d259000', + data: { + $id: '/modules/interoperability/chainValidators', + type: 'object', + required: ['activeValidators', 'certificateThreshold'], + properties: { + activeValidators: { + type: 'array', + fieldNumber: 1, + minItems: 1, + maxItems: 199, + items: { + type: 'object', + required: ['blsKey', 'bftWeight'], + properties: { + blsKey: { + dataType: 'bytes', + minLength: 48, + maxLength: 48, + fieldNumber: 1, + }, + bftWeight: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + certificateThreshold: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + { + key: '83ed0d25c000', + data: { + $id: '/modules/interoperability/terminatedState', + type: 'object', + required: ['stateRoot', 'mainchainStateRoot', 'initialized'], + properties: { + stateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + mainchainStateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 2, + }, + initialized: { + dataType: 'boolean', + fieldNumber: 3, + }, + }, + }, + }, + { + key: '83ed0d25d000', + data: { + $id: '/modules/interoperability/terminatedOutbox', + type: 'object', + required: ['outboxRoot', 'outboxSize', 'partnerChainInboxSize'], + properties: { + outboxRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + outboxSize: { + dataType: 'uint32', + fieldNumber: 2, + }, + partnerChainInboxSize: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + { + key: '83ed0d25e000', + data: { + $id: '/modules/interoperability/chainId', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + }, + }, + }, + ], + endpoints: [ + { + name: 'getChainAccount', + request: { + $id: '/modules/interoperability/endpoint/getChainAccountRequest', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + type: 'string', + format: 'hex', + minLength: 8, + maxLength: 8, + }, + }, + }, + response: { + $id: '/modules/interoperability/chainData', + type: 'object', + required: ['name', 'lastCertificate', 'status'], + properties: { + name: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + lastCertificate: { + type: 'object', + fieldNumber: 2, + required: ['height', 'timestamp', 'stateRoot', 'validatorsHash'], + properties: { + height: { + dataType: 'uint32', + fieldNumber: 1, + }, + timestamp: { + dataType: 'uint32', + fieldNumber: 2, + }, + stateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + validatorsHash: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 4, + }, + }, + }, + status: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'getAllChainAccounts', + request: { + $id: '/modules/interoperability/endpoint/getChainAccountRequest', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + type: 'string', + format: 'hex', + minLength: 8, + maxLength: 8, + }, + }, + }, + response: { + $id: '/modules/interoperability/allChainAccounts', + type: 'object', + required: ['chains'], + properties: { + chains: { + type: 'array', + items: { + type: 'object', + required: ['name', 'lastCertificate', 'status'], + properties: { + name: { + dataType: 'string', + fieldNumber: 1, + }, + lastCertificate: { + type: 'object', + fieldNumber: 2, + required: ['height', 'timestamp', 'stateRoot', 'validatorsHash'], + properties: { + height: { + dataType: 'uint32', + fieldNumber: 1, + }, + timestamp: { + dataType: 'uint32', + fieldNumber: 2, + }, + stateRoot: { + dataType: 'string', + format: 'hex', + fieldNumber: 3, + }, + validatorsHash: { + dataType: 'string', + format: 'hex', + fieldNumber: 4, + }, + }, + }, + status: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + }, + }, + }, + { + name: 'getChannel', + request: { + $id: '/modules/interoperability/endpoint/getChainAccountRequest', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + type: 'string', + format: 'hex', + minLength: 8, + maxLength: 8, + }, + }, + }, + response: { + $id: '/modules/interoperability/channel', + type: 'object', + required: [ + 'inbox', + 'outbox', + 'partnerChainOutboxRoot', + 'messageFeeTokenID', + 'minReturnFeePerByte', + ], + properties: { + inbox: { + type: 'object', + fieldNumber: 1, + required: ['appendPath', 'size', 'root'], + properties: { + appendPath: { + type: 'array', + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + fieldNumber: 1, + }, + size: { + dataType: 'uint32', + fieldNumber: 2, + }, + root: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + }, + }, + outbox: { + type: 'object', + fieldNumber: 2, + required: ['appendPath', 'size', 'root'], + properties: { + appendPath: { + type: 'array', + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + fieldNumber: 1, + }, + size: { + dataType: 'uint32', + fieldNumber: 2, + }, + root: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + }, + }, + partnerChainOutboxRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + messageFeeTokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 4, + }, + minReturnFeePerByte: { + dataType: 'uint64', + fieldNumber: 5, + }, + }, + }, + }, + { + name: 'getOwnChainAccount', + response: { + $id: '/modules/interoperability/ownChainAccount', + type: 'object', + required: ['name', 'chainID', 'nonce'], + properties: { + name: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 2, + }, + nonce: { + dataType: 'uint64', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'getTerminatedStateAccount', + request: { + $id: '/modules/interoperability/endpoint/getChainAccountRequest', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + type: 'string', + format: 'hex', + minLength: 8, + maxLength: 8, + }, + }, + }, + response: { + $id: '/modules/interoperability/terminatedState', + type: 'object', + required: ['stateRoot', 'mainchainStateRoot', 'initialized'], + properties: { + stateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + mainchainStateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 2, + }, + initialized: { + dataType: 'boolean', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'getTerminatedOutboxAccount', + request: { + $id: '/modules/interoperability/endpoint/getChainAccountRequest', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + type: 'string', + format: 'hex', + minLength: 8, + maxLength: 8, + }, + }, + }, + response: { + $id: '/modules/interoperability/terminatedOutbox', + type: 'object', + required: ['outboxRoot', 'outboxSize', 'partnerChainInboxSize'], + properties: { + outboxRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + outboxSize: { + dataType: 'uint32', + fieldNumber: 2, + }, + partnerChainInboxSize: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'getRegistrationFee', + response: { + $id: '/modules/interoperability/mainchain/registrationFee', + type: 'object', + required: ['registrationFee'], + properties: { + registrationFee: { + type: 'string', + }, + }, + }, + }, + { + name: 'getMinimumMessageFee', + response: { + $id: '/modules/interoperability/mainchain/minimumMessageFeeResponse', + type: 'object', + required: ['fee'], + properties: { + fee: { + type: 'string', + }, + }, + }, + }, + { + name: 'getChainValidators', + request: { + $id: '/modules/interoperability/endpoint/getChainAccountRequest', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + type: 'string', + format: 'hex', + minLength: 8, + maxLength: 8, + }, + }, + }, + response: { + $id: '/modules/interoperability/validatorsHashInput', + type: 'object', + required: ['activeValidators', 'certificateThreshold'], + properties: { + activeValidators: { + type: 'array', + fieldNumber: 1, + items: { + type: 'object', + required: ['blsKey', 'bftWeight'], + properties: { + blsKey: { + dataType: 'bytes', + fieldNumber: 1, + }, + bftWeight: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + certificateThreshold: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + { + name: 'isChainIDAvailable', + request: { + $id: '/modules/interoperability/endpoint/getChainAccountRequest', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + type: 'string', + format: 'hex', + minLength: 8, + maxLength: 8, + }, + }, + }, + response: { + $id: '/modules/interoperability/endpoint/isChainIDAvailableResponseSchema', + type: 'object', + required: ['result'], + properties: { + result: { + type: 'boolean', + }, + }, + }, + }, + { + name: 'isChainNameAvailable', + request: { + $id: '/modules/interoperability/endpoint/isChainNameAvailableRequest', + type: 'object', + required: ['name'], + properties: { + name: { + dataType: 'string', + fieldNumber: 1, + minLength: 1, + maxLength: 32, + }, + }, + }, + response: { + $id: '/modules/interoperability/endpoint/isChainNameAvailableResponseSchema', + type: 'object', + required: ['result'], + properties: { + result: { + type: 'boolean', + }, + }, + }, + }, + { + name: 'getCCMSchema', + response: { + $id: '/modules/interoperability/endpoint/getCCMSchemaResponseSchema', + type: 'object', + required: ['schema'], + properties: { + schema: { + $id: '/modules/interoperability/ccm', + type: 'object', + required: [ + 'module', + 'crossChainCommand', + 'nonce', + 'fee', + 'sendingChainID', + 'receivingChainID', + 'params', + 'status', + ], + properties: { + module: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + crossChainCommand: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 2, + }, + nonce: { + dataType: 'uint64', + fieldNumber: 3, + }, + fee: { + dataType: 'uint64', + fieldNumber: 4, + }, + sendingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 5, + }, + receivingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 6, + }, + params: { + dataType: 'bytes', + fieldNumber: 7, + }, + status: { + dataType: 'uint32', + fieldNumber: 8, + }, + }, + }, + }, + }, + }, + ], + assets: [ + { + version: 0, + data: { + $id: '/interoperability/module/genesis', + type: 'object', + required: [ + 'ownChainName', + 'ownChainNonce', + 'chainInfos', + 'terminatedStateAccounts', + 'terminatedOutboxAccounts', + ], + properties: { + ownChainName: { + dataType: 'string', + maxLength: 32, + fieldNumber: 1, + }, + ownChainNonce: { + dataType: 'uint64', + fieldNumber: 2, + }, + chainInfos: { + type: 'array', + fieldNumber: 3, + items: { + type: 'object', + required: ['chainID', 'chainData', 'channelData', 'chainValidators'], + properties: { + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + chainData: { + $id: '/modules/interoperability/chainData', + type: 'object', + required: ['name', 'lastCertificate', 'status'], + properties: { + name: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + lastCertificate: { + type: 'object', + fieldNumber: 2, + required: ['height', 'timestamp', 'stateRoot', 'validatorsHash'], + properties: { + height: { + dataType: 'uint32', + fieldNumber: 1, + }, + timestamp: { + dataType: 'uint32', + fieldNumber: 2, + }, + stateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + validatorsHash: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 4, + }, + }, + }, + status: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + fieldNumber: 2, + }, + channelData: { + $id: '/modules/interoperability/channel', + type: 'object', + required: [ + 'inbox', + 'outbox', + 'partnerChainOutboxRoot', + 'messageFeeTokenID', + 'minReturnFeePerByte', + ], + properties: { + inbox: { + type: 'object', + fieldNumber: 1, + required: ['appendPath', 'size', 'root'], + properties: { + appendPath: { + type: 'array', + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + fieldNumber: 1, + }, + size: { + dataType: 'uint32', + fieldNumber: 2, + }, + root: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + }, + }, + outbox: { + type: 'object', + fieldNumber: 2, + required: ['appendPath', 'size', 'root'], + properties: { + appendPath: { + type: 'array', + items: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + }, + fieldNumber: 1, + }, + size: { + dataType: 'uint32', + fieldNumber: 2, + }, + root: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + }, + }, + partnerChainOutboxRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + messageFeeTokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 4, + }, + minReturnFeePerByte: { + dataType: 'uint64', + fieldNumber: 5, + }, + }, + fieldNumber: 3, + }, + chainValidators: { + $id: '/modules/interoperability/chainValidators', + type: 'object', + required: ['activeValidators', 'certificateThreshold'], + properties: { + activeValidators: { + type: 'array', + fieldNumber: 1, + minItems: 1, + maxItems: 199, + items: { + type: 'object', + required: ['blsKey', 'bftWeight'], + properties: { + blsKey: { + dataType: 'bytes', + minLength: 48, + maxLength: 48, + fieldNumber: 1, + }, + bftWeight: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + certificateThreshold: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + fieldNumber: 4, + }, + }, + }, + }, + terminatedStateAccounts: { + type: 'array', + fieldNumber: 4, + items: { + type: 'object', + required: ['chainID', 'terminatedStateAccount'], + properties: { + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + terminatedStateAccount: { + $id: '/modules/interoperability/terminatedState', + type: 'object', + required: ['stateRoot', 'mainchainStateRoot', 'initialized'], + properties: { + stateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + mainchainStateRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 2, + }, + initialized: { + dataType: 'boolean', + fieldNumber: 3, + }, + }, + fieldNumber: 2, + }, + }, + }, + }, + terminatedOutboxAccounts: { + type: 'array', + fieldNumber: 5, + items: { + type: 'object', + required: ['chainID', 'terminatedOutboxAccount'], + properties: { + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + terminatedOutboxAccount: { + $id: '/modules/interoperability/terminatedOutbox', + type: 'object', + required: ['outboxRoot', 'outboxSize', 'partnerChainInboxSize'], + properties: { + outboxRoot: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + outboxSize: { + dataType: 'uint32', + fieldNumber: 2, + }, + partnerChainInboxSize: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + fieldNumber: 2, + }, + }, + }, + }, + }, + }, + }, + ], + name: 'interoperability', + }, + { + endpoints: [ + { + name: 'getLegacyAccount', + request: { + $id: '/legacy/endpoint/legacyAccountRequest', + type: 'object', + required: ['publicKey'], + properties: { + publicKey: { + type: 'string', + format: 'hex', + }, + }, + }, + response: { + $id: '/legacy/store/genesis', + type: 'object', + required: ['balance'], + properties: { + balance: { + dataType: 'uint64', + fieldNumber: 1, + }, + }, + }, + }, + ], + commands: [ + { + name: 'reclaimLSK', + params: { + $id: '/legacy/command/reclaimLSKParams', + type: 'object', + required: ['amount'], + properties: { + amount: { + dataType: 'uint64', + fieldNumber: 1, + }, + }, + }, + }, + { + name: 'registerKeys', + params: { + $id: '/legacy/command/registerKeysParams', + type: 'object', + required: ['blsKey', 'proofOfPossession', 'generatorKey'], + properties: { + blsKey: { + dataType: 'bytes', + minLength: 48, + maxLength: 48, + fieldNumber: 1, + }, + proofOfPossession: { + dataType: 'bytes', + minLength: 96, + maxLength: 96, + fieldNumber: 2, + }, + generatorKey: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 3, + }, + }, + }, + }, + ], + events: [ + { + name: 'accountReclaimed', + data: { + $id: 'lisk/legacy/accountReclaimedEventData', + type: 'object', + required: ['legacyAddress', 'address', 'amount'], + properties: { + legacyAddress: { + dataType: 'bytes', + maxLength: 8, + fieldNumber: 1, + }, + address: { + dataType: 'bytes', + maxLength: 20, + fieldNumber: 2, + }, + amount: { + dataType: 'uint64', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'keysRegistered', + data: { + $id: 'lisk/legacy/keysRegisteredEventData', + type: 'object', + required: ['address', 'generatorKey', 'blsKey'], + properties: { + address: { + dataType: 'bytes', + maxLength: 20, + fieldNumber: 1, + }, + generatorKey: { + dataType: 'bytes', + maxLength: 32, + fieldNumber: 2, + }, + blsKey: { + dataType: 'bytes', + maxLength: 48, + fieldNumber: 3, + }, + }, + }, + }, + ], + assets: [ + { + version: 0, + data: { + $id: '/legacy/module/genesis', + type: 'object', + required: ['accounts'], + properties: { + accounts: { + type: 'array', + fieldNumber: 1, + items: { + type: 'object', + required: ['address', 'balance'], + properties: { + address: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 1, + }, + balance: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + }, + }, + }, + ], + stores: [], + name: 'legacy', + }, + { + commands: [ + { + name: 'registerValidator', + params: { + $id: '/pos/command/registerValidatorParams', + type: 'object', + required: ['name', 'blsKey', 'proofOfPossession', 'generatorKey'], + properties: { + name: { + dataType: 'string', + fieldNumber: 1, + minLength: 1, + maxLength: 20, + }, + blsKey: { + dataType: 'bytes', + minLength: 48, + maxLength: 48, + fieldNumber: 2, + }, + proofOfPossession: { + dataType: 'bytes', + minLength: 96, + maxLength: 96, + fieldNumber: 3, + }, + generatorKey: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'reportMisbehavior', + params: { + $id: '/pos/command/reportMisbehaviorParams', + type: 'object', + required: ['header1', 'header2'], + properties: { + header1: { + dataType: 'bytes', + fieldNumber: 1, + }, + header2: { + dataType: 'bytes', + fieldNumber: 2, + }, + }, + }, + }, + { + name: 'unlock', + params: { + $id: '/lisk/empty', + type: 'object', + properties: {}, + }, + }, + { + name: 'updateGeneratorKey', + params: { + $id: '/pos/command/updateGeneratorKeyParams', + type: 'object', + required: ['generatorKey'], + properties: { + generatorKey: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 32, + maxLength: 32, + }, + }, + }, + }, + { + name: 'stake', + params: { + $id: '/pos/command/stakeValidatorParams', + type: 'object', + required: ['stakes'], + properties: { + stakes: { + type: 'array', + fieldNumber: 1, + minItems: 1, + maxItems: 20, + items: { + type: 'object', + required: ['validatorAddress', 'amount'], + properties: { + validatorAddress: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + amount: { + dataType: 'sint64', + fieldNumber: 2, + }, + }, + }, + }, + }, + }, + }, + { + name: 'changeCommission', + params: { + $id: '/pos/command/changeCommissionCommandParams', + type: 'object', + required: ['newCommission'], + properties: { + newCommission: { + dataType: 'uint32', + fieldNumber: 1, + maximum: 10000, + }, + }, + }, + }, + { + name: 'claimRewards', + params: { + $id: '/lisk/empty', + type: 'object', + properties: {}, + }, + }, + ], + events: [ + { + name: 'validatorBanned', + data: { + $id: '/pos/events/validatorBannedData', + type: 'object', + required: ['address', 'height'], + properties: { + address: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + height: { + dataType: 'uint32', + fieldNumber: 2, + }, + }, + }, + }, + { + name: 'validatorPunished', + data: { + $id: '/pos/events/punishValidatorData', + type: 'object', + required: ['address', 'height'], + properties: { + address: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + height: { + dataType: 'uint32', + fieldNumber: 2, + }, + }, + }, + }, + { + name: 'validatorRegistered', + data: { + $id: '/pos/events/registerValidatorData', + type: 'object', + required: ['address', 'name'], + properties: { + address: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + name: { + dataType: 'string', + fieldNumber: 2, + }, + }, + }, + }, + { + name: 'validatorStaked', + data: { + $id: '/pos/events/validatorStakedData', + type: 'object', + required: ['senderAddress', 'validatorAddress', 'amount', 'result'], + properties: { + senderAddress: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + validatorAddress: { + dataType: 'bytes', + fieldNumber: 2, + format: 'lisk32', + }, + amount: { + dataType: 'sint64', + fieldNumber: 3, + }, + result: { + dataType: 'uint32', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'commissionChange', + data: { + $id: '/pos/events/commissionChangeData', + type: 'object', + required: ['validatorAddress', 'oldCommission', 'newCommission'], + properties: { + validatorAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + oldCommission: { + dataType: 'uint32', + fieldNumber: 2, + }, + newCommission: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'rewardsAssigned', + data: { + $id: '/pos/events/rewardsAssignedData', + type: 'object', + required: ['stakerAddress', 'validatorAddress', 'tokenID', 'amount'], + properties: { + stakerAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + validatorAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 2, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 3, + }, + amount: { + dataType: 'uint64', + fieldNumber: 4, + }, + }, + }, + }, + ], + stores: [ + { + key: '7160f8680000', + data: { + $id: '/pos/staker', + type: 'object', + required: ['stakes', 'pendingUnlocks'], + properties: { + stakes: { + type: 'array', + fieldNumber: 1, + items: { + type: 'object', + required: ['validatorAddress', 'amount', 'sharingCoefficients'], + properties: { + validatorAddress: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + amount: { + dataType: 'uint64', + fieldNumber: 2, + }, + sharingCoefficients: { + type: 'array', + fieldNumber: 3, + items: { + type: 'object', + required: ['tokenID', 'coefficient'], + properties: { + tokenID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 8, + maxLength: 8, + }, + coefficient: { + dataType: 'bytes', + fieldNumber: 2, + maxLength: 24, + }, + }, + }, + }, + }, + }, + }, + pendingUnlocks: { + type: 'array', + fieldNumber: 2, + items: { + type: 'object', + required: ['validatorAddress', 'amount', 'unstakeHeight'], + properties: { + validatorAddress: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + amount: { + dataType: 'uint64', + fieldNumber: 2, + }, + unstakeHeight: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + }, + }, + }, + { + key: '7160f8688000', + data: { + $id: '/pos/validator', + type: 'object', + required: [ + 'name', + 'totalStake', + 'selfStake', + 'lastGeneratedHeight', + 'isBanned', + 'reportMisbehaviorHeights', + 'consecutiveMissedBlocks', + 'commission', + 'lastCommissionIncreaseHeight', + 'sharingCoefficients', + ], + properties: { + name: { + dataType: 'string', + fieldNumber: 1, + }, + totalStake: { + dataType: 'uint64', + fieldNumber: 2, + }, + selfStake: { + dataType: 'uint64', + fieldNumber: 3, + }, + lastGeneratedHeight: { + dataType: 'uint32', + fieldNumber: 4, + }, + isBanned: { + dataType: 'boolean', + fieldNumber: 5, + }, + reportMisbehaviorHeights: { + type: 'array', + fieldNumber: 6, + items: { + dataType: 'uint32', + }, + }, + consecutiveMissedBlocks: { + dataType: 'uint32', + fieldNumber: 7, + }, + commission: { + dataType: 'uint32', + fieldNumber: 8, + }, + lastCommissionIncreaseHeight: { + dataType: 'uint32', + fieldNumber: 9, + }, + sharingCoefficients: { + type: 'array', + fieldNumber: 10, + items: { + type: 'object', + required: ['tokenID', 'coefficient'], + properties: { + tokenID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 8, + maxLength: 8, + }, + coefficient: { + dataType: 'bytes', + fieldNumber: 2, + maxLength: 24, + }, + }, + }, + }, + }, + }, + }, + { + key: '7160f8684000', + data: { + $id: '/pos/name', + type: 'object', + required: ['validatorAddress'], + properties: { + validatorAddress: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + }, + }, + }, + { + key: '7160f868c000', + data: { + $id: '/pos/store/snapshot', + type: 'object', + required: ['validatorWeightSnapshot'], + properties: { + validatorWeightSnapshot: { + type: 'array', + fieldNumber: 1, + items: { + type: 'object', + required: ['address', 'weight'], + properties: { + address: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + weight: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + }, + }, + }, + { + key: '7160f8682000', + data: { + $id: '/pos/store/genesis', + type: 'object', + required: ['height', 'initRounds', 'initValidators'], + properties: { + height: { + dataType: 'uint32', + fieldNumber: 1, + }, + initRounds: { + dataType: 'uint32', + fieldNumber: 2, + }, + initValidators: { + type: 'array', + fieldNumber: 3, + items: { + dataType: 'bytes', + format: 'lisk32', + }, + }, + }, + }, + }, + { + key: '7160f868a000', + data: { + $id: '/pos/store/previousTimestamp', + type: 'object', + required: ['timestamp'], + properties: { + timestamp: { + dataType: 'uint32', + fieldNumber: 1, + }, + }, + }, + }, + { + key: '7160f8686000', + data: { + $id: '/pos/eligibleValidators', + type: 'object', + required: ['lastReportMisbehaviorHeight'], + properties: { + lastReportMisbehaviorHeight: { + dataType: 'uint32', + fieldNumber: 1, + }, + }, + }, + }, + ], + endpoints: [ + { + name: 'getAllValidators', + response: { + $id: 'modules/pos/endpoint/getAllValidatorsResponse', + type: 'object', + required: ['validators'], + properties: { + validators: { + type: 'array', + items: { + type: 'object', + required: [ + 'address', + 'name', + 'totalStakeReceived', + 'selfStake', + 'lastGeneratedHeight', + 'isBanned', + 'pomHeights', + 'punishmentPeriods', + 'consecutiveMissedBlocks', + ], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + name: { + type: 'string', + }, + totalStakeReceived: { + type: 'string', + format: 'uint64', + }, + selfStake: { + type: 'string', + format: 'uint64', + }, + lastGeneratedHeight: { + type: 'integer', + format: 'uint32', + }, + isBanned: { + type: 'boolean', + }, + pomHeights: { + type: 'array', + items: { + type: 'integer', + format: 'uint32', + }, + }, + punishmentPeriods: { + type: 'array', + items: { + type: 'object', + required: ['start', 'end'], + properties: { + start: { + type: 'integer', + format: 'uint32', + }, + end: { + type: 'integer', + format: 'uint32', + }, + }, + }, + }, + consecutiveMissedBlocks: { + type: 'integer', + format: 'uint32', + }, + }, + }, + }, + }, + }, + }, + { + name: 'getValidator', + request: { + $id: 'modules/pos/endpoint/getValidatorRequest', + type: 'object', + required: ['address'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + }, + }, + response: { + $id: 'modules/pos/endpoint/getValidatorResponse', + type: 'object', + required: [ + 'address', + 'name', + 'totalStakeReceived', + 'selfStake', + 'lastGeneratedHeight', + 'isBanned', + 'pomHeights', + 'punishmentPeriods', + 'consecutiveMissedBlocks', + ], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + name: { + type: 'string', + }, + totalStakeReceived: { + type: 'string', + format: 'uint64', + }, + selfStake: { + type: 'string', + format: 'uint64', + }, + lastGeneratedHeight: { + type: 'integer', + format: 'uint32', + }, + isBanned: { + type: 'boolean', + }, + pomHeights: { + type: 'array', + items: { + type: 'integer', + format: 'uint32', + }, + }, + punishmentPeriods: { + type: 'array', + items: { + type: 'object', + required: ['start', 'end'], + properties: { + start: { + type: 'integer', + format: 'uint32', + }, + end: { + type: 'integer', + format: 'uint32', + }, + }, + }, + }, + consecutiveMissedBlocks: { + type: 'integer', + format: 'uint32', + }, + }, + }, + }, + { + name: 'getStaker', + request: { + $id: 'modules/pos/endpoint/getValidatorRequest', + type: 'object', + required: ['address'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + }, + }, + response: { + $id: 'modules/pos/endpoint/getStakerResponse', + type: 'object', + required: ['stakes', 'pendingUnlocks'], + properties: { + stakes: { + type: 'array', + fieldNumber: 1, + items: { + type: 'object', + required: ['validatorAddress', 'amount'], + properties: { + validatorAddress: { + type: 'string', + format: 'lisk32', + }, + amount: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + pendingUnlocks: { + type: 'array', + fieldNumber: 2, + items: { + type: 'object', + required: ['validatorAddress', 'amount', 'unstakeHeight'], + properties: { + validatorAddress: { + type: 'string', + format: 'lisk32', + }, + amount: { + type: 'string', + format: 'uint64', + }, + unstakeHeight: { + type: 'integer', + format: 'uint32', + }, + }, + }, + }, + }, + }, + }, + { + name: 'getConstants', + response: { + $id: '/pos/config', + type: 'object', + properties: { + factorSelfStakes: { + type: 'integer', + format: 'uint32', + minimum: 1, + }, + maxLengthName: { + type: 'integer', + format: 'uint32', + minimum: 10, + maximum: 30, + }, + maxNumberSentStakes: { + type: 'integer', + format: 'uint32', + minimum: 1, + maximum: 20, + }, + maxNumberPendingUnlocks: { + type: 'integer', + format: 'uint32', + minimum: 1, + maximum: 40, + }, + failSafeMissedBlocks: { + type: 'integer', + format: 'uint32', + minimum: 2, + }, + failSafeInactiveWindow: { + type: 'integer', + format: 'uint32', + minimum: 43200, + maximum: 3153600, + }, + punishmentWindowSelfStaking: { + type: 'integer', + format: 'uint32', + minimum: 43200, + maximum: 3153600, + }, + minWeightStandby: { + type: 'string', + format: 'uint64', + minimum: 1, + }, + numberActiveValidators: { + type: 'integer', + format: 'uint32', + minimum: 1, + maximum: 199, + }, + numberStandbyValidators: { + type: 'integer', + format: 'uint32', + maximum: 2, + }, + posTokenID: { + type: 'string', + format: 'hex', + }, + validatorRegistrationFee: { + type: 'string', + format: 'uint64', + }, + maxBFTWeightCap: { + type: 'integer', + format: 'uint32', + minimum: 300, + maximum: 10000, + }, + commissionIncreasePeriod: { + type: 'integer', + format: 'uint32', + }, + maxCommissionIncreaseRate: { + type: 'integer', + format: 'uint32', + minimum: 100, + maximum: 10000, + }, + useInvalidBLSKey: { + type: 'boolean', + }, + baseStakeAmount: { + type: 'string', + format: 'uint64', + minimum: 1, + }, + lockingPeriodStaking: { + type: 'integer', + format: 'uint32', + }, + lockingPeriodSelfStaking: { + type: 'integer', + format: 'uint32', + }, + reportMisbehaviorReward: { + type: 'string', + format: 'uint64', + }, + reportMisbehaviorLimitBanned: { + type: 'integer', + format: 'uint32', + minimum: 1, + }, + }, + required: [ + 'factorSelfStakes', + 'maxLengthName', + 'maxNumberSentStakes', + 'maxNumberPendingUnlocks', + 'failSafeMissedBlocks', + 'failSafeInactiveWindow', + 'punishmentWindowSelfStaking', + 'minWeightStandby', + 'numberActiveValidators', + 'numberStandbyValidators', + 'posTokenID', + 'validatorRegistrationFee', + 'maxBFTWeightCap', + 'useInvalidBLSKey', + 'baseStakeAmount', + 'lockingPeriodStaking', + 'lockingPeriodSelfStaking', + 'reportMisbehaviorReward', + 'reportMisbehaviorLimitBanned', + ], + }, + }, + { + name: 'getPoSTokenID', + response: { + $id: 'modules/pos/endpoint/getPoSTokenIDResponse', + type: 'object', + required: ['tokenID'], + properties: { + tokenID: { + type: 'string', + format: 'hex', + }, + }, + }, + }, + { + name: 'getClaimableRewards', + request: { + $id: 'modules/pos/endpoint/getClaimableRewardsRequest', + type: 'object', + required: ['address'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + }, + }, + response: { + $id: 'modules/pos/endpoint/getClaimableRewardsResponse', + type: 'object', + properties: { + rewards: { + items: { + type: 'object', + required: ['tokenID', 'reward'], + properties: { + tokenID: { + type: 'string', + format: 'hex', + }, + reward: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + }, + }, + }, + { + name: 'getLockedReward', + request: { + $id: 'modules/pos/endpoint/getLockedRewardRequest', + type: 'object', + required: ['address', 'tokenID'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + tokenID: { + type: 'string', + format: 'hex', + }, + }, + }, + response: { + $id: 'modules/pos/endpoint/getLockedRewardResponse', + type: 'object', + required: ['reward'], + properties: { + reward: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + { + name: 'getLockedStakedAmount', + request: { + $id: 'modules/pos/endpoint/getLockedStakedAmountRequest', + type: 'object', + required: ['address'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + }, + }, + response: { + $id: 'modules/pos/endpoint/getLockedStakedAmountResponse', + type: 'object', + required: ['amount'], + properties: { + amount: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + { + name: 'getValidatorsByStake', + request: { + $id: 'modules/pos/endpoint/getValidatorsByStakeRequest', + type: 'object', + properties: { + limit: { + type: 'integer', + format: 'int32', + }, + }, + }, + response: { + $id: 'modules/pos/endpoint/getValidatorsByStakeResponse', + type: 'object', + required: ['validators'], + properties: { + validators: { + type: 'array', + items: { + type: 'object', + required: [ + 'address', + 'name', + 'totalStakeReceived', + 'selfStake', + 'lastGeneratedHeight', + 'isBanned', + 'pomHeights', + 'punishmentPeriods', + 'consecutiveMissedBlocks', + ], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + name: { + type: 'string', + }, + totalStakeReceived: { + type: 'string', + format: 'uint64', + }, + selfStake: { + type: 'string', + format: 'uint64', + }, + lastGeneratedHeight: { + type: 'integer', + format: 'uint32', + }, + isBanned: { + type: 'boolean', + }, + pomHeights: { + type: 'array', + items: { + type: 'integer', + format: 'uint32', + }, + }, + punishmentPeriods: { + type: 'array', + items: { + type: 'object', + required: ['start', 'end'], + properties: { + start: { + type: 'integer', + format: 'uint32', + }, + end: { + type: 'integer', + format: 'uint32', + }, + }, + }, + }, + consecutiveMissedBlocks: { + type: 'integer', + format: 'uint32', + }, + }, + }, + }, + }, + }, + }, + { + name: 'getPendingUnlocks', + request: { + $id: 'modules/pos/endpoint/getPendingUnlocksRequest', + type: 'object', + required: ['address'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + }, + }, + response: { + $id: 'modules/pos/endpoint/getPendingUnlocksResponse', + type: 'object', + required: ['pendingUnlocks'], + properties: { + pendingUnlocks: { + type: 'array', + items: { + type: 'object', + required: [ + 'validatorAddress', + 'amount', + 'unstakeHeight', + 'expectedUnlockableHeight', + 'unlockable', + ], + properties: { + validatorAddress: { + type: 'string', + format: 'lisk32', + }, + amount: { + type: 'string', + format: 'uint64', + }, + unstakeHeight: { + type: 'integer', + format: 'uint32', + }, + expectedUnlockableHeight: { + type: 'integer', + format: 'uint32', + }, + unlockable: { + type: 'boolean', + }, + }, + }, + }, + }, + }, + }, + { + name: 'getRegistrationFee', + response: { + $id: 'modules/pos/endpoint/getRegistrationFeeResponse', + type: 'object', + required: ['registrationFee'], + properties: { + registrationFee: { + type: 'string', + }, + }, + }, + }, + { + name: 'getExpectedSharedRewards', + request: { + $id: 'modules/pos/endpoint/getExpectedSharedRewardsRequest', + type: 'object', + required: ['validatorAddress', 'validatorReward', 'stake'], + properties: { + validatorAddress: { + type: 'string', + format: 'lisk32', + }, + validatorReward: { + type: 'string', + format: 'uint64', + }, + stake: { + type: 'string', + format: 'uint64', + }, + }, + }, + response: { + $id: 'modules/pos/endpoint/getExpectedSharedRewardsResponse', + type: 'object', + required: ['reward'], + properties: { + reward: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + ], + assets: [ + { + version: 0, + data: { + $id: '/pos/module/genesis', + type: 'object', + required: ['validators', 'stakers', 'genesisData'], + properties: { + validators: { + type: 'array', + fieldNumber: 1, + items: { + type: 'object', + required: [ + 'address', + 'name', + 'blsKey', + 'proofOfPossession', + 'generatorKey', + 'lastGeneratedHeight', + 'isBanned', + 'reportMisbehaviorHeights', + 'consecutiveMissedBlocks', + 'commission', + 'lastCommissionIncreaseHeight', + 'sharingCoefficients', + ], + properties: { + address: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + name: { + dataType: 'string', + fieldNumber: 2, + minLength: 1, + maxLength: 20, + }, + blsKey: { + dataType: 'bytes', + fieldNumber: 3, + minLength: 48, + maxLength: 48, + }, + proofOfPossession: { + dataType: 'bytes', + fieldNumber: 4, + minLength: 96, + maxLength: 96, + }, + generatorKey: { + dataType: 'bytes', + fieldNumber: 5, + minLength: 32, + maxLength: 32, + }, + lastGeneratedHeight: { + dataType: 'uint32', + fieldNumber: 6, + }, + isBanned: { + dataType: 'boolean', + fieldNumber: 7, + }, + reportMisbehaviorHeights: { + type: 'array', + fieldNumber: 8, + items: { + dataType: 'uint32', + }, + }, + consecutiveMissedBlocks: { + dataType: 'uint32', + fieldNumber: 9, + }, + commission: { + dataType: 'uint32', + fieldNumber: 10, + maximum: 10000, + }, + lastCommissionIncreaseHeight: { + dataType: 'uint32', + fieldNumber: 11, + }, + sharingCoefficients: { + type: 'array', + fieldNumber: 12, + items: { + type: 'object', + required: ['tokenID', 'coefficient'], + properties: { + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 1, + }, + coefficient: { + dataType: 'bytes', + maxLength: 24, + fieldNumber: 2, + }, + }, + }, + }, + }, + }, + }, + stakers: { + type: 'array', + fieldNumber: 2, + items: { + type: 'object', + required: ['address', 'stakes', 'pendingUnlocks'], + properties: { + address: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + stakes: { + type: 'array', + fieldNumber: 2, + items: { + type: 'object', + required: ['validatorAddress', 'amount', 'sharingCoefficients'], + properties: { + validatorAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + amount: { + dataType: 'uint64', + fieldNumber: 2, + }, + sharingCoefficients: { + type: 'array', + fieldNumber: 3, + items: { + type: 'object', + required: ['tokenID', 'coefficient'], + properties: { + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 1, + }, + coefficient: { + dataType: 'bytes', + maxLength: 24, + fieldNumber: 2, + }, + }, + }, + }, + }, + }, + }, + pendingUnlocks: { + type: 'array', + fieldNumber: 3, + items: { + type: 'object', + required: ['validatorAddress', 'amount', 'unstakeHeight'], + properties: { + validatorAddress: { + dataType: 'bytes', + fieldNumber: 1, + format: 'lisk32', + }, + amount: { + dataType: 'uint64', + fieldNumber: 2, + }, + unstakeHeight: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + }, + }, + }, + genesisData: { + type: 'object', + fieldNumber: 3, + required: ['initRounds', 'initValidators'], + properties: { + initRounds: { + dataType: 'uint32', + fieldNumber: 1, + }, + initValidators: { + type: 'array', + fieldNumber: 2, + items: { + dataType: 'bytes', + format: 'lisk32', + }, + }, + }, + }, + }, + }, + }, + ], + name: 'pos', + }, + { + commands: [], + events: [], + stores: [ + { + key: '2441b15f0000', + data: { + $id: '/modules/random/seedReveal', + type: 'object', + required: ['validatorReveals'], + properties: { + validatorReveals: { + type: 'array', + fieldNumber: 1, + items: { + type: 'object', + required: ['generatorAddress', 'seedReveal', 'height', 'valid'], + properties: { + generatorAddress: { + dataType: 'bytes', + minLength: 20, + maxLength: 20, + fieldNumber: 1, + }, + seedReveal: { + dataType: 'bytes', + minLength: 16, + maxLength: 16, + fieldNumber: 2, + }, + height: { + dataType: 'uint32', + fieldNumber: 3, + }, + valid: { + dataType: 'boolean', + fieldNumber: 4, + }, + }, + }, + }, + }, + }, + }, + ], + endpoints: [ + { + name: 'isSeedRevealValid', + request: { + $id: '/modules/random/endpoint/isSeedRevealRequest', + type: 'object', + required: ['generatorAddress', 'seedReveal'], + properties: { + generatorAddress: { + type: 'string', + format: 'lisk32', + }, + seedReveal: { + type: 'string', + format: 'hex', + }, + }, + }, + response: { + $id: '/modules/random/endpoint/isSeedRevealResponse', + type: 'object', + required: ['valid'], + properties: { + valid: { + type: 'boolean', + }, + }, + }, + }, + { + name: 'setHashOnion', + request: { + $id: 'lisk/random/setSeedRequestSchema', + type: 'object', + title: 'Random setSeed request', + required: ['address'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + seed: { + type: 'string', + format: 'hex', + minLength: 32, + maxLength: 32, + }, + count: { + type: 'integer', + minimum: 1, + maximum: 10000000, + }, + distance: { + type: 'integer', + minimum: 1, + }, + hashes: { + type: 'array', + minItems: 1, + items: { + type: 'string', + format: 'hex', + minLength: 32, + maxLength: 32, + }, + }, + }, + }, + }, + { + name: 'getHashOnionSeeds', + response: { + $id: 'lisk/random/setSeedRequestSchema', + type: 'object', + title: 'Random setSeed request', + required: ['address'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + seed: { + type: 'string', + format: 'hex', + minLength: 32, + maxLength: 32, + }, + count: { + type: 'integer', + minimum: 1, + maximum: 10000000, + }, + distance: { + type: 'integer', + minimum: 1, + }, + hashes: { + type: 'array', + minItems: 1, + items: { + type: 'string', + format: 'hex', + minLength: 32, + maxLength: 32, + }, + }, + }, + }, + }, + { + name: 'hasHashOnion', + request: { + $id: 'lisk/random/addressSchema', + type: 'object', + required: ['address'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + }, + }, + response: { + $id: 'lisk/random/hasHashOnionResponseSchema', + type: 'object', + required: ['hasSeed', 'remaining'], + properties: { + hasSeed: { + type: 'boolean', + }, + remaining: { + type: 'integer', + format: 'uint32', + }, + }, + }, + }, + { + name: 'getHashOnionUsage', + request: { + $id: 'lisk/random/addressSchema', + type: 'object', + required: ['address'], + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + }, + }, + response: { + $id: 'lisk/random/getHashOnionUsageResponse', + type: 'object', + required: ['usedHashOnions', 'seed'], + properties: { + usedHashOnions: { + type: 'array', + items: { + type: 'object', + required: ['count', 'height'], + properties: { + count: { + type: 'integer', + format: 'uint32', + }, + height: { + type: 'integer', + format: 'uint32', + }, + }, + }, + }, + seed: { + type: 'string', + format: 'hex', + }, + }, + }, + }, + ], + assets: [ + { + version: 2, + data: { + $id: '/modules/random/block/header/asset', + type: 'object', + properties: { + seedReveal: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 16, + maxLength: 16, + }, + }, + required: ['seedReveal'], + }, + }, + ], + name: 'random', + }, + { + commands: [ + { + name: 'transfer', + params: { + $id: '/lisk/transferParams', + title: 'Transfer transaction params', + type: 'object', + required: ['tokenID', 'amount', 'recipientAddress', 'data'], + properties: { + tokenID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 8, + maxLength: 8, + }, + amount: { + dataType: 'uint64', + fieldNumber: 2, + }, + recipientAddress: { + dataType: 'bytes', + fieldNumber: 3, + format: 'lisk32', + }, + data: { + dataType: 'string', + fieldNumber: 4, + minLength: 0, + maxLength: 64, + }, + }, + }, + }, + { + name: 'transferCrossChain', + params: { + $id: '/lisk/ccTransferParams', + type: 'object', + required: [ + 'tokenID', + 'amount', + 'receivingChainID', + 'recipientAddress', + 'data', + 'messageFee', + 'messageFeeTokenID', + ], + properties: { + tokenID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 8, + maxLength: 8, + }, + amount: { + dataType: 'uint64', + fieldNumber: 2, + }, + receivingChainID: { + dataType: 'bytes', + fieldNumber: 3, + minLength: 4, + maxLength: 4, + }, + recipientAddress: { + dataType: 'bytes', + fieldNumber: 4, + format: 'lisk32', + }, + data: { + dataType: 'string', + fieldNumber: 5, + minLength: 0, + maxLength: 64, + }, + messageFee: { + dataType: 'uint64', + fieldNumber: 6, + }, + messageFeeTokenID: { + dataType: 'bytes', + fieldNumber: 7, + minLength: 8, + maxLength: 8, + }, + }, + }, + }, + ], + events: [ + { + name: 'transfer', + data: { + $id: '/token/events/transfer', + type: 'object', + required: ['senderAddress', 'recipientAddress', 'tokenID', 'amount', 'result'], + properties: { + senderAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + recipientAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 2, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 3, + }, + amount: { + dataType: 'uint64', + fieldNumber: 4, + }, + result: { + dataType: 'uint32', + fieldNumber: 5, + }, + }, + }, + }, + { + name: 'transferCrossChain', + data: { + $id: '/token/events/transferCrossChain', + type: 'object', + required: [ + 'senderAddress', + 'recipientAddress', + 'tokenID', + 'amount', + 'receivingChainID', + 'result', + ], + properties: { + senderAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + recipientAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 2, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 3, + }, + amount: { + dataType: 'uint64', + fieldNumber: 4, + }, + receivingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 5, + }, + result: { + dataType: 'uint32', + fieldNumber: 6, + }, + }, + }, + }, + { + name: 'ccmTransfer', + data: { + $id: '/token/events/ccmTransfer', + type: 'object', + required: [ + 'senderAddress', + 'recipientAddress', + 'tokenID', + 'amount', + 'receivingChainID', + 'result', + ], + properties: { + senderAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + recipientAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 2, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 3, + }, + amount: { + dataType: 'uint64', + fieldNumber: 4, + }, + receivingChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 5, + }, + result: { + dataType: 'uint32', + fieldNumber: 6, + }, + }, + }, + }, + { + name: 'mint', + data: { + $id: '/token/events/mint', + type: 'object', + required: ['address', 'tokenID', 'amount', 'result'], + properties: { + address: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 2, + }, + amount: { + dataType: 'uint64', + fieldNumber: 3, + }, + result: { + dataType: 'uint32', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'burn', + data: { + $id: '/token/events/burn', + type: 'object', + required: ['address', 'tokenID', 'amount', 'result'], + properties: { + address: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 2, + }, + amount: { + dataType: 'uint64', + fieldNumber: 3, + }, + result: { + dataType: 'uint32', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'lock', + data: { + $id: '/token/events/lock', + type: 'object', + required: ['address', 'module', 'tokenID', 'amount', 'result'], + properties: { + address: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + module: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 2, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 3, + }, + amount: { + dataType: 'uint64', + fieldNumber: 4, + }, + result: { + dataType: 'uint32', + fieldNumber: 5, + }, + }, + }, + }, + { + name: 'unlock', + data: { + $id: '/token/events/unlock', + type: 'object', + required: ['address', 'module', 'tokenID', 'amount', 'result'], + properties: { + address: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + module: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 2, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 3, + }, + amount: { + dataType: 'uint64', + fieldNumber: 4, + }, + result: { + dataType: 'uint32', + fieldNumber: 5, + }, + }, + }, + }, + { + name: 'initializeToken', + data: { + $id: '/token/events/initializeTokenEvent', + type: 'object', + required: ['tokenID', 'result'], + properties: { + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 1, + }, + result: { + dataType: 'uint32', + fieldNumber: 2, + }, + }, + }, + }, + { + name: 'initializeUserAccount', + data: { + $id: '/token/events/initializeUserAccount', + type: 'object', + required: ['address', 'tokenID', 'initializationFee', 'result'], + properties: { + address: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 2, + }, + initializationFee: { + dataType: 'uint64', + fieldNumber: 3, + }, + result: { + dataType: 'uint32', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'initializeEscrowAccount', + data: { + $id: '/token/events/initializeEscrowAccount', + type: 'object', + required: ['chainID', 'tokenID', 'initializationFee', 'result'], + properties: { + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 2, + }, + initializationFee: { + dataType: 'uint64', + fieldNumber: 3, + }, + result: { + dataType: 'uint32', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'recover', + data: { + $id: '/token/events/recover', + type: 'object', + required: ['terminatedChainID', 'tokenID', 'amount', 'result'], + properties: { + terminatedChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 2, + }, + amount: { + dataType: 'uint64', + fieldNumber: 3, + }, + result: { + dataType: 'uint32', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'beforeCCCExecution', + data: { + $id: '/token/events/beforeCCCExecution', + type: 'object', + required: ['ccmID', 'messageFeeTokenID', 'relayerAddress', 'result'], + properties: { + ccmID: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + messageFeeTokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 2, + }, + relayerAddress: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 3, + }, + result: { + dataType: 'uint32', + fieldNumber: 4, + }, + }, + }, + }, + { + name: 'beforeCCMForwarding', + data: { + $id: '/token/events/beforeCCMForwarding', + type: 'object', + required: ['ccmID', 'messageFeeTokenID', 'result'], + properties: { + ccmID: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + messageFeeTokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 2, + }, + result: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + { + name: 'allTokensSupported', + data: { + $id: '/lisk/empty', + type: 'object', + properties: {}, + }, + }, + { + name: 'allTokensSupportRemoved', + data: { + $id: '/lisk/empty', + type: 'object', + properties: {}, + }, + }, + { + name: 'allTokensFromChainSupported', + data: { + $id: '/token/events/allTokensFromChainSupported', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + }, + }, + }, + { + name: 'allTokensFromChainSupportRemoved', + data: { + $id: '/token/events/allTokensFromChainSupportRemoved', + type: 'object', + required: ['chainID'], + properties: { + chainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + }, + }, + }, + { + name: 'tokenIDSupported', + data: { + $id: '/token/events/tokenIDSupported', + type: 'object', + required: ['tokenID'], + properties: { + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 1, + }, + }, + }, + }, + { + name: 'tokenIDSupportRemoved', + data: { + $id: '/token/events/tokenIDSupportRemoved', + type: 'object', + required: ['tokenID'], + properties: { + tokenID: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + fieldNumber: 1, + }, + }, + }, + }, + ], + stores: [ + { + key: '3c469e9d0000', + data: { + $id: '/token/store/user', + type: 'object', + required: ['availableBalance', 'lockedBalances'], + properties: { + availableBalance: { + dataType: 'uint64', + fieldNumber: 1, + }, + lockedBalances: { + type: 'array', + fieldNumber: 2, + items: { + type: 'object', + required: ['module', 'amount'], + properties: { + module: { + dataType: 'string', + fieldNumber: 1, + minLength: 1, + maxLength: 32, + }, + amount: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + }, + }, + }, + { + key: '3c469e9d8000', + data: { + $id: '/token/store/supply', + type: 'object', + required: ['totalSupply'], + properties: { + totalSupply: { + dataType: 'uint64', + fieldNumber: 1, + }, + }, + }, + }, + { + key: '3c469e9d4000', + data: { + $id: '/token/store/escrow', + type: 'object', + required: ['amount'], + properties: { + amount: { + dataType: 'uint64', + fieldNumber: 1, + }, + }, + }, + }, + { + key: '3c469e9dc000', + data: { + $id: '/token/store/supportedTokens', + type: 'object', + required: ['supportedTokenIDs'], + properties: { + supportedTokenIDs: { + type: 'array', + fieldNumber: 1, + items: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + }, + }, + }, + }, + }, + ], + endpoints: [ + { + name: 'getBalance', + request: { + $id: '/token/endpoint/getBalanceRequest', + type: 'object', + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + tokenID: { + type: 'string', + format: 'hex', + minLength: 16, + maxLength: 16, + }, + }, + required: ['address', 'tokenID'], + }, + response: { + $id: '/token/endpoint/getBalanceResponse', + type: 'object', + required: ['availableBalance', 'lockedBalances'], + properties: { + availableBalance: { + type: 'string', + format: 'uint64', + }, + lockedBalances: { + type: 'array', + items: { + type: 'object', + required: ['module', 'amount'], + properties: { + module: { + type: 'string', + }, + amount: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + }, + }, + }, + { + name: 'getBalances', + request: { + $id: '/token/endpoint/getBalancesRequest', + type: 'object', + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + }, + required: ['address'], + }, + response: { + $id: '/token/endpoint/getBalancesResponse', + type: 'object', + required: ['balances'], + properties: { + balances: { + type: 'array', + items: { + type: 'object', + required: ['availableBalance', 'lockedBalances', 'tokenID'], + properties: { + tokenID: { + type: 'string', + format: 'hex', + }, + availableBalance: { + type: 'string', + format: 'uint64', + }, + lockedBalances: { + type: 'array', + items: { + type: 'object', + required: ['module', 'amount'], + properties: { + module: { + type: 'string', + }, + amount: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: 'getTotalSupply', + response: { + $id: '/token/endpoint/getTotalSupplyResponse', + type: 'object', + properties: { + totalSupply: { + type: 'array', + items: { + type: 'object', + required: ['totalSupply', 'tokenID'], + properties: { + tokenID: { + type: 'string', + format: 'hex', + }, + totalSupply: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + }, + }, + }, + { + name: 'getSupportedTokens', + response: { + $id: '/token/endpoint/getSupportedTokensResponse', + type: 'object', + properties: { + tokenIDs: { + type: 'array', + items: { + type: 'string', + format: 'hex', + }, + }, + }, + }, + }, + { + name: 'isSupported', + request: { + $id: '/token/endpoint/isSupportedRequest', + type: 'object', + properties: { + tokenID: { + type: 'string', + format: 'hex', + minLength: 16, + maxLength: 16, + }, + }, + required: ['tokenID'], + }, + response: { + $id: '/token/endpoint/isSupportedResponse', + type: 'object', + properties: { + supported: { + dataType: 'boolean', + }, + }, + required: ['supported'], + }, + }, + { + name: 'getEscrowedAmounts', + response: { + $id: '/token/endpoint/getEscrowedAmountsResponse', + type: 'object', + properties: { + escrowedAmounts: { + type: 'array', + items: { + type: 'object', + required: ['escrowChainID', 'amount', 'tokenID'], + properties: { + escrowChainID: { + type: 'string', + format: 'hex', + }, + tokenID: { + type: 'string', + format: 'hex', + }, + amount: { + type: 'string', + format: 'uint64', + }, + }, + }, + }, + }, + }, + }, + { + name: 'getInitializationFees', + response: { + $id: '/token/endpoint/getInitializationFees', + type: 'object', + properties: { + userAccount: { + type: 'string', + format: 'uint64', + }, + escrowAccount: { + type: 'string', + format: 'uint64', + }, + }, + required: ['userAccount', 'escrowAccount'], + }, + }, + { + name: 'hasUserAccount', + request: { + $id: '/token/endpoint/hasUserAccountRequest', + type: 'object', + properties: { + address: { + type: 'string', + format: 'lisk32', + }, + tokenID: { + type: 'string', + format: 'hex', + minLength: 16, + maxLength: 16, + }, + }, + required: ['address', 'tokenID'], + }, + response: { + $id: '/token/endpoint/hasUserAccountResponse', + type: 'object', + properties: { + exists: { + type: 'boolean', + }, + }, + }, + }, + { + name: 'hasEscrowAccount', + request: { + $id: '/token/endpoint/hasEscrowAccountRequest', + type: 'object', + properties: { + tokenID: { + type: 'string', + format: 'hex', + minLength: 16, + maxLength: 16, + }, + escrowChainID: { + type: 'string', + format: 'hex', + }, + }, + required: ['tokenID', 'escrowChainID'], + }, + response: { + $id: '/token/endpoint/hasEscrowAccountResponse', + type: 'object', + properties: { + exists: { + type: 'boolean', + }, + }, + }, + }, + ], + assets: [ + { + version: 0, + data: { + $id: '/token/module/genesis', + type: 'object', + required: [ + 'userSubstore', + 'supplySubstore', + 'escrowSubstore', + 'supportedTokensSubstore', + ], + properties: { + userSubstore: { + type: 'array', + fieldNumber: 1, + items: { + type: 'object', + required: ['address', 'tokenID', 'availableBalance', 'lockedBalances'], + properties: { + address: { + dataType: 'bytes', + format: 'lisk32', + fieldNumber: 1, + }, + tokenID: { + dataType: 'bytes', + fieldNumber: 2, + minLength: 8, + maxLength: 8, + }, + availableBalance: { + dataType: 'uint64', + fieldNumber: 3, + }, + lockedBalances: { + type: 'array', + fieldNumber: 4, + items: { + type: 'object', + required: ['module', 'amount'], + properties: { + module: { + dataType: 'string', + minLength: 1, + maxLength: 32, + fieldNumber: 1, + }, + amount: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + }, + }, + }, + supplySubstore: { + type: 'array', + fieldNumber: 2, + items: { + type: 'object', + required: ['tokenID', 'totalSupply'], + properties: { + tokenID: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 8, + maxLength: 8, + }, + totalSupply: { + dataType: 'uint64', + fieldNumber: 2, + }, + }, + }, + }, + escrowSubstore: { + type: 'array', + fieldNumber: 3, + items: { + type: 'object', + required: ['escrowChainID', 'tokenID', 'amount'], + properties: { + escrowChainID: { + dataType: 'bytes', + minLength: 4, + maxLength: 4, + fieldNumber: 1, + }, + tokenID: { + dataType: 'bytes', + fieldNumber: 2, + minLength: 8, + maxLength: 8, + }, + amount: { + dataType: 'uint64', + fieldNumber: 3, + }, + }, + }, + }, + supportedTokensSubstore: { + type: 'array', + fieldNumber: 4, + items: { + type: 'object', + required: ['chainID', 'supportedTokenIDs'], + properties: { + chainID: { + dataType: 'bytes', + fieldNumber: 1, + }, + supportedTokenIDs: { + type: 'array', + fieldNumber: 2, + items: { + dataType: 'bytes', + minLength: 8, + maxLength: 8, + }, + }, + }, + }, + }, + }, + }, + }, + ], + name: 'token', + }, + { + commands: [], + events: [ + { + name: 'generatorKeyRegistration', + data: { + $id: '/validators/event/generatorKeyRegData', + type: 'object', + required: ['generatorKey', 'result'], + properties: { + generatorKey: { + dataType: 'bytes', + minLength: 32, + maxLength: 32, + fieldNumber: 1, + }, + result: { + dataType: 'uint32', + fieldNumber: 2, + }, + }, + }, + }, + { + name: 'blsKeyRegistration', + data: { + $id: '/validators/event/blsKeyRegData', + type: 'object', + required: ['blsKey', 'proofOfPossession', 'result'], + properties: { + blsKey: { + dataType: 'bytes', + minLength: 48, + maxLength: 48, + fieldNumber: 1, + }, + proofOfPossession: { + dataType: 'bytes', + minLength: 96, + maxLength: 96, + fieldNumber: 2, + }, + result: { + dataType: 'uint32', + fieldNumber: 3, + }, + }, + }, + }, + ], + stores: [ + { + key: '66d18af40000', + data: { + $id: '/validators/validatorAccountSubStore', + title: 'Validators Account Keys', + type: 'object', + properties: { + generatorKey: { + dataType: 'bytes', + fieldNumber: 1, + minLength: 32, + maxLength: 32, + }, + blsKey: { + dataType: 'bytes', + fieldNumber: 2, + minLength: 48, + maxLength: 48, + }, + }, + required: ['generatorKey', 'blsKey'], + }, + }, + { + key: '66d18af48000', + data: { + $id: '/validators/validatorsParams', + type: 'object', + required: ['validators', 'preCommitThreshold', 'certificateThreshold'], + properties: { + preCommitThreshold: { + fieldNumber: 1, + dataType: 'uint64', + }, + certificateThreshold: { + fieldNumber: 2, + dataType: 'uint64', + }, + validators: { + fieldNumber: 3, + type: 'array', + items: { + type: 'object', + required: ['address', 'bftWeight', 'generatorKey', 'blsKey'], + properties: { + address: { + fieldNumber: 1, + dataType: 'bytes', + format: 'lisk32', + }, + bftWeight: { + fieldNumber: 2, + dataType: 'uint64', + }, + generatorKey: { + fieldNumber: 3, + dataType: 'bytes', + }, + blsKey: { + fieldNumber: 4, + dataType: 'bytes', + }, + }, + }, + }, + }, + }, + }, + { + key: '66d18af44000', + data: { + $id: '/validators/blsKeyData', + title: 'Validators Addresses', + type: 'object', + properties: { + address: { + dataType: 'bytes', + fieldNumber: 1, + }, + }, + required: ['address'], + }, + }, + ], + endpoints: [ + { + name: 'validateBLSKey', + request: { + $id: '/validators/endpoint/validateBLSKeyRequest', + title: 'Bls Key Properties', + type: 'object', + properties: { + proofOfPossession: { + type: 'string', + format: 'hex', + }, + blsKey: { + type: 'string', + format: 'hex', + }, + }, + required: ['proofOfPossession', 'blsKey'], + }, + response: { + $id: '/validators/endpoint/validateBLSKeyResponse', + title: 'Bls Key Properties', + type: 'object', + properties: { + valid: { + type: 'boolean', + }, + }, + required: ['valid'], + }, + }, + { + name: 'getValidator', + request: { + $id: '/validators/endpoint/getValidatorRequest', + title: 'Validator properties', + type: 'object', + properties: { + address: { + dataType: 'string', + format: 'lisk32', + }, + }, + required: ['address'], + }, + response: { + $id: '/validators/endpoint/getValidatorResponse', + title: 'Validator properties', + type: 'object', + properties: { + generatorKey: { + type: 'string', + format: 'hex', + }, + blsKey: { + type: 'string', + format: 'hex', + }, + }, + required: ['generatorKey', 'blsKey'], + }, + }, + ], + assets: [], + name: 'validators', + }, { commands: [], events: [ diff --git a/services/blockchain-indexer/tests/constants/parser.js b/services/blockchain-indexer/tests/constants/parser.js index 20f6117ff..d3f5b4eec 100644 --- a/services/blockchain-indexer/tests/constants/parser.js +++ b/services/blockchain-indexer/tests/constants/parser.js @@ -193,10 +193,7 @@ const liskAccount = Object.freeze({ fieldNumber: 2, }, }, - required: [ - 'delegateAddress', - 'amount', - ], + required: ['delegateAddress', 'amount'], }, }, unlocking: { @@ -218,24 +215,14 @@ const liskAccount = Object.freeze({ fieldNumber: 3, }, }, - required: [ - 'delegateAddress', - 'amount', - 'unvoteHeight', - ], + required: ['delegateAddress', 'amount', 'unvoteHeight'], }, }, }, fieldNumber: 5, }, }, - required: [ - 'address', - 'token', - 'sequence', - 'keys', - 'dpos', - ], + required: ['address', 'token', 'sequence', 'keys', 'dpos'], }, }); @@ -254,7 +241,8 @@ const liskBlock = Object.freeze({ maxHeightPrevoted: 18211676, seedReveal: 'bbe7d7e3afb79ff40551b3535c1fbd6b', }, - signature: 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', + signature: + 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', id: 'b179c1f9551f292938fe33f66e910cd78820a78a156efc5e0e14b19a53ef1363', }, payload: [], @@ -273,7 +261,8 @@ const liskBlock = Object.freeze({ maxHeightPrevoted: 18211676, seedReveal: 'bbe7d7e3afb79ff40551b3535c1fbd6b', }, - signature: 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', + signature: + 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', id: 'b179c1f9551f292938fe33f66e910cd78820a78a156efc5e0e14b19a53ef1363', }, payload: [], @@ -294,10 +283,7 @@ const liskBlock = Object.freeze({ fieldNumber: 2, }, }, - required: [ - 'header', - 'payload', - ], + required: ['header', 'payload'], }, }); @@ -315,23 +301,36 @@ const liskBlockHeader = Object.freeze({ maxHeightPrevoted: 18211676, seedReveal: 'bbe7d7e3afb79ff40551b3535c1fbd6b', }, - signature: 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', + signature: + 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', id: 'b179c1f9551f292938fe33f66e910cd78820a78a156efc5e0e14b19a53ef1363', }, expected: { version: 2, timestamp: 1649419370, height: 18211765, - previousBlockID: Buffer.from('82919375aeffdd90f32465cab6df95bdbc0c87698f17a539baad1b8575db4437', 'hex'), - transactionRoot: Buffer.from('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'hex'), - generatorPublicKey: Buffer.from('6cb825715058d2e821aa4af75fbd0da52181910d9fda90fabe73cd533eeb6acb', 'hex'), + previousBlockID: Buffer.from( + '82919375aeffdd90f32465cab6df95bdbc0c87698f17a539baad1b8575db4437', + 'hex', + ), + transactionRoot: Buffer.from( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + 'hex', + ), + generatorPublicKey: Buffer.from( + '6cb825715058d2e821aa4af75fbd0da52181910d9fda90fabe73cd533eeb6acb', + 'hex', + ), reward: BigInt('100000000'), asset: { maxHeightPreviouslyForged: 18211671, maxHeightPrevoted: 18211676, seedReveal: 'bbe7d7e3afb79ff40551b3535c1fbd6b', }, - signature: Buffer.from('b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', 'hex'), + signature: Buffer.from( + 'b82ef12b707669d86b970e73df7a39c3ad9e7a89725b683da67e7e3e2cefbef9645e2791e0f0134edcb07ad51ea46645bfe7666d8a672cd02d518d2c88a3850c', + 'hex', + ), id: 'b179c1f9551f292938fe33f66e910cd78820a78a156efc5e0e14b19a53ef1363', }, schema: { @@ -530,11 +529,7 @@ const liskBlockHeaderAsset = Object.freeze({ schema: { $id: '/genesisBlock/header/asset', type: 'object', - required: [ - 'accounts', - 'initDelegates', - 'initRounds', - ], + required: ['accounts', 'initDelegates', 'initRounds'], properties: { accounts: { type: 'array', @@ -650,10 +645,7 @@ const liskBlockHeaderAsset = Object.freeze({ fieldNumber: 2, }, }, - required: [ - 'delegateAddress', - 'amount', - ], + required: ['delegateAddress', 'amount'], }, }, unlocking: { @@ -675,24 +667,14 @@ const liskBlockHeaderAsset = Object.freeze({ fieldNumber: 3, }, }, - required: [ - 'delegateAddress', - 'amount', - 'unvoteHeight', - ], + required: ['delegateAddress', 'amount', 'unvoteHeight'], }, }, }, fieldNumber: 5, }, }, - required: [ - 'address', - 'token', - 'sequence', - 'keys', - 'dpos', - ], + required: ['address', 'token', 'sequence', 'keys', 'dpos'], }, }, initDelegates: { @@ -742,11 +724,7 @@ const liskBlockHeaderAssetV3 = Object.freeze({ fieldNumber: 3, }, }, - required: [ - 'maxHeightPreviouslyForged', - 'maxHeightPrevoted', - 'seedReveal', - ], + required: ['maxHeightPreviouslyForged', 'maxHeightPrevoted', 'seedReveal'], }, }); @@ -772,9 +750,15 @@ const liskTransaction = Object.freeze({ assetID: 0, nonce: BigInt('4'), fee: BigInt('1000000'), - senderPublicKey: Buffer.from('5133af7944acf5278b0310a11c06134f80ab4546d77d1b0e027c8430a7d2bb92', 'hex'), + senderPublicKey: Buffer.from( + '5133af7944acf5278b0310a11c06134f80ab4546d77d1b0e027c8430a7d2bb92', + 'hex', + ), signatures: [ - Buffer.from('98a9ee2cde8354d014cfe6367d430be2713e102f37d92ab91f03db780407e5bf6d818a45c21c9f5518638dfc3c5365fc2d497b928e0b9d6337988df46a663a02', 'hex'), + Buffer.from( + '98a9ee2cde8354d014cfe6367d430be2713e102f37d92ab91f03db780407e5bf6d818a45c21c9f5518638dfc3c5365fc2d497b928e0b9d6337988df46a663a02', + 'hex', + ), ], asset: { amount: '800000000', @@ -786,14 +770,7 @@ const liskTransaction = Object.freeze({ schema: { $id: 'lisk/transaction', type: 'object', - required: [ - 'moduleID', - 'assetID', - 'nonce', - 'fee', - 'senderPublicKey', - 'asset', - ], + required: ['moduleID', 'assetID', 'nonce', 'fee', 'senderPublicKey', 'asset'], properties: { moduleID: { dataType: 'uint32', @@ -853,11 +830,7 @@ const liskTransactionAssets = Object.freeze([ $id: 'lisk/transfer-asset', title: 'Transfer transaction asset', type: 'object', - required: [ - 'amount', - 'recipientAddress', - 'data', - ], + required: ['amount', 'recipientAddress', 'data'], properties: { amount: { dataType: 'uint64', @@ -898,11 +871,7 @@ const liskTransactionAssets = Object.freeze([ schema: { $id: 'lisk/keys/register', type: 'object', - required: [ - 'numberOfSignatures', - 'optionalKeys', - 'mandatoryKeys', - ], + required: ['numberOfSignatures', 'optionalKeys', 'mandatoryKeys'], properties: { numberOfSignatures: { dataType: 'uint32', @@ -949,9 +918,7 @@ const liskTransactionAssets = Object.freeze([ schema: { $id: 'lisk/dpos/register', type: 'object', - required: [ - 'username', - ], + required: ['username'], properties: { username: { dataType: 'string', @@ -1010,9 +977,7 @@ const liskTransactionAssets = Object.freeze([ schema: { $id: 'lisk/dpos/vote', type: 'object', - required: [ - 'votes', - ], + required: ['votes'], properties: { votes: { type: 'array', @@ -1020,10 +985,7 @@ const liskTransactionAssets = Object.freeze([ maxItems: 20, items: { type: 'object', - required: [ - 'delegateAddress', - 'amount', - ], + required: ['delegateAddress', 'amount'], properties: { delegateAddress: { dataType: 'bytes', @@ -1098,9 +1060,7 @@ const liskTransactionAssets = Object.freeze([ schema: { $id: 'lisk/dpos/unlock', type: 'object', - required: [ - 'unlockObjects', - ], + required: ['unlockObjects'], properties: { unlockObjects: { type: 'array', @@ -1108,11 +1068,7 @@ const liskTransactionAssets = Object.freeze([ maxItems: 20, items: { type: 'object', - required: [ - 'delegateAddress', - 'amount', - 'unvoteHeight', - ], + required: ['delegateAddress', 'amount', 'unvoteHeight'], properties: { delegateAddress: { dataType: 'bytes', @@ -1154,7 +1110,8 @@ const liskTransactionAssets = Object.freeze([ maxHeightPrevoted: 18027210, seedReveal: '6187c9991e64617cab4c54aa26e72431', }, - signature: 'f2d578a2b3f4d1244ac13b280be66080192943270c9be6b2304b7f2d3adf6c3c87d9faca7971b33aeb42c21fc58e9e26a5beffbad7dccc21ab859b89585b920b', + signature: + 'f2d578a2b3f4d1244ac13b280be66080192943270c9be6b2304b7f2d3adf6c3c87d9faca7971b33aeb42c21fc58e9e26a5beffbad7dccc21ab859b89585b920b', }, header2: { version: 2, @@ -1169,7 +1126,8 @@ const liskTransactionAssets = Object.freeze([ maxHeightPrevoted: 18142247, seedReveal: '6187c9991e64617cab4c54aa26e72431', }, - signature: '4e01276f227080fdb91565567511744fb45b9aaa791cf277ba2124f751ad9214d81858dc1b6318f61b0002916484a139aebfaa6f60b7da7d792e160fbeee0608', + signature: + '4e01276f227080fdb91565567511744fb45b9aaa791cf277ba2124f751ad9214d81858dc1b6318f61b0002916484a139aebfaa6f60b7da7d792e160fbeee0608', }, }, expected: { @@ -1177,40 +1135,61 @@ const liskTransactionAssets = Object.freeze([ version: 2, timestamp: 1647573700, height: 18027287, - previousBlockID: Buffer.from('0b6b36182d28c6d88ecbc03427e4e9b3623a987873bb3696ffb77bbdf033b888', 'hex'), - transactionRoot: Buffer.from('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'hex'), - generatorPublicKey: Buffer.from('d26f57478f8d30784ba36658873f84d5134da7eee31ada7d29183a4fe9cdafde', 'hex'), + previousBlockID: Buffer.from( + '0b6b36182d28c6d88ecbc03427e4e9b3623a987873bb3696ffb77bbdf033b888', + 'hex', + ), + transactionRoot: Buffer.from( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + 'hex', + ), + generatorPublicKey: Buffer.from( + 'd26f57478f8d30784ba36658873f84d5134da7eee31ada7d29183a4fe9cdafde', + 'hex', + ), reward: BigInt('100000000'), asset: { maxHeightPreviouslyForged: 0, maxHeightPrevoted: 18027210, seedReveal: Buffer.from('6187c9991e64617cab4c54aa26e72431', 'hex'), }, - signature: Buffer.from('f2d578a2b3f4d1244ac13b280be66080192943270c9be6b2304b7f2d3adf6c3c87d9faca7971b33aeb42c21fc58e9e26a5beffbad7dccc21ab859b89585b920b', 'hex'), + signature: Buffer.from( + 'f2d578a2b3f4d1244ac13b280be66080192943270c9be6b2304b7f2d3adf6c3c87d9faca7971b33aeb42c21fc58e9e26a5beffbad7dccc21ab859b89585b920b', + 'hex', + ), }, header2: { version: 2, timestamp: 1648724430, height: 18142315, - previousBlockID: Buffer.from('2c2765f67dda9c1e57d6bd3d8ca8da3db8a9354bf579d93e79d88635c0ecc6b6', 'hex'), - transactionRoot: Buffer.from('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'hex'), - generatorPublicKey: Buffer.from('d26f57478f8d30784ba36658873f84d5134da7eee31ada7d29183a4fe9cdafde', 'hex'), + previousBlockID: Buffer.from( + '2c2765f67dda9c1e57d6bd3d8ca8da3db8a9354bf579d93e79d88635c0ecc6b6', + 'hex', + ), + transactionRoot: Buffer.from( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + 'hex', + ), + generatorPublicKey: Buffer.from( + 'd26f57478f8d30784ba36658873f84d5134da7eee31ada7d29183a4fe9cdafde', + 'hex', + ), reward: BigInt('100000000'), asset: { maxHeightPreviouslyForged: 0, maxHeightPrevoted: 18142247, seedReveal: Buffer.from('6187c9991e64617cab4c54aa26e72431', 'hex'), }, - signature: Buffer.from('4e01276f227080fdb91565567511744fb45b9aaa791cf277ba2124f751ad9214d81858dc1b6318f61b0002916484a139aebfaa6f60b7da7d792e160fbeee0608', 'hex'), + signature: Buffer.from( + '4e01276f227080fdb91565567511744fb45b9aaa791cf277ba2124f751ad9214d81858dc1b6318f61b0002916484a139aebfaa6f60b7da7d792e160fbeee0608', + 'hex', + ), }, }, schema: { $id: 'lisk/dpos/pom', type: 'object', - required: [ - 'header1', - 'header2', - ], + required: ['header1', 'header2'], properties: { header1: { $id: 'block-header1', @@ -1261,11 +1240,7 @@ const liskTransactionAssets = Object.freeze([ fieldNumber: 3, }, }, - required: [ - 'maxHeightPreviouslyForged', - 'maxHeightPrevoted', - 'seedReveal', - ], + required: ['maxHeightPreviouslyForged', 'maxHeightPrevoted', 'seedReveal'], }, signature: { dataType: 'bytes', @@ -1333,11 +1308,7 @@ const liskTransactionAssets = Object.freeze([ fieldNumber: 3, }, }, - required: [ - 'maxHeightPreviouslyForged', - 'maxHeightPrevoted', - 'seedReveal', - ], + required: ['maxHeightPreviouslyForged', 'maxHeightPrevoted', 'seedReveal'], }, signature: { dataType: 'bytes', @@ -1374,9 +1345,7 @@ const liskTransactionAssets = Object.freeze([ $id: 'lisk/legacyAccount/reclaim', title: 'Reclaim transaction asset', type: 'object', - required: [ - 'amount', - ], + required: ['amount'], properties: { amount: { dataType: 'uint64', @@ -1385,7 +1354,6 @@ const liskTransactionAssets = Object.freeze([ }, }, }, - ]); module.exports = { diff --git a/services/blockchain-indexer/tests/constants/schemas.js b/services/blockchain-indexer/tests/constants/schemas.js index a14d09022..7482efda5 100644 --- a/services/blockchain-indexer/tests/constants/schemas.js +++ b/services/blockchain-indexer/tests/constants/schemas.js @@ -23,19 +23,14 @@ const schemas = { schema: { $id: '/auth/module/genesis', type: 'object', - required: [ - 'authDataSubstore', - ], + required: ['authDataSubstore'], properties: { authDataSubstore: { type: 'array', fieldNumber: 1, items: { type: 'object', - required: [ - 'address', - 'authAccount', - ], + required: ['address', 'authAccount'], properties: { address: { dataType: 'bytes', @@ -44,12 +39,7 @@ const schemas = { authAccount: { type: 'object', fieldNumber: 2, - required: [ - 'nonce', - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - ], + required: ['nonce', 'numberOfSignatures', 'mandatoryKeys', 'optionalKeys'], properties: { nonce: { dataType: 'uint64', @@ -113,12 +103,7 @@ const schemas = { fieldNumber: 3, items: { type: 'object', - required: [ - 'chainID', - 'chainData', - 'channelData', - 'chainValidators', - ], + required: ['chainID', 'chainData', 'channelData', 'chainValidators'], properties: { chainID: { dataType: 'bytes', @@ -129,11 +114,7 @@ const schemas = { chainData: { $id: '/modules/interoperability/chainData', type: 'object', - required: [ - 'name', - 'lastCertificate', - 'status', - ], + required: ['name', 'lastCertificate', 'status'], properties: { name: { dataType: 'string', @@ -144,12 +125,7 @@ const schemas = { lastCertificate: { type: 'object', fieldNumber: 2, - required: [ - 'height', - 'timestamp', - 'stateRoot', - 'validatorsHash', - ], + required: ['height', 'timestamp', 'stateRoot', 'validatorsHash'], properties: { height: { dataType: 'uint32', @@ -194,11 +170,7 @@ const schemas = { inbox: { type: 'object', fieldNumber: 1, - required: [ - 'appendPath', - 'size', - 'root', - ], + required: ['appendPath', 'size', 'root'], properties: { appendPath: { type: 'array', @@ -224,11 +196,7 @@ const schemas = { outbox: { type: 'object', fieldNumber: 2, - required: [ - 'appendPath', - 'size', - 'root', - ], + required: ['appendPath', 'size', 'root'], properties: { appendPath: { type: 'array', @@ -273,10 +241,7 @@ const schemas = { chainValidators: { $id: '/modules/interoperability/chainValidators', type: 'object', - required: [ - 'activeValidators', - 'certificateThreshold', - ], + required: ['activeValidators', 'certificateThreshold'], properties: { activeValidators: { type: 'array', @@ -285,10 +250,7 @@ const schemas = { maxItems: 199, items: { type: 'object', - required: [ - 'blsKey', - 'bftWeight', - ], + required: ['blsKey', 'bftWeight'], properties: { blsKey: { dataType: 'bytes', @@ -318,10 +280,7 @@ const schemas = { fieldNumber: 4, items: { type: 'object', - required: [ - 'chainID', - 'terminatedStateAccount', - ], + required: ['chainID', 'terminatedStateAccount'], properties: { chainID: { dataType: 'bytes', @@ -332,11 +291,7 @@ const schemas = { terminatedStateAccount: { $id: '/modules/interoperability/terminatedState', type: 'object', - required: [ - 'stateRoot', - 'mainchainStateRoot', - 'initialized', - ], + required: ['stateRoot', 'mainchainStateRoot', 'initialized'], properties: { stateRoot: { dataType: 'bytes', @@ -365,10 +320,7 @@ const schemas = { fieldNumber: 5, items: { type: 'object', - required: [ - 'chainID', - 'terminatedOutboxAccount', - ], + required: ['chainID', 'terminatedOutboxAccount'], properties: { chainID: { dataType: 'bytes', @@ -379,11 +331,7 @@ const schemas = { terminatedOutboxAccount: { $id: '/modules/interoperability/terminatedOutbox', type: 'object', - required: [ - 'outboxRoot', - 'outboxSize', - 'partnerChainInboxSize', - ], + required: ['outboxRoot', 'outboxSize', 'partnerChainInboxSize'], properties: { outboxRoot: { dataType: 'bytes', @@ -414,19 +362,14 @@ const schemas = { schema: { $id: '/legacy/module/genesis', type: 'object', - required: [ - 'accounts', - ], + required: ['accounts'], properties: { accounts: { type: 'array', fieldNumber: 1, items: { type: 'object', - required: [ - 'address', - 'balance', - ], + required: ['address', 'balance'], properties: { address: { dataType: 'bytes', @@ -450,11 +393,7 @@ const schemas = { schema: { $id: '/pos/module/genesis', type: 'object', - required: [ - 'validators', - 'stakers', - 'genesisData', - ], + required: ['validators', 'stakers', 'genesisData'], properties: { validators: { type: 'array', @@ -538,10 +477,7 @@ const schemas = { fieldNumber: 12, items: { type: 'object', - required: [ - 'tokenID', - 'coefficient', - ], + required: ['tokenID', 'coefficient'], properties: { tokenID: { dataType: 'bytes', @@ -565,11 +501,7 @@ const schemas = { fieldNumber: 2, items: { type: 'object', - required: [ - 'address', - 'stakes', - 'pendingUnlocks', - ], + required: ['address', 'stakes', 'pendingUnlocks'], properties: { address: { dataType: 'bytes', @@ -581,11 +513,7 @@ const schemas = { fieldNumber: 2, items: { type: 'object', - required: [ - 'validatorAddress', - 'amount', - 'sharingCoefficients', - ], + required: ['validatorAddress', 'amount', 'sharingCoefficients'], properties: { validatorAddress: { dataType: 'bytes', @@ -601,10 +529,7 @@ const schemas = { fieldNumber: 3, items: { type: 'object', - required: [ - 'tokenID', - 'coefficient', - ], + required: ['tokenID', 'coefficient'], properties: { tokenID: { dataType: 'bytes', @@ -628,11 +553,7 @@ const schemas = { fieldNumber: 3, items: { type: 'object', - required: [ - 'validatorAddress', - 'amount', - 'unstakeHeight', - ], + required: ['validatorAddress', 'amount', 'unstakeHeight'], properties: { validatorAddress: { dataType: 'bytes', @@ -656,10 +577,7 @@ const schemas = { genesisData: { type: 'object', fieldNumber: 3, - required: [ - 'initRounds', - 'initValidators', - ], + required: ['initRounds', 'initValidators'], properties: { initRounds: { dataType: 'uint32', @@ -692,9 +610,7 @@ const schemas = { maxLength: 16, }, }, - required: [ - 'seedReveal', - ], + required: ['seedReveal'], }, }, { @@ -703,24 +619,14 @@ const schemas = { schema: { $id: '/token/module/genesis', type: 'object', - required: [ - 'userSubstore', - 'supplySubstore', - 'escrowSubstore', - 'supportedTokensSubstore', - ], + required: ['userSubstore', 'supplySubstore', 'escrowSubstore', 'supportedTokensSubstore'], properties: { userSubstore: { type: 'array', fieldNumber: 1, items: { type: 'object', - required: [ - 'address', - 'tokenID', - 'availableBalance', - 'lockedBalances', - ], + required: ['address', 'tokenID', 'availableBalance', 'lockedBalances'], properties: { address: { dataType: 'bytes', @@ -742,10 +648,7 @@ const schemas = { fieldNumber: 4, items: { type: 'object', - required: [ - 'module', - 'amount', - ], + required: ['module', 'amount'], properties: { module: { dataType: 'string', @@ -768,10 +671,7 @@ const schemas = { fieldNumber: 2, items: { type: 'object', - required: [ - 'tokenID', - 'totalSupply', - ], + required: ['tokenID', 'totalSupply'], properties: { tokenID: { dataType: 'bytes', @@ -791,11 +691,7 @@ const schemas = { fieldNumber: 3, items: { type: 'object', - required: [ - 'escrowChainID', - 'tokenID', - 'amount', - ], + required: ['escrowChainID', 'tokenID', 'amount'], properties: { escrowChainID: { dataType: 'bytes', @@ -821,10 +717,7 @@ const schemas = { fieldNumber: 4, items: { type: 'object', - required: [ - 'chainID', - 'supportedTokenIDs', - ], + required: ['chainID', 'supportedTokenIDs'], properties: { chainID: { dataType: 'bytes', @@ -891,12 +784,7 @@ const schemas = { fieldNumber: 4, }, }, - required: [ - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - 'signatures', - ], + required: ['numberOfSignatures', 'mandatoryKeys', 'optionalKeys', 'signatures'], }, }, { @@ -925,11 +813,7 @@ const schemas = { activeValidatorsUpdate: { type: 'object', fieldNumber: 3, - required: [ - 'blsKeysUpdate', - 'bftWeightsUpdate', - 'bftWeightsUpdateBitmap', - ], + required: ['blsKeysUpdate', 'bftWeightsUpdate', 'bftWeightsUpdateBitmap'], properties: { blsKeysUpdate: { type: 'array', @@ -960,11 +844,7 @@ const schemas = { inboxUpdate: { type: 'object', fieldNumber: 5, - required: [ - 'crossChainMessages', - 'messageWitnessHashes', - 'outboxRootWitness', - ], + required: ['crossChainMessages', 'messageWitnessHashes', 'outboxRootWitness'], properties: { crossChainMessages: { type: 'array', @@ -985,10 +865,7 @@ const schemas = { outboxRootWitness: { type: 'object', fieldNumber: 3, - required: [ - 'bitmap', - 'siblingHashes', - ], + required: ['bitmap', 'siblingHashes'], properties: { bitmap: { dataType: 'bytes', @@ -1015,12 +892,7 @@ const schemas = { schema: { $id: '/modules/interoperability/mainchain/messageRecoveryInitialization', type: 'object', - required: [ - 'chainID', - 'channel', - 'bitmap', - 'siblingHashes', - ], + required: ['chainID', 'channel', 'bitmap', 'siblingHashes'], properties: { chainID: { dataType: 'bytes', @@ -1053,12 +925,7 @@ const schemas = { schema: { $id: '/modules/interoperability/mainchain/messageRecovery', type: 'object', - required: [ - 'chainID', - 'crossChainMessages', - 'idxs', - 'siblingHashes', - ], + required: ['chainID', 'crossChainMessages', 'idxs', 'siblingHashes'], properties: { chainID: { dataType: 'bytes', @@ -1097,12 +964,7 @@ const schemas = { schema: { $id: '/modules/interoperability/mainchain/sidechainRegistration', type: 'object', - required: [ - 'chainID', - 'name', - 'sidechainValidators', - 'sidechainCertificateThreshold', - ], + required: ['chainID', 'name', 'sidechainValidators', 'sidechainCertificateThreshold'], properties: { chainID: { dataType: 'bytes', @@ -1120,10 +982,7 @@ const schemas = { type: 'array', items: { type: 'object', - required: [ - 'blsKey', - 'bftWeight', - ], + required: ['blsKey', 'bftWeight'], properties: { blsKey: { dataType: 'bytes', @@ -1153,12 +1012,7 @@ const schemas = { schema: { $id: '/modules/interoperability/mainchain/commands/stateRecovery', type: 'object', - required: [ - 'chainID', - 'module', - 'storeEntries', - 'siblingHashes', - ], + required: ['chainID', 'module', 'storeEntries', 'siblingHashes'], properties: { chainID: { dataType: 'bytes', @@ -1197,12 +1051,7 @@ const schemas = { fieldNumber: 4, }, }, - required: [ - 'substorePrefix', - 'storeKey', - 'storeValue', - 'bitmap', - ], + required: ['substorePrefix', 'storeKey', 'storeValue', 'bitmap'], }, }, siblingHashes: { @@ -1222,9 +1071,7 @@ const schemas = { schema: { $id: '/modules/interoperability/mainchain/terminateSidechainForLiveness', type: 'object', - required: [ - 'chainID', - ], + required: ['chainID'], properties: { chainID: { dataType: 'bytes', @@ -1240,9 +1087,7 @@ const schemas = { schema: { $id: '/legacy/command/reclaimLSKParams', type: 'object', - required: [ - 'amount', - ], + required: ['amount'], properties: { amount: { dataType: 'uint64', @@ -1256,11 +1101,7 @@ const schemas = { schema: { $id: '/legacy/command/registerKeysParams', type: 'object', - required: [ - 'blsKey', - 'proofOfPossession', - 'generatorKey', - ], + required: ['blsKey', 'proofOfPossession', 'generatorKey'], properties: { blsKey: { dataType: 'bytes', @@ -1288,12 +1129,7 @@ const schemas = { schema: { $id: '/pos/command/registerValidatorParams', type: 'object', - required: [ - 'name', - 'blsKey', - 'proofOfPossession', - 'generatorKey', - ], + required: ['name', 'blsKey', 'proofOfPossession', 'generatorKey'], properties: { name: { dataType: 'string', @@ -1327,10 +1163,7 @@ const schemas = { schema: { $id: '/pos/command/reportMisbehaviorParams', type: 'object', - required: [ - 'header1', - 'header2', - ], + required: ['header1', 'header2'], properties: { header1: { dataType: 'bytes', @@ -1356,9 +1189,7 @@ const schemas = { schema: { $id: '/pos/command/updateGeneratorKeyParams', type: 'object', - required: [ - 'generatorKey', - ], + required: ['generatorKey'], properties: { generatorKey: { dataType: 'bytes', @@ -1374,9 +1205,7 @@ const schemas = { schema: { $id: '/pos/command/stakeValidatorParams', type: 'object', - required: [ - 'stakes', - ], + required: ['stakes'], properties: { stakes: { type: 'array', @@ -1385,10 +1214,7 @@ const schemas = { maxItems: 20, items: { type: 'object', - required: [ - 'validatorAddress', - 'amount', - ], + required: ['validatorAddress', 'amount'], properties: { validatorAddress: { dataType: 'bytes', @@ -1410,9 +1236,7 @@ const schemas = { schema: { $id: '/pos/command/changeCommissionCommandParams', type: 'object', - required: [ - 'newCommission', - ], + required: ['newCommission'], properties: { newCommission: { dataType: 'uint32', @@ -1436,12 +1260,7 @@ const schemas = { $id: '/lisk/transferParams', title: 'Transfer transaction params', type: 'object', - required: [ - 'tokenID', - 'amount', - 'recipientAddress', - 'data', - ], + required: ['tokenID', 'amount', 'recipientAddress', 'data'], properties: { tokenID: { dataType: 'bytes', @@ -1530,11 +1349,7 @@ const schemas = { schema: { $id: '/auth/events/multisigRegData', type: 'object', - required: [ - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - ], + required: ['numberOfSignatures', 'mandatoryKeys', 'optionalKeys'], properties: { numberOfSignatures: { dataType: 'uint32', @@ -1618,10 +1433,7 @@ const schemas = { schema: { $id: '/reward/events/rewardMintedData', type: 'object', - required: [ - 'amount', - 'reduction', - ], + required: ['amount', 'reduction'], properties: { amount: { dataType: 'uint64', @@ -1640,12 +1452,7 @@ const schemas = { schema: { $id: '/fee/events/generatorFeeProcessed', type: 'object', - required: [ - 'senderAddress', - 'generatorAddress', - 'burntAmount', - 'generatorAmount', - ], + required: ['senderAddress', 'generatorAddress', 'burntAmount', 'generatorAmount'], properties: { senderAddress: { dataType: 'bytes', @@ -1674,12 +1481,7 @@ const schemas = { schema: { $id: '/fee/events/relayerFeeProcessed', type: 'object', - required: [ - 'ccmID', - 'relayerAddress', - 'burntAmount', - 'relayerAmount', - ], + required: ['ccmID', 'relayerAddress', 'burntAmount', 'relayerAmount'], properties: { ccmID: { dataType: 'bytes', @@ -1718,11 +1520,7 @@ const schemas = { schema: { $id: '/modules/interoperability/chainData', type: 'object', - required: [ - 'name', - 'lastCertificate', - 'status', - ], + required: ['name', 'lastCertificate', 'status'], properties: { name: { dataType: 'string', @@ -1733,12 +1531,7 @@ const schemas = { lastCertificate: { type: 'object', fieldNumber: 2, - required: [ - 'height', - 'timestamp', - 'stateRoot', - 'validatorsHash', - ], + required: ['height', 'timestamp', 'stateRoot', 'validatorsHash'], properties: { height: { dataType: 'uint32', @@ -1775,11 +1568,7 @@ const schemas = { schema: { $id: '/interoperability/events/ccmProcessed', type: 'object', - required: [ - 'ccm', - 'result', - 'code', - ], + required: ['ccm', 'result', 'code'], properties: { ccm: { fieldNumber: 1, @@ -1854,9 +1643,7 @@ const schemas = { schema: { $id: '/interoperability/events/ccmSendSuccess', type: 'object', - required: [ - 'ccm', - ], + required: ['ccm'], properties: { ccm: { fieldNumber: 1, @@ -1923,10 +1710,7 @@ const schemas = { schema: { $id: '/interoperability/events/ccmSendFail', type: 'object', - required: [ - 'ccm', - 'code', - ], + required: ['ccm', 'code'], properties: { ccm: { $id: '/modules/interoperability/ccm', @@ -2007,11 +1791,7 @@ const schemas = { schema: { $id: '/modules/interoperability/terminatedState', type: 'object', - required: [ - 'stateRoot', - 'mainchainStateRoot', - 'initialized', - ], + required: ['stateRoot', 'mainchainStateRoot', 'initialized'], properties: { stateRoot: { dataType: 'bytes', @@ -2038,11 +1818,7 @@ const schemas = { schema: { $id: '/modules/interoperability/terminatedOutbox', type: 'object', - required: [ - 'outboxRoot', - 'outboxSize', - 'partnerChainInboxSize', - ], + required: ['outboxRoot', 'outboxSize', 'partnerChainInboxSize'], properties: { outboxRoot: { dataType: 'bytes', @@ -2094,11 +1870,7 @@ const schemas = { schema: { $id: 'lisk/legacy/accountReclaimedEventData', type: 'object', - required: [ - 'legacyAddress', - 'address', - 'amount', - ], + required: ['legacyAddress', 'address', 'amount'], properties: { legacyAddress: { dataType: 'bytes', @@ -2123,11 +1895,7 @@ const schemas = { schema: { $id: 'lisk/legacy/keysRegisteredEventData', type: 'object', - required: [ - 'address', - 'generatorKey', - 'blsKey', - ], + required: ['address', 'generatorKey', 'blsKey'], properties: { address: { dataType: 'bytes', @@ -2153,10 +1921,7 @@ const schemas = { schema: { $id: '/pos/events/validatorBannedData', type: 'object', - required: [ - 'address', - 'height', - ], + required: ['address', 'height'], properties: { address: { dataType: 'bytes', @@ -2176,10 +1941,7 @@ const schemas = { schema: { $id: '/pos/events/punishValidatorData', type: 'object', - required: [ - 'address', - 'height', - ], + required: ['address', 'height'], properties: { address: { dataType: 'bytes', @@ -2199,10 +1961,7 @@ const schemas = { schema: { $id: '/pos/events/registerValidatorData', type: 'object', - required: [ - 'address', - 'name', - ], + required: ['address', 'name'], properties: { address: { dataType: 'bytes', @@ -2222,12 +1981,7 @@ const schemas = { schema: { $id: '/pos/events/validatorStakedData', type: 'object', - required: [ - 'senderAddress', - 'validatorAddress', - 'amount', - 'result', - ], + required: ['senderAddress', 'validatorAddress', 'amount', 'result'], properties: { senderAddress: { dataType: 'bytes', @@ -2256,11 +2010,7 @@ const schemas = { schema: { $id: '/pos/events/commissionChangeData', type: 'object', - required: [ - 'validatorAddress', - 'oldCommission', - 'newCommission', - ], + required: ['validatorAddress', 'oldCommission', 'newCommission'], properties: { validatorAddress: { dataType: 'bytes', @@ -2284,12 +2034,7 @@ const schemas = { schema: { $id: '/pos/events/rewardsAssignedData', type: 'object', - required: [ - 'stakerAddress', - 'validatorAddress', - 'tokenID', - 'amount', - ], + required: ['stakerAddress', 'validatorAddress', 'tokenID', 'amount'], properties: { stakerAddress: { dataType: 'bytes', @@ -2320,13 +2065,7 @@ const schemas = { schema: { $id: '/token/events/transfer', type: 'object', - required: [ - 'senderAddress', - 'recipientAddress', - 'tokenID', - 'amount', - 'result', - ], + required: ['senderAddress', 'recipientAddress', 'tokenID', 'amount', 'result'], properties: { senderAddress: { dataType: 'bytes', @@ -2457,12 +2196,7 @@ const schemas = { schema: { $id: '/token/events/mint', type: 'object', - required: [ - 'address', - 'tokenID', - 'amount', - 'result', - ], + required: ['address', 'tokenID', 'amount', 'result'], properties: { address: { dataType: 'bytes', @@ -2492,12 +2226,7 @@ const schemas = { schema: { $id: '/token/events/burn', type: 'object', - required: [ - 'address', - 'tokenID', - 'amount', - 'result', - ], + required: ['address', 'tokenID', 'amount', 'result'], properties: { address: { dataType: 'bytes', @@ -2527,13 +2256,7 @@ const schemas = { schema: { $id: '/token/events/lock', type: 'object', - required: [ - 'address', - 'module', - 'tokenID', - 'amount', - 'result', - ], + required: ['address', 'module', 'tokenID', 'amount', 'result'], properties: { address: { dataType: 'bytes', @@ -2569,13 +2292,7 @@ const schemas = { schema: { $id: '/token/events/unlock', type: 'object', - required: [ - 'address', - 'module', - 'tokenID', - 'amount', - 'result', - ], + required: ['address', 'module', 'tokenID', 'amount', 'result'], properties: { address: { dataType: 'bytes', @@ -2611,10 +2328,7 @@ const schemas = { schema: { $id: '/token/events/initializeTokenEvent', type: 'object', - required: [ - 'tokenID', - 'result', - ], + required: ['tokenID', 'result'], properties: { tokenID: { dataType: 'bytes', @@ -2635,12 +2349,7 @@ const schemas = { schema: { $id: '/token/events/initializeUserAccount', type: 'object', - required: [ - 'address', - 'tokenID', - 'initializationFee', - 'result', - ], + required: ['address', 'tokenID', 'initializationFee', 'result'], properties: { address: { dataType: 'bytes', @@ -2670,12 +2379,7 @@ const schemas = { schema: { $id: '/token/events/initializeEscrowAccount', type: 'object', - required: [ - 'chainID', - 'tokenID', - 'initializationFee', - 'result', - ], + required: ['chainID', 'tokenID', 'initializationFee', 'result'], properties: { chainID: { dataType: 'bytes', @@ -2706,12 +2410,7 @@ const schemas = { schema: { $id: '/token/events/recover', type: 'object', - required: [ - 'terminatedChainID', - 'tokenID', - 'amount', - 'result', - ], + required: ['terminatedChainID', 'tokenID', 'amount', 'result'], properties: { terminatedChainID: { dataType: 'bytes', @@ -2742,12 +2441,7 @@ const schemas = { schema: { $id: '/token/events/beforeCCCExecution', type: 'object', - required: [ - 'ccmID', - 'messageFeeTokenID', - 'relayerAddress', - 'result', - ], + required: ['ccmID', 'messageFeeTokenID', 'relayerAddress', 'result'], properties: { ccmID: { dataType: 'bytes', @@ -2779,11 +2473,7 @@ const schemas = { schema: { $id: '/token/events/beforeCCMForwarding', type: 'object', - required: [ - 'ccmID', - 'messageFeeTokenID', - 'result', - ], + required: ['ccmID', 'messageFeeTokenID', 'result'], properties: { ccmID: { dataType: 'bytes', @@ -2828,9 +2518,7 @@ const schemas = { schema: { $id: '/token/events/allTokensFromChainSupported', type: 'object', - required: [ - 'chainID', - ], + required: ['chainID'], properties: { chainID: { dataType: 'bytes', @@ -2847,9 +2535,7 @@ const schemas = { schema: { $id: '/token/events/allTokensFromChainSupportRemoved', type: 'object', - required: [ - 'chainID', - ], + required: ['chainID'], properties: { chainID: { dataType: 'bytes', @@ -2866,9 +2552,7 @@ const schemas = { schema: { $id: '/token/events/tokenIDSupported', type: 'object', - required: [ - 'tokenID', - ], + required: ['tokenID'], properties: { tokenID: { dataType: 'bytes', @@ -2885,9 +2569,7 @@ const schemas = { schema: { $id: '/token/events/tokenIDSupportRemoved', type: 'object', - required: [ - 'tokenID', - ], + required: ['tokenID'], properties: { tokenID: { dataType: 'bytes', @@ -2904,10 +2586,7 @@ const schemas = { schema: { $id: '/validators/event/generatorKeyRegData', type: 'object', - required: [ - 'generatorKey', - 'result', - ], + required: ['generatorKey', 'result'], properties: { generatorKey: { dataType: 'bytes', @@ -2928,11 +2607,7 @@ const schemas = { schema: { $id: '/validators/event/blsKeyRegData', type: 'object', - required: [ - 'blsKey', - 'proofOfPossession', - 'result', - ], + required: ['blsKey', 'proofOfPossession', 'result'], properties: { blsKey: { dataType: 'bytes', @@ -2978,11 +2653,7 @@ const schemas = { fieldNumber: 3, }, }, - required: [ - 'header', - 'transactions', - 'assets', - ], + required: ['header', 'transactions', 'assets'], }, }, header: { @@ -3046,11 +2717,7 @@ const schemas = { aggregateCommit: { type: 'object', fieldNumber: 14, - required: [ - 'height', - 'aggregationBits', - 'certificateSignature', - ], + required: ['height', 'aggregationBits', 'certificateSignature'], properties: { height: { dataType: 'uint32', @@ -3094,10 +2761,7 @@ const schemas = { schema: { $id: '/block/asset/3', type: 'object', - required: [ - 'module', - 'data', - ], + required: ['module', 'data'], properties: { module: { dataType: 'string', @@ -3114,14 +2778,7 @@ const schemas = { schema: { $id: '/lisk/transaction', type: 'object', - required: [ - 'module', - 'command', - 'nonce', - 'fee', - 'senderPublicKey', - 'params', - ], + required: ['module', 'command', 'nonce', 'fee', 'senderPublicKey', 'params'], properties: { module: { dataType: 'string', @@ -3167,14 +2824,7 @@ const schemas = { schema: { $id: '/block/event', type: 'object', - required: [ - 'module', - 'name', - 'data', - 'topics', - 'height', - 'index', - ], + required: ['module', 'name', 'data', 'topics', 'height', 'index'], properties: { module: { dataType: 'string', @@ -3216,9 +2866,7 @@ const schemas = { schema: { $id: '/block/event/standard', type: 'object', - required: [ - 'success', - ], + required: ['success'], properties: { success: { dataType: 'boolean', @@ -3292,13 +2940,7 @@ const schemas = { schema: { $id: '/auth/command/regMultisigMsg', type: 'object', - required: [ - 'address', - 'nonce', - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - ], + required: ['address', 'nonce', 'numberOfSignatures', 'mandatoryKeys', 'optionalKeys'], properties: { address: { dataType: 'bytes', diff --git a/services/blockchain-indexer/tests/functional/shared/genesisBlock.test.js b/services/blockchain-indexer/tests/functional/shared/genesisBlock.test.js index 8bc63d33a..3fa2126eb 100644 --- a/services/blockchain-indexer/tests/functional/shared/genesisBlock.test.js +++ b/services/blockchain-indexer/tests/functional/shared/genesisBlock.test.js @@ -19,9 +19,7 @@ const { getDBConnection, startDBTransaction, commitDBTransaction, - KVStore: { - getKeyValueTable, - }, + KVStore: { getKeyValueTable }, }, }, } = require('lisk-service-framework'); @@ -43,6 +41,7 @@ const MYSQL_ENDPOINT = config.endpoints.mysql; const keyValueTable = getKeyValueTable(); const broker = new ServiceBroker({ + nodeID: 'genesisBlock', transporter: config.transporter, logLevel: 'warn', requestTimeout: 15 * 1000, @@ -53,18 +52,21 @@ let totalLockedKey; let totalStakedKey; let totalSelfStakedKey; +const bigIntZero = BigInt('0'); + beforeAll(async () => { await broker.start(); await request.setAppContext({ - requestRpc: (method, params) => new Promise((resolve, reject) => { - broker - .call(method, params) - .then(res => resolve(res)) - .catch(err => { - console.error(`Error occurred! ${err.message}`); - reject(err); - }); - }), + requestRpc: (method, params) => + new Promise((resolve, reject) => { + broker + .call(method, params) + .then(res => resolve(res)) + .catch(err => { + console.error(`Error occurred! ${err.message}`); + reject(err); + }); + }), }); connection = await getDBConnection(MYSQL_ENDPOINT); @@ -76,7 +78,7 @@ beforeAll(async () => { }); afterAll(() => broker.stop()); -xdescribe('Test indexTokenModuleAssets method', () => { +describe('Test indexTokenModuleAssets method', () => { beforeEach(async () => { await keyValueTable.delete(totalLockedKey); }); @@ -88,7 +90,7 @@ xdescribe('Test indexTokenModuleAssets method', () => { await indexTokenModuleAssets(); const totalLockedAfter = await keyValueTable.get(totalLockedKey); - expect(totalLockedAfter > BigInt(0)).toEqual(true); + expect(totalLockedAfter).toBeGreaterThan(bigIntZero); }); it('should correctly index Token Module Asset only after commit when called with dbTrx', async () => { @@ -102,11 +104,11 @@ xdescribe('Test indexTokenModuleAssets method', () => { await commitDBTransaction(dbTrx); const totalLockedAfter = await keyValueTable.get(totalLockedKey); - expect(totalLockedAfter > BigInt(0)).toEqual(true); + expect(totalLockedAfter).toBeGreaterThan(bigIntZero); }); }); -xdescribe('Test indexPosModuleAssets method', () => { +describe('Test indexPosModuleAssets method', () => { beforeEach(async () => { await keyValueTable.delete(totalStakedKey); await keyValueTable.delete(totalSelfStakedKey); @@ -120,9 +122,9 @@ xdescribe('Test indexPosModuleAssets method', () => { await indexPosModuleAssets(); const totalStakedAfter = await keyValueTable.get(totalStakedKey); - expect(totalStakedAfter > BigInt(0)).toEqual(true); + expect(totalStakedAfter).toBeGreaterThanOrEqual(bigIntZero); const totalSelfStakedAfter = await keyValueTable.get(totalSelfStakedKey); - expect(totalSelfStakedAfter > BigInt(0)).toEqual(true); + expect(totalSelfStakedAfter).toBeGreaterThanOrEqual(bigIntZero); }); it('should correctly index Token Module Asset only after commit when called with dbTrx', async () => { @@ -140,13 +142,13 @@ xdescribe('Test indexPosModuleAssets method', () => { await commitDBTransaction(dbTrx); const totalStakedAfter = await keyValueTable.get(totalStakedKey); - expect(totalStakedAfter > BigInt(0)).toEqual(true); + expect(totalStakedAfter).toBeGreaterThanOrEqual(bigIntZero); const totalSelfStakedAfter = await keyValueTable.get(totalSelfStakedKey); - expect(totalSelfStakedAfter > BigInt(0)).toEqual(true); + expect(totalSelfStakedAfter).toBeGreaterThanOrEqual(bigIntZero); }); }); -xdescribe('Test indexGenesisBlockAssets method', () => { +describe('Test indexGenesisBlockAssets method', () => { beforeEach(async () => { await keyValueTable.delete(totalLockedKey); await keyValueTable.delete(totalStakedKey); @@ -163,11 +165,11 @@ xdescribe('Test indexGenesisBlockAssets method', () => { await indexGenesisBlockAssets(); const totalLockedAfter = await keyValueTable.get(totalLockedKey); - expect(totalLockedAfter > BigInt(0)).toEqual(true); + expect(totalLockedAfter).toBeGreaterThanOrEqual(bigIntZero); const totalStakedAfter = await keyValueTable.get(totalStakedKey); - expect(totalStakedAfter > BigInt(0)).toEqual(true); + expect(totalStakedAfter).toBeGreaterThanOrEqual(bigIntZero); const totalSelfStakedAfter = await keyValueTable.get(totalSelfStakedKey); - expect(totalSelfStakedAfter > BigInt(0)).toEqual(true); + expect(totalSelfStakedAfter).toBeGreaterThanOrEqual(bigIntZero); }); it('should correctly index genesis block assets only after commit when called with dbTrx', async () => { @@ -189,10 +191,10 @@ xdescribe('Test indexGenesisBlockAssets method', () => { await commitDBTransaction(dbTrx); const totalLockedAfter = await keyValueTable.get(totalLockedKey); - expect(totalLockedAfter > BigInt(0)).toEqual(true); + expect(totalLockedAfter).toBeGreaterThanOrEqual(bigIntZero); const totalStakedAfter = await keyValueTable.get(totalStakedKey); - expect(totalStakedAfter > BigInt(0)).toEqual(true); + expect(totalStakedAfter).toBeGreaterThanOrEqual(bigIntZero); const totalSelfStakedAfter = await keyValueTable.get(totalSelfStakedKey); - expect(totalSelfStakedAfter > BigInt(0)).toEqual(true); + expect(totalSelfStakedAfter).toBeGreaterThanOrEqual(bigIntZero); }); }); diff --git a/services/blockchain-indexer/tests/functional/shared/indexer/acccountBalanceIndex.test.js b/services/blockchain-indexer/tests/functional/shared/indexer/accountBalanceIndex.test.js similarity index 73% rename from services/blockchain-indexer/tests/functional/shared/indexer/acccountBalanceIndex.test.js rename to services/blockchain-indexer/tests/functional/shared/indexer/accountBalanceIndex.test.js index 644620a89..10d8f53f0 100644 --- a/services/blockchain-indexer/tests/functional/shared/indexer/acccountBalanceIndex.test.js +++ b/services/blockchain-indexer/tests/functional/shared/indexer/accountBalanceIndex.test.js @@ -15,12 +15,18 @@ */ const { ServiceBroker } = require('moleculer'); const { - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const config = require('../../../../config'); const accountBalancesTableSchema = require('../../../../shared/database/schema/accountBalances'); -const { updateAccountBalances, accountBalanceIndexQueue, scheduleAccountBalanceUpdateFromEvents } = require('../../../../shared/indexer/accountBalanceIndex'); +const { + updateAccountBalances, + accountBalanceIndexQueue, + scheduleAccountBalanceUpdateFromEvents, +} = require('../../../../shared/indexer/accountBalanceIndex'); const { MODULE_SUB_STORE } = require('../../../../shared/constants'); const request = require('../../../../shared/utils/request'); const { MODULE } = require('../../../../shared/constants'); @@ -31,6 +37,7 @@ const MYSQL_ENDPOINT = config.endpoints.mysql; const getAccountBalancesTable = () => getTableInstance(accountBalancesTableSchema, MYSQL_ENDPOINT); const broker = new ServiceBroker({ + nodeID: 'accountBalanceIndex', transporter: config.transporter, logLevel: 'warn', requestTimeout: 15 * 1000, @@ -43,23 +50,24 @@ let usersSubStoreInfos; beforeAll(async () => { await broker.start(); await request.setAppContext({ - requestRpc: (method, params) => new Promise((resolve, reject) => { - broker - .call(method, params) - .then(res => resolve(res)) - .catch(err => { - console.error(`Error occurred! ${err.message}`); - reject(err); - }); - }), + requestRpc: (method, params) => + new Promise((resolve, reject) => { + broker + .call(method, params) + .then(res => resolve(res)) + .catch(err => { + console.error(`Error occurred! ${err.message}`); + reject(err); + }); + }), }); accountBalancesTable = await getAccountBalancesTable(); - const tokenModuleData = await request.requestConnector( - 'getGenesisAssetByModule', - { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER }, - ); + const tokenModuleData = await request.requestConnector('getGenesisAssetByModule', { + module: MODULE.TOKEN, + subStore: MODULE_SUB_STORE.TOKEN.USER, + }); usersSubStoreInfos = tokenModuleData[MODULE_SUB_STORE.TOKEN.USER]; }); @@ -69,13 +77,19 @@ describe('Test updateAccountBalances method', () => { // Delete all balances and check balance before update await accountBalancesTable.delete({}); - const balanceBeforeUpdate = await accountBalancesTable.find({ address: accountInfo.address, tokenID: accountInfo.tokenID }, ['balance']); + const balanceBeforeUpdate = await accountBalancesTable.find( + { address: accountInfo.address, tokenID: accountInfo.tokenID }, + ['balance'], + ); expect(balanceBeforeUpdate.length).toBe(0); await updateAccountBalances(accountInfo.address); // Check balance after update - const balanceAfterUpdate = await accountBalancesTable.find({ address: accountInfo.address, tokenID: accountInfo.tokenID }, ['balance']); + const balanceAfterUpdate = await accountBalancesTable.find( + { address: accountInfo.address, tokenID: accountInfo.tokenID }, + ['balance'], + ); expect(balanceAfterUpdate.length).toBe(1); expect(balanceAfterUpdate[0].balance).toBeGreaterThanOrEqual(0); }); @@ -96,7 +110,10 @@ describe('Test scheduleAccountBalanceUpdateFromEvents method', () => { // Delete all balances and check balance before update const accountInfo = usersSubStoreInfos[0]; await accountBalancesTable.delete({}); - const balanceBeforeUpdate = await accountBalancesTable.find({ address: accountInfo.address, tokenID: accountInfo.tokenID }, ['balance']); + const balanceBeforeUpdate = await accountBalancesTable.find( + { address: accountInfo.address, tokenID: accountInfo.tokenID }, + ['balance'], + ); expect(balanceBeforeUpdate.length).toBe(0); await scheduleAccountBalanceUpdateFromEvents(eventsIncludingTokenModule); diff --git a/services/blockchain-indexer/tests/functional/shared/utils/file.test.js b/services/blockchain-indexer/tests/functional/shared/utils/file.test.js index 9c2d26545..3175e0344 100644 --- a/services/blockchain-indexer/tests/functional/shared/utils/file.test.js +++ b/services/blockchain-indexer/tests/functional/shared/utils/file.test.js @@ -15,23 +15,14 @@ */ const fs = require('fs'); -const { - getDirectoryNamesInPath, - getAllJSFiles, -} = require('../../../../shared/utils/file'); +const { getDirectoryNamesInPath, getAllJSFiles } = require('../../../../shared/utils/file'); // Utility functions for the tests -const mkdir = async (dirPath) => fs.promises.mkdir( - dirPath, - { recursive: true }, -); +const mkdir = async dirPath => fs.promises.mkdir(dirPath, { recursive: true }); -const rmdir = async (dirPath) => fs.promises.rmdir( - dirPath, - { recursive: true, force: true }, -); +const rmdir = async dirPath => fs.promises.rmdir(dirPath, { recursive: true, force: true }); -const createFile = async (filePath) => fs.promises.writeFile(filePath, '', { flag: 'w' }); +const createFile = async filePath => fs.promises.writeFile(filePath, '', { flag: 'w' }); describe('Unit tests for file utilities', () => { const nonExistentTestDir = `${__dirname}/nonExistentTestDir`; @@ -60,7 +51,7 @@ describe('Unit tests for file utilities', () => { await rmdir(testDir); }); - describe('Test \'getDirectoryNamesInPath\'', () => { + describe("Test 'getDirectoryNamesInPath'", () => { it('Throws error when the source directory does not exist', async () => { expect(getDirectoryNamesInPath(nonExistentTestDir)).rejects.toThrow(); }); @@ -75,50 +66,50 @@ describe('Unit tests for file utilities', () => { const result = await getDirectoryNamesInPath(testDir); expect(Array.isArray(result)).toBeTruthy(); expect(result.length).toBe(testSubDirs.length); - expect(result).toEqual(testSubDirs); + expect(result).toEqual(expect.arrayContaining(testSubDirs)); }); }); - describe('Test \'getAllJSFiles\'', () => { + describe("Test 'getAllJSFiles'", () => { it('Throws error when the source directory does not exist', async () => { expect(getAllJSFiles(nonExistentTestDir)).rejects.toThrow(); }); - it('Returns empty list when source directory does not contain \'.js\' files', async () => { + it("Returns empty list when source directory does not contain '.js' files", async () => { const result = await getAllJSFiles(emptyTestDir); expect(result).toBeInstanceOf(Object); expect(Object.keys(result).length).toBe(0); }); - it('Returns only list of files without the extenstion when source directory contains sub-directories and \'.js\' files', async () => { + it("Returns only list of files without the extenstion when source directory contains sub-directories and '.js' files", async () => { const result = await getAllJSFiles(testDir); expect(result).toBeInstanceOf(Object); expect(Object.keys(result).length).toBe(testFiles.length); expect(Object.keys(result)).toEqual(testFiles.map(f => f.split('.')[0])); }); - it('Returns list of files (camelCase and consecutiveUppercase) without the extension when source directory contains \'.js\' files', async () => { + it("Returns list of files (camelCase and consecutiveUppercase) without the extension when source directory contains '.js' files", async () => { const result = await getAllJSFiles(testDir, false, true); expect(result).toBeInstanceOf(Object); expect(Object.keys(result).length).toBe(testFiles.length); expect(Object.keys(result)).toEqual(testFilesCamelConsecutiveUpper); }); - it('Returns list of files (camelCase and no consecutiveUppercase) without the extension when source directory contains \'.js\' files', async () => { + it("Returns list of files (camelCase and no consecutiveUppercase) without the extension when source directory contains '.js' files", async () => { const result = await getAllJSFiles(testDir, false, false); expect(result).toBeInstanceOf(Object); expect(Object.keys(result).length).toBe(testFiles.length); expect(Object.keys(result)).toEqual(testFilesCamelNoConsecutiveUpper); }); - it('Returns list of files (pascalCase and consecutiveUppercase) without the extension when source directory contains \'.js\' files', async () => { + it("Returns list of files (pascalCase and consecutiveUppercase) without the extension when source directory contains '.js' files", async () => { const result = await getAllJSFiles(testDir, true, true); expect(result).toBeInstanceOf(Object); expect(Object.keys(result).length).toBe(testFiles.length); expect(Object.keys(result)).toEqual(testFilesPascalConsecutiveUpper); }); - it('Returns list of files (pascalCase and no consecutiveUppercase) without the extension when source directory contains \'.js\' files', async () => { + it("Returns list of files (pascalCase and no consecutiveUppercase) without the extension when source directory contains '.js' files", async () => { const result = await getAllJSFiles(testDir, true, false); expect(result).toBeInstanceOf(Object); expect(Object.keys(result).length).toBe(testFiles.length); diff --git a/services/blockchain-indexer/tests/functional/shared/utils/requestAll.test.js b/services/blockchain-indexer/tests/functional/shared/utils/requestAll.test.js index 8f818a435..5aa66b08a 100644 --- a/services/blockchain-indexer/tests/functional/shared/utils/requestAll.test.js +++ b/services/blockchain-indexer/tests/functional/shared/utils/requestAll.test.js @@ -27,27 +27,37 @@ const broker = new ServiceBroker({ logger: console, }); -xdescribe('Test requestAll method', () => { +describe('Test requestAll method', () => { beforeAll(async () => { await broker.start(); await request.setAppContext({ - requestRpc: (method, params) => new Promise((resolve, reject) => { - broker - .call(method, params) - .then(res => resolve(res)) - .catch(err => { - console.error(`Error occurred! ${err.message}`); - reject(err); - }); - }), + requestRpc: (method, params) => + new Promise((resolve, reject) => { + broker + .call(method, params) + .then(res => resolve(res)) + .catch(err => { + console.error(`Error occurred! ${err.message}`); + reject(err); + }); + }), }); }); afterAll(() => broker.stop()); it('should return proper response', async () => { const totalLimit = 27; - const genesisAsset = await request.requestConnector('getGenesisAssetByModule', { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER, limit: totalLimit }); - const result = await requestAll(request.requestConnector, 'getGenesisAssetByModule', { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER, limit: 10 }, totalLimit); + const genesisAsset = await request.requestConnector('getGenesisAssetByModule', { + module: MODULE.TOKEN, + subStore: MODULE_SUB_STORE.TOKEN.USER, + limit: totalLimit, + }); + const result = await requestAll( + request.requestConnector, + 'getGenesisAssetByModule', + { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER, limit: 10 }, + totalLimit, + ); expect(result).toBeInstanceOf(Object); expect(result).toEqual(genesisAsset); }); diff --git a/services/blockchain-indexer/tests/unit/shared/constants.test.js b/services/blockchain-indexer/tests/unit/shared/constants.test.js index 65f91c510..1301db7a7 100644 --- a/services/blockchain-indexer/tests/unit/shared/constants.test.js +++ b/services/blockchain-indexer/tests/unit/shared/constants.test.js @@ -13,10 +13,22 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { resolveModuleCommands } = require('../../../shared/constants'); -const { metadata } = require('../../constants/metadata'); +/* eslint-disable import/no-dynamic-require */ + +const path = require('path'); + +const mockConstantsPath = path.resolve(`${__dirname}../../../../shared/constants`); +const mockRequestFilePath = path.resolve(`${__dirname}../../../../shared/utils/request`); + +afterEach(() => { + jest.clearAllMocks(); + jest.resetModules(); +}); describe('Test resolveModuleCommands method', () => { + const { resolveModuleCommands } = require(mockConstantsPath); + const { metadata } = require('../../constants/metadata'); + it('should return list of moduleCommands when called with valid system metadata', async () => { const result = await resolveModuleCommands(metadata.modules); expect(result).toBeInstanceOf(Array); @@ -31,3 +43,46 @@ describe('Test resolveModuleCommands method', () => { expect(async () => resolveModuleCommands(undefined)).rejects.toThrow(TypeError); }); }); + +describe('Test getCurrentHeight method', () => { + it('should return current height when requestConnector works properly', async () => { + const expectedHeight = 123; + jest.mock(mockRequestFilePath, () => ({ + requestConnector: async () => ({ height: expectedHeight }), + })); + + const { getCurrentHeight } = require(mockConstantsPath); + const result = await getCurrentHeight(); + expect(result).toEqual(expectedHeight); + }); + + it('should return undefined when requestConnector returns empty object', async () => { + jest.mock(mockRequestFilePath, () => ({ + requestConnector: async () => ({}), + })); + + const { getCurrentHeight } = require(mockConstantsPath); + const result = await getCurrentHeight(); + expect(result).toEqual(undefined); + }); + + it('should throw error when requestConnector returns undefined', async () => { + jest.mock(mockRequestFilePath, () => ({ + requestConnector: async () => undefined, + })); + + const { getCurrentHeight } = require(mockConstantsPath); + expect(async () => getCurrentHeight()).rejects.toThrow(); + }); + + it('should throw error when requestConnector throws error', async () => { + jest.mock(mockRequestFilePath, () => ({ + requestConnector: async () => { + throw new Error('Custom Error'); + }, + })); + + const { getCurrentHeight } = require(mockConstantsPath); + expect(async () => getCurrentHeight()).rejects.toThrow(); + }); +}); diff --git a/services/blockchain-indexer/tests/unit/shared/constants/events.js b/services/blockchain-indexer/tests/unit/shared/constants/events.js index 1b4bd0454..9c0ad2446 100644 --- a/services/blockchain-indexer/tests/unit/shared/constants/events.js +++ b/services/blockchain-indexer/tests/unit/shared/constants/events.js @@ -69,58 +69,68 @@ const mockEventTopics = [ const mockEventsForEventTopics = [ { - eventStr: '{"data":{"address":"lskfonwc5wpgy5873ckejqujwp3uwvtagejrjftpp","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskfonwc5wpgy5873ckejqujwp3uwvtagejrjftpp"],"height":125247,"id":"392eadd8f1703efd2b9d5fae72e272da1806fc3fb667c67e0ef71035f941710f"}', + eventStr: + '{"data":{"address":"lskfonwc5wpgy5873ckejqujwp3uwvtagejrjftpp","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskfonwc5wpgy5873ckejqujwp3uwvtagejrjftpp","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125247,"id":"392eadd8f1703efd2b9d5fae72e272da1806fc3fb667c67e0ef71035f941710f"}', height: 125247, index: 0, }, { - eventStr: '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskfonwc5wpgy5873ckejqujwp3uwvtagejrjftpp"],"height":125247,"id":"180fccd1d16dd9806454e2a5f48da020aa5590df0100c72659e713ab502ca4b0"}', + eventStr: + '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskfonwc5wpgy5873ckejqujwp3uwvtagejrjftpp","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125247,"id":"180fccd1d16dd9806454e2a5f48da020aa5590df0100c72659e713ab502ca4b0"}', height: 125247, index: 1, }, { - eventStr: '{"data":{"address":"lskd2ohufqtv7fqtnv75ca2w23krz2692mxvj8q3c","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskd2ohufqtv7fqtnv75ca2w23krz2692mxvj8q3c"],"height":125246,"id":"51291dcc8010176f33f2a250d00869d5c423ad053204a204ebcb4a1b5dd19bc4"}', + eventStr: + '{"data":{"address":"lskd2ohufqtv7fqtnv75ca2w23krz2692mxvj8q3c","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskd2ohufqtv7fqtnv75ca2w23krz2692mxvj8q3c","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125246,"id":"51291dcc8010176f33f2a250d00869d5c423ad053204a204ebcb4a1b5dd19bc4"}', height: 125246, index: 0, }, { - eventStr: '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskd2ohufqtv7fqtnv75ca2w23krz2692mxvj8q3c"],"height":125246,"id":"75ae7452e1d304b846e1531c73f696d169b38926a603df4092cd4c2c924fbe75"}', + eventStr: + '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskd2ohufqtv7fqtnv75ca2w23krz2692mxvj8q3c","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125246,"id":"75ae7452e1d304b846e1531c73f696d169b38926a603df4092cd4c2c924fbe75"}', height: 125246, index: 1, }, { - eventStr: '{"data":{"address":"lskfok9nevnkj8pzh8nr6rtmrtn4zmrp9g66ygbqg","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskfok9nevnkj8pzh8nr6rtmrtn4zmrp9g66ygbqg"],"height":125245,"id":"af100a3fcfc221b0c62edb60bc88a78633e17f5bda449dc43216c2dedda3f20c"}', + eventStr: + '{"data":{"address":"lskfok9nevnkj8pzh8nr6rtmrtn4zmrp9g66ygbqg","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskfok9nevnkj8pzh8nr6rtmrtn4zmrp9g66ygbqg","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125245,"id":"af100a3fcfc221b0c62edb60bc88a78633e17f5bda449dc43216c2dedda3f20c"}', height: 125245, index: 0, }, { - eventStr: '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskfok9nevnkj8pzh8nr6rtmrtn4zmrp9g66ygbqg"],"height":125245,"id":"5f31caae2e0a606a86b1425d49ab1d6543d06fe42b39b97397e9739d8ed87785"}', + eventStr: + '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskfok9nevnkj8pzh8nr6rtmrtn4zmrp9g66ygbqg","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125245,"id":"5f31caae2e0a606a86b1425d49ab1d6543d06fe42b39b97397e9739d8ed87785"}', height: 125245, index: 1, }, { - eventStr: '{"data":{"address":"lskbnqdbfhxefdr5q6ovtcynrbhzvhf6d9qhsyntg","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskbnqdbfhxefdr5q6ovtcynrbhzvhf6d9qhsyntg"],"height":125244,"id":"6d15e5798dbc1e7b43fdd9d9c66d95f181dc4349ed8821e8209aa73c28939406"}', + eventStr: + '{"data":{"address":"lskbnqdbfhxefdr5q6ovtcynrbhzvhf6d9qhsyntg","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskbnqdbfhxefdr5q6ovtcynrbhzvhf6d9qhsyntg","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125244,"id":"6d15e5798dbc1e7b43fdd9d9c66d95f181dc4349ed8821e8209aa73c28939406"}', height: 125244, index: 0, }, { - eventStr: '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskbnqdbfhxefdr5q6ovtcynrbhzvhf6d9qhsyntg"],"height":125244,"id":"0d39438acc199f647af69ecfb675775f31bf8b1dcbd3cf5f0d6fdecfb68a7910"}', + eventStr: + '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskbnqdbfhxefdr5q6ovtcynrbhzvhf6d9qhsyntg","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125244,"id":"0d39438acc199f647af69ecfb675775f31bf8b1dcbd3cf5f0d6fdecfb68a7910"}', height: 125244, index: 1, }, { - eventStr: '{"data":{"address":"lskw68y3kyus7ota9mykr726aby44mw574m8dkngu","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskw68y3kyus7ota9mykr726aby44mw574m8dkngu"],"height":125243,"id":"48131594ec7324a815f43d0e5e6122104a0c0573e97760abb53c5930ac1f481b"}', + eventStr: + '{"data":{"address":"lskw68y3kyus7ota9mykr726aby44mw574m8dkngu","tokenID":"0400000000000000","amount":"94953271","result":0},"index":0,"module":"token","name":"mint","topics":["03","lskw68y3kyus7ota9mykr726aby44mw574m8dkngu","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125243,"id":"48131594ec7324a815f43d0e5e6122104a0c0573e97760abb53c5930ac1f481b"}', height: 125243, index: 0, }, { - eventStr: '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskw68y3kyus7ota9mykr726aby44mw574m8dkngu"],"height":125243,"id":"8c50ade215fd89a9e351a338cd8389bec6d64babb03dbc8611d5bdd433cec181"}', + eventStr: + '{"data":{"amount":"94953271","reduction":0},"index":1,"module":"dynamicReward","name":"rewardMinted","topics":["03","lskw68y3kyus7ota9mykr726aby44mw574m8dkngu","c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b"],"height":125243,"id":"8c50ade215fd89a9e351a338cd8389bec6d64babb03dbc8611d5bdd433cec181"}', height: 125243, index: 1, }, ]; -const getEventsResult = { +const mockGetEventsResult = { data: [ { data: { @@ -135,6 +145,7 @@ const getEventsResult = { topics: [ '03', 'lskfonwc5wpgy5873ckejqujwp3uwvtagejrjftpp', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125247, id: '392eadd8f1703efd2b9d5fae72e272da1806fc3fb667c67e0ef71035f941710f', @@ -153,6 +164,7 @@ const getEventsResult = { topics: [ '03', 'lskfonwc5wpgy5873ckejqujwp3uwvtagejrjftpp', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125247, id: '180fccd1d16dd9806454e2a5f48da020aa5590df0100c72659e713ab502ca4b0', @@ -173,6 +185,7 @@ const getEventsResult = { topics: [ '03', 'lskd2ohufqtv7fqtnv75ca2w23krz2692mxvj8q3c', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125246, id: '51291dcc8010176f33f2a250d00869d5c423ad053204a204ebcb4a1b5dd19bc4', @@ -191,6 +204,7 @@ const getEventsResult = { topics: [ '03', 'lskd2ohufqtv7fqtnv75ca2w23krz2692mxvj8q3c', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125246, id: '75ae7452e1d304b846e1531c73f696d169b38926a603df4092cd4c2c924fbe75', @@ -211,6 +225,7 @@ const getEventsResult = { topics: [ '03', 'lskfok9nevnkj8pzh8nr6rtmrtn4zmrp9g66ygbqg', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125245, id: 'af100a3fcfc221b0c62edb60bc88a78633e17f5bda449dc43216c2dedda3f20c', @@ -229,6 +244,7 @@ const getEventsResult = { topics: [ '03', 'lskfok9nevnkj8pzh8nr6rtmrtn4zmrp9g66ygbqg', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125245, id: '5f31caae2e0a606a86b1425d49ab1d6543d06fe42b39b97397e9739d8ed87785', @@ -249,6 +265,7 @@ const getEventsResult = { topics: [ '03', 'lskbnqdbfhxefdr5q6ovtcynrbhzvhf6d9qhsyntg', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125244, id: '6d15e5798dbc1e7b43fdd9d9c66d95f181dc4349ed8821e8209aa73c28939406', @@ -267,6 +284,7 @@ const getEventsResult = { topics: [ '03', 'lskbnqdbfhxefdr5q6ovtcynrbhzvhf6d9qhsyntg', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125244, id: '0d39438acc199f647af69ecfb675775f31bf8b1dcbd3cf5f0d6fdecfb68a7910', @@ -287,6 +305,7 @@ const getEventsResult = { topics: [ '03', 'lskw68y3kyus7ota9mykr726aby44mw574m8dkngu', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125243, id: '48131594ec7324a815f43d0e5e6122104a0c0573e97760abb53c5930ac1f481b', @@ -305,6 +324,7 @@ const getEventsResult = { topics: [ '03', 'lskw68y3kyus7ota9mykr726aby44mw574m8dkngu', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', ], height: 125243, id: '8c50ade215fd89a9e351a338cd8389bec6d64babb03dbc8611d5bdd433cec181', @@ -320,8 +340,24 @@ const getEventsResult = { }, }; +const mockEventTopicsQueryParams = { + whereIn: { + property: 'topic', + values: [ + '03', + 'c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', + 'lskw68y3kyus7ota9mykr726aby44mw574m8dkngu', + '04c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', + '05c8ee3933cc841287d834f74f278ac12f145f320d0593a612e11b67b4a58cd17b', + ], + }, + groupBy: 'eventID', + havingRaw: 'COUNT(DISTINCT topic) = 3', +}; + module.exports = { mockEventTopics, mockEventsForEventTopics, - getEventsResult, + mockGetEventsResult, + mockEventTopicsQueryParams, }; diff --git a/services/blockchain-indexer/tests/unit/shared/constants/pendingTransactions.js b/services/blockchain-indexer/tests/unit/shared/constants/pendingTransactions.js new file mode 100644 index 000000000..e399b15e2 --- /dev/null +++ b/services/blockchain-indexer/tests/unit/shared/constants/pendingTransactions.js @@ -0,0 +1,58 @@ +const mockSenderAddress = 'lskvq67zzev53sa6ozt39ft3dsmwxxztb7h29275k'; +const mockRecipientAddress = 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo'; + +const mockSenderAccountDetails = { + name: 'genesis', + publicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', +}; + +const mockPendingTransactions = [ + { + module: 'token', + command: 'transfer', + fee: '100000000', + nonce: '1', + senderPublicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', + signatures: [ + 'c7fd1abf9a552fa9c91b4121c87ae2c97cb0fc0aecc87d0ee8b1aa742238eef4a6815ddba31e21144c9652a7bd5c05577ae1100eac34fba43da6fc4879b8f206', + ], + params: { + tokenID: '0000000000000000', + amount: '100000000000', + recipientAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', + data: '', + }, + id: 'd96c777b67576ddf4cd933a97a60b4311881e68e3c8bef1393ac0020ec8a506c', + size: 167, + minFee: '166000', + }, + { + module: 'token', + command: 'transferCrossChain', + fee: '100000000', + nonce: '1', + senderPublicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', + signatures: [ + 'c7fd1abf9a552fa9c91b4121c87ae2c97cb0fc0aecc87d0ee8b1aa742238eef4a6815ddba31e21144c9652a7bd5c05577ae1100eac34fba43da6fc4879b8f206', + ], + params: { + tokenID: '0000000000000000', + amount: '100000000000', + recipientAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', + receivingChainID: '02000000', + data: '', + messageFee: '10000000', + messageFeeTokenID: '0200000000000000', + }, + id: 'd96c777b67576ddf4cd933a97a60b4311881e68e3c8bef1393ac0020ec8a506d', + size: 167, + minFee: '166000', + }, +]; + +module.exports = { + mockPendingTransactions, + mockSenderAddress, + mockRecipientAddress, + mockSenderAccountDetails, +}; diff --git a/services/blockchain-indexer/tests/unit/shared/constants/transactionEstimateFees.js b/services/blockchain-indexer/tests/unit/shared/constants/transactionEstimateFees.js index 9c8813b87..e22b6f7a1 100644 --- a/services/blockchain-indexer/tests/unit/shared/constants/transactionEstimateFees.js +++ b/services/blockchain-indexer/tests/unit/shared/constants/transactionEstimateFees.js @@ -51,7 +51,8 @@ const mockInteroperabilitySubmitMainchainCrossChainUpdateTxRequest = { messageFee: '10000000', messageFeeTokenID: '0200000000000000', sendingChainID: '04000000', - certificate: '0a2020dbc6528e1ff1d6d052adcb5c64f6e4a2e89e734fad19f03f8e872de1c4819d109f16189a8cffa5062220e6cec02a3ed23506a23149e4458b3477555c97f06726c01727a63baff29a6d4b2a2066300d82c14fe864b94177ebbfe7aa80ac9a07ef9fac31a02cee97b8221cb36132011f3a608d58b25b9924fbed599a663efca3186f4a14546f4ac0405c8d4744893e3e09cd7855922fdb82b1e4a318a0c7f38fa0ec0423e8865f5338f6437969e06c97b7d4bc822c92e13d00cfb9497cb37c26b1417e683d6284b225a98185ca1713119889', + certificate: + '0a2020dbc6528e1ff1d6d052adcb5c64f6e4a2e89e734fad19f03f8e872de1c4819d109f16189a8cffa5062220e6cec02a3ed23506a23149e4458b3477555c97f06726c01727a63baff29a6d4b2a2066300d82c14fe864b94177ebbfe7aa80ac9a07ef9fac31a02cee97b8221cb36132011f3a608d58b25b9924fbed599a663efca3186f4a14546f4ac0405c8d4744893e3e09cd7855922fdb82b1e4a318a0c7f38fa0ec0423e8865f5338f6437969e06c97b7d4bc822c92e13d00cfb9497cb37c26b1417e683d6284b225a98185ca1713119889', activeValidatorsUpdate: { blsKeysUpdate: [], bftWeightsUpdate: [], @@ -104,23 +105,28 @@ const mockInteroperabilityRegisterSidechainTxRequest = { name: 'minichain', sidechainValidators: [ { - blsKey: '81819334f20e5669a4ac38047d312112ff07d7a4a5705455204bc25f9360b1be95835ec50db7d7a600a944a3abd69753', + blsKey: + '81819334f20e5669a4ac38047d312112ff07d7a4a5705455204bc25f9360b1be95835ec50db7d7a600a944a3abd69753', bftWeight: '1', }, { - blsKey: '837166d173d699501ab5da3a6fe1e340659efd932d870c6f271cc28119662e22a3f6715b4118c25baeae40ac955b21c1', + blsKey: + '837166d173d699501ab5da3a6fe1e340659efd932d870c6f271cc28119662e22a3f6715b4118c25baeae40ac955b21c1', bftWeight: '1', }, { - blsKey: 'a35a7e57ea1efe4fb8102807a3c896236b696bcf3efb574950cf603bfbc2f104878499b4e20070718562dac0022345a1', + blsKey: + 'a35a7e57ea1efe4fb8102807a3c896236b696bcf3efb574950cf603bfbc2f104878499b4e20070718562dac0022345a1', bftWeight: '1', }, { - blsKey: 'a889835e7d1d3fd6ab6a3903a6c3a3337d13545fda5f67581d28fa64938d169119e1ff3b825fe3b2a625aa4612e6b78c', + blsKey: + 'a889835e7d1d3fd6ab6a3903a6c3a3337d13545fda5f67581d28fa64938d169119e1ff3b825fe3b2a625aa4612e6b78c', bftWeight: '1', }, { - blsKey: 'aed4794dc57abd9cbd67d72705a2dad2d0bf11e8709b2c268bf2d72c219e2945c5e57acbefb9d7906518242de4b1a807', + blsKey: + 'aed4794dc57abd9cbd67d72705a2dad2d0bf11e8709b2c268bf2d72c219e2945c5e57acbefb9d7906518242de4b1a807', bftWeight: '1', }, ], @@ -168,9 +174,7 @@ const mockTxResult = { fee: { minimum: { byteFee: '160000', - additionalFees: { - userAccountInitializationFee: '1', - }, + additionalFees: {}, }, }, }, @@ -236,7 +240,7 @@ const mockRegisterValidatorTxResult = { }, }; -const mockTxsenderAddress = 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad'; +const mockTxSenderAddress = 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad'; const mockTxAuthAccountInfo = { data: { @@ -247,7 +251,7 @@ const mockTxAuthAccountInfo = { }, }; -const mockTxrequestConnector = { +const mockTxRequestConnector = { module: 'token', command: 'transfer', fee: '100000000', @@ -267,7 +271,7 @@ const mockTxrequestConnector = { minFee: '166000', }; -const mockTransferCrossChainTxrequestConnector = { +const mockTransferCrossChainTxRequestConnector = { module: 'token', command: 'transferCrossChain', fee: '100000000', @@ -290,7 +294,7 @@ const mockTransferCrossChainTxrequestConnector = { minFee: '166000', }; -const mockRegisterValidatorTxrequestConnector = { +const mockRegisterValidatorTxRequestConnector = { transaction: { module: 'pos', command: 'registerValidator', @@ -302,8 +306,10 @@ const mockRegisterValidatorTxrequestConnector = { ], params: { name: 'test_validator', - blsKey: 'a984c12c76b42b2d6ef2cae7ce09951e7d71eb160abdedbfba51bd216c42f2f3eda04a2e57b2cfb01768b94419b65190', - proofOfPossession: 'ab7661489a290464310c8615b387117ff27a209742e0e711f22d5ba3e7480de4eda293a651a48be9ae57b569a977d65e101179e1fcd73ab32c6c3fef4a1aedc7119e90eb2af7a3450399b15743c145bb49fdcb61b333817345c1d46769005d04', + blsKey: + 'a984c12c76b42b2d6ef2cae7ce09951e7d71eb160abdedbfba51bd216c42f2f3eda04a2e57b2cfb01768b94419b65190', + proofOfPossession: + 'ab7661489a290464310c8615b387117ff27a209742e0e711f22d5ba3e7480de4eda293a651a48be9ae57b569a977d65e101179e1fcd73ab32c6c3fef4a1aedc7119e90eb2af7a3450399b15743c145bb49fdcb61b333817345c1d46769005d04', generatorKey: 'b9c0211c8eb94ee61154a4dc7af36d2a36e14dd1644b43aa250186bfa107ce6b', }, id: 'd96c777b67576ddf4cd933a97a60b4311881e68e3c8bef1393ac0020ec8a506c', @@ -365,12 +371,27 @@ const mockAuthAccountInfo = { numberOfSignatures: 0, mandatoryKeys: [], optional const mockAuthInfoForMultisigAccount = { ...mockAuthAccountInfo, - mandatoryKeys: [ - '4d9c2774f1c98accafb8554c164ce5689f66a32d768b64a9f694d5bd51dc1b4d', - ], - optionalKeys: [ - 'b1353e202043ead83083ce8b7eb3a9d04fb49cdcf8c73c0e81567d55d114c076', - ], + mandatoryKeys: ['4d9c2774f1c98accafb8554c164ce5689f66a32d768b64a9f694d5bd51dc1b4d'], + optionalKeys: ['b1353e202043ead83083ce8b7eb3a9d04fb49cdcf8c73c0e81567d55d114c076'], +}; + +const mockChannelInfo = { + messageFeeTokenID: '0400000000000000', + outbox: { + appendPath: [ + '20706b5f7117b283f7be38aa12dc9623fd1d07a91425fa6c087830008b145075', + '9f87b56843694d5b90eb528793fd16cf8613f606a106b7d70bea2ffa1ef20c2d', + ], + root: '4855a43e751c5df45ea0e963fa204bf0236a01f773b5b0cc19ff8e6edaee0204', + size: 12, + }, + inbox: { + appendPath: ['3e168e2181b08e53e656ee112abe15fd456a0598717241a1beeaada2983a1350'], + root: '3e168e2181b08e53e656ee112abe15fd456a0598717241a1beeaada2983a1350', + size: 2, + }, + partnerChainOutboxRoot: '3e168e2181b08e53e656ee112abe15fd456a0598717241a1beeaada2983a1350', + minReturnFeePerByte: '1000', }; const mockChannelInfo = { @@ -398,17 +419,17 @@ module.exports = { mockTxRequest, mockTransferCrossChainTxRequest, mockTxResult, - mockTxsenderAddress, + mockTxSenderAddress, mockTxAuthAccountInfo, - mockTxrequestConnector, + mockTxRequestConnector, mockTxFeeEstimate, posConstants, mockEscrowAccountExistsRequestConnector, - mockTransferCrossChainTxrequestConnector, + mockTransferCrossChainTxRequestConnector, mockTransferCrossChainTxResult, mockAuthAccountInfo, mockAuthInfoForMultisigAccount, - mockRegisterValidatorTxrequestConnector, + mockRegisterValidatorTxRequestConnector, mockRegisterValidatorTxResult, mockInteroperabilitySubmitMainchainCrossChainUpdateTxRequest, diff --git a/services/blockchain-indexer/tests/unit/shared/constants/transactionsDryRun.js b/services/blockchain-indexer/tests/unit/shared/constants/transactionsDryRun.js index c98f77251..5c217918f 100644 --- a/services/blockchain-indexer/tests/unit/shared/constants/transactionsDryRun.js +++ b/services/blockchain-indexer/tests/unit/shared/constants/transactionsDryRun.js @@ -91,9 +91,7 @@ const mockTransactionsDryRunResultFromNode = { index: 6, module: 'token', name: 'commandExecutionResult', - topics: [ - '2809da07c2a2af95cef96d5853ad6df61c797c88b1912a538ab2a290a413b31d', - ], + topics: ['2809da07c2a2af95cef96d5853ad6df61c797c88b1912a538ab2a290a413b31d'], height: 29137, }, ], @@ -177,9 +175,7 @@ const mockTransactionsDryRunResult = { index: 6, module: 'token', name: 'commandExecutionResult', - topics: [ - '2809da07c2a2af95cef96d5853ad6df61c797c88b1912a538ab2a290a413b31d', - ], + topics: ['2809da07c2a2af95cef96d5853ad6df61c797c88b1912a538ab2a290a413b31d'], height: 29137, }, ], diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/events.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/events.test.js index e26dc8877..d628f1b81 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/events.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/events.test.js @@ -22,11 +22,6 @@ const mockedEvents = eventsIncludingTokenModule; const mockEventsFilePath = path.resolve(`${__dirname}/../../../../../shared/dataService/business/events`); -const mockBlocksTableSchema = require('../../../../../shared/database/schema/blocks'); -const mockEventsTableSchema = require('../../../../../shared/database/schema/events'); -const mockEventTopicsTableSchema = require('../../../../../shared/database/schema/eventTopics'); -const { mockEventTopics, mockEventsForEventTopics, getEventsResult } = require('../../constants/events'); - describe('getEventsByBlockID', () => { beforeEach(() => { jest.resetAllMocks(); @@ -39,7 +34,7 @@ describe('getEventsByBlockID', () => { return { ...actual, CacheLRU: jest.fn(() => ({ - get: (key) => { + get: key => { expect(key).toEqual(mockedBlockID); return JSON.stringify(mockedEvents); }, @@ -64,7 +59,7 @@ describe('getEventsByBlockID', () => { return { ...actual, CacheLRU: jest.fn(() => ({ - get: (key) => { + get: key => { expect(key).toEqual(mockedBlockID); return undefined; }, @@ -73,7 +68,7 @@ describe('getEventsByBlockID', () => { DB: { MySQL: { getTableInstance: () => ({ - find: (params) => { + find: params => { expect(params).toEqual({ blockID: mockedBlockID }); const dbResp = []; @@ -101,7 +96,7 @@ describe('getEventsByBlockID', () => { return { ...actual, CacheLRU: jest.fn(() => ({ - get: (key) => { + get: key => { expect(key).toEqual(mockedBlockID); return undefined; }, @@ -110,7 +105,7 @@ describe('getEventsByBlockID', () => { DB: { MySQL: { getTableInstance: () => ({ - find: (params) => { + find: params => { expect(params).toEqual({ blockID: mockedBlockID }); return []; }, @@ -179,155 +174,3 @@ describe('cacheEventsByBlockID', () => { expect(() => cacheEventsByBlockID(mockedBlockID, mockedEvents)).rejects.toThrow(); }); }); - -describe('getEvents', () => { - beforeEach(() => { - jest.resetAllMocks(); - jest.resetModules(); - }); - - it('should retrieve events successfully', async () => { - jest.mock('../../../../../config', () => { - const actual = jest.requireActual('../../../../../config'); - return { - ...actual, - db: { - ...actual.db, - isPersistEvents: true, - }, - }; - }); - - jest.mock('lisk-service-framework', () => { - const actual = jest.requireActual('lisk-service-framework'); - return { - ...actual, - DB: { - MySQL: { - getTableInstance: jest.fn((schema) => { - if (schema.tableName === mockBlocksTableSchema.tableName) { - return { - find: jest.fn(() => []), - }; - } if (schema.tableName === mockEventsTableSchema.tableName) { - return { - find: jest.fn(() => mockEventsForEventTopics), - count: jest.fn(() => 10), - }; - } if (schema.tableName === mockEventTopicsTableSchema.tableName) { - return { - find: jest.fn(() => mockEventsForEventTopics), - count: jest.fn(() => 10), - }; - } - throw new Error(); - }), - }, - }, - }; - }); - - const params = { - sort: 'timestamp:desc', - order: 'index:asc', - limit: 10, - offset: 0, - }; - - const { getEvents } = require(mockEventsFilePath); - const result = await getEvents(params); - - expect(result).toEqual(getEventsResult); - }); - - it('should throw a NotFoundException when an invalid blockID is provided', async () => { - const mockInvalidBlockID = 'valid-block-id'; - - const { - Exceptions: { NotFoundException }, - } = require('lisk-service-framework'); - - jest.mock('lisk-service-framework', () => { - const actual = jest.requireActual('lisk-service-framework'); - return { - ...actual, - DB: { - MySQL: { - getTableInstance: jest.fn((schema) => { - if (schema.tableName === mockBlocksTableSchema.tableName) { - return { - find: jest.fn((params) => { - expect(params.id).toEqual(mockInvalidBlockID); - return []; - }), - }; - } if (schema.tableName === mockEventsTableSchema.tableName) { - return { - find: jest.fn(() => mockEventsForEventTopics), - count: jest.fn(() => 10), - }; - } if (schema.tableName === mockEventTopicsTableSchema.tableName) { - return { - find: jest.fn(() => mockEventTopics), - count: jest.fn(() => 10), - }; - } - throw new Error(); - }), - }, - }, - }; - }); - - const { getEvents } = require(mockEventsFilePath); - await expect(getEvents({ - blockID: mockInvalidBlockID, - })).rejects.toThrow(NotFoundException); - }); - - it('should throw a NotFoundException for an invalid combination of blockID and height', async () => { - const mockValidBlockID = 'valid-block-id'; - - const { - Exceptions: { NotFoundException }, - } = require('lisk-service-framework'); - - jest.mock('lisk-service-framework', () => { - const actual = jest.requireActual('lisk-service-framework'); - return { - ...actual, - DB: { - MySQL: { - getTableInstance: jest.fn((schema) => { - if (schema.tableName === mockBlocksTableSchema.tableName) { - return { - find: jest.fn((queryParams) => { - expect(queryParams.id).toEqual(mockValidBlockID); - return [{ height: 123 }]; - }), - }; - } if (schema.tableName === mockEventsTableSchema.tableName) { - return { - find: jest.fn(() => mockEventsForEventTopics), - count: jest.fn(() => 10), - }; - } if (schema.tableName === mockEventTopicsTableSchema.tableName) { - return { - find: jest.fn(() => mockEventTopics), - count: jest.fn(() => 10), - }; - } - throw new Error(); - }), - }, - }, - }; - }); - - const { getEvents } = require(mockEventsFilePath); - await expect(getEvents({ - blockID: mockValidBlockID, - height: 456, - })).rejects.toThrow(NotFoundException); - }); -}); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/feeEstimates.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/feeEstimates.test.js index a7dd3bb68..bfa0cc295 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/feeEstimates.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/feeEstimates.test.js @@ -16,8 +16,11 @@ /* eslint-disable import/no-dynamic-require */ const { resolve } = require('path'); +const { defaultFeeEstimates } = require('../../../../../shared/dataService/business/feeEstimates'); -const mockFeeEstimatesFilePath = resolve(`${__dirname}/../../../../../shared/dataService/business/feeEstimates`); +const mockFeeEstimatesFilePath = resolve( + `${__dirname}/../../../../../shared/dataService/business/feeEstimates`, +); const { requestFeeEstimator } = require('../../../../../shared/utils/request'); const { mockTxFeeEstimate } = require('../../constants/transactionEstimateFees'); @@ -81,4 +84,18 @@ describe('Test getFeeEstimatesFromFeeEstimator', () => { expect(requestFeeEstimator).toHaveBeenCalledTimes(0); expect(feeEstimates).toEqual(mockTxFeeEstimate); }); + + it('should return default fee estimates when underlying api call throws error', async () => { + jest.mock('../../../../../shared/utils/request', () => ({ + requestFeeEstimator: () => { + throw new Error('Custom Error'); + }, + })); + + const { getFeeEstimatesFromFeeEstimator } = require(mockFeeEstimatesFilePath); + const feeEstimates = await getFeeEstimatesFromFeeEstimator(); + + expect(requestFeeEstimator).toHaveBeenCalledTimes(0); + expect(feeEstimates).toEqual(defaultFeeEstimates); + }); }); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/generators.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/generators.test.js new file mode 100644 index 000000000..bdb8cd8c5 --- /dev/null +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/generators.test.js @@ -0,0 +1,101 @@ +/* + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ +/* eslint-disable import/no-dynamic-require */ +const { resolve } = require('path'); + +const mockValidatorUtilsPath = resolve(`${__dirname}/../../../../../shared/utils/validator`); +const mockRequestPath = resolve(`${__dirname}/../../../../../shared/utils/request`); +const mockedGeneratorsPath = resolve( + `${__dirname}/../../../../../shared/dataService/business/generators`, +); +const mockedPosPath = resolve(`${__dirname}/../../../../../shared/dataService/business/pos`); + +beforeEach(() => { + jest.resetModules(); + jest.clearAllMocks(); +}); + +jest.mock('lisk-service-framework', () => { + const actual = jest.requireActual('lisk-service-framework'); + return { + ...actual, + DB: { + MySQL: { + getTableInstance: jest.fn(() => ({ + find: jest.fn(() => [ + { publicKey: 'fe50ee28b084414499465ff823e7d651c9d19d75d33a82c44b2a15e3dc62bac9' }, + ]), + })), + KVStore: { + ...actual.DB.MySQL.KVStore, + configureKeyValueTable: jest.fn(), + getKeyValueTable: jest.fn(), + }, + }, + }, + CacheRedis: jest.fn(), + CacheLRU: jest.fn(), + }; +}); + +describe('getGeneratorsInfo', () => { + it('should return generators list', async () => { + jest.mock(mockRequestPath, () => ({ + requestConnector: jest.fn(() => ({ + list: [ + { + address: 'lsky2j2fnmhxushe5ywvdw4ouvxg8s4aeo4a7bpxb', + nextAllocatedTime: 1699615180, + }, + ], + })), + })); + + jest.mock(mockValidatorUtilsPath, () => ({ + getNameByAddress: jest.fn(() => 'testGenerator_1'), + })); + + const { getGeneratorsInfo } = require(mockedGeneratorsPath); + const generators = await getGeneratorsInfo(); + const expectedResponse = [ + { + address: 'lsky2j2fnmhxushe5ywvdw4ouvxg8s4aeo4a7bpxb', + name: 'testGenerator_1', + nextAllocatedTime: 1699615180, + publicKey: 'fe50ee28b084414499465ff823e7d651c9d19d75d33a82c44b2a15e3dc62bac9', + }, + ]; + expect(generators.length).toBeGreaterThanOrEqual(1); + expect(generators).toEqual(expectedResponse); + }); +}); + +describe('getNumberOfGenerators', () => { + it('should return number of generators in one round', async () => { + jest.mock(mockedPosPath, () => ({ + getPosConstants: jest.fn(() => ({ + data: { + numberActiveValidators: 101, + numberStandbyValidators: 2, + }, + })), + })); + + const { getNumberOfGenerators } = require(mockedGeneratorsPath); + const numOfGenerators = await getNumberOfGenerators(); + expect(numOfGenerators).toBe(103); + }); +}); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/blockchainApps.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/blockchainApps.test.js index 1ceb36455..947fe7642 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/blockchainApps.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/blockchainApps.test.js @@ -24,10 +24,16 @@ const { mockedNetworkStatus, } = require('../../../constants/blockchainApps'); -const mockNetworkPath = resolve(`${__dirname}/../../../../../../shared/dataService/business/network`); -const mockMainchainPath = resolve(`${__dirname}/../../../../../../shared/dataService/business/interoperability/mainchain`); +const mockNetworkPath = resolve( + `${__dirname}/../../../../../../shared/dataService/business/network`, +); +const mockMainchainPath = resolve( + `${__dirname}/../../../../../../shared/dataService/business/interoperability/mainchain`, +); const mockRequestPath = resolve(`${__dirname}/../../../../../../shared/utils/request`); -const mockBlockchainAppsPath = resolve(`${__dirname}/../../../../../../shared/dataService/business/interoperability/blockchainApps`); +const mockBlockchainAppsPath = resolve( + `${__dirname}/../../../../../../shared/dataService/business/interoperability/blockchainApps`, +); describe('getBlockchainApps', () => { beforeEach(() => { @@ -53,13 +59,11 @@ describe('getBlockchainApps', () => { })); jest.mock(mockNetworkPath, () => ({ - getNetworkStatus: jest.fn(() => ( - mockedNetworkStatus - )), + getNetworkStatus: jest.fn(() => mockedNetworkStatus), })); jest.mock(mockRequestPath, () => ({ - requestConnector: jest.fn(() => (mockedEscrowedAmounts)), + requestConnector: jest.fn(() => mockedEscrowedAmounts), })); jest.mock(mockMainchainPath, () => ({ @@ -93,13 +97,11 @@ describe('getBlockchainApps', () => { })); jest.mock(mockNetworkPath, () => ({ - getNetworkStatus: jest.fn(() => ( - mockedNetworkStatus - )), + getNetworkStatus: jest.fn(() => mockedNetworkStatus), })); jest.mock(mockRequestPath, () => ({ - requestConnector: jest.fn(() => (mockedEscrowedAmounts)), + requestConnector: jest.fn(() => mockedEscrowedAmounts), })); jest.mock(mockMainchainPath, () => ({ @@ -134,7 +136,7 @@ describe('getBlockchainApps', () => { })); jest.mock(mockRequestPath, () => ({ - requestConnector: jest.fn(() => (mockedEscrowedAmounts)), + requestConnector: jest.fn(() => mockedEscrowedAmounts), })); jest.mock(mockMainchainPath, () => ({ @@ -163,9 +165,7 @@ describe('getBlockchainApps', () => { })); jest.mock(mockNetworkPath, () => ({ - getNetworkStatus: jest.fn(() => ( - mockedNetworkStatus - )), + getNetworkStatus: jest.fn(() => mockedNetworkStatus), })); jest.mock(mockRequestPath, () => ({ diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/chain.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/chain.test.js index d5d20773e..f2aef23a5 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/chain.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/chain.test.js @@ -16,7 +16,9 @@ /* eslint-disable import/no-dynamic-require */ const { resolve } = require('path'); -const mockedFilePath = resolve(`${__dirname}/../../../../../../shared/dataService/business/network`); +const mockedFilePath = resolve( + `${__dirname}/../../../../../../shared/dataService/business/network`, +); const dataServicePath = resolve(`${__dirname}/../../../../../../shared/dataService`); beforeEach(() => { diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/channel.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/channel.test.js index c35139540..6f853209b 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/channel.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/interoperability/channel.test.js @@ -17,7 +17,9 @@ const { resolve } = require('path'); const config = require('../../../../../../config'); -const mockedFilePath = resolve(`${__dirname}/../../../../../../shared/dataService/business/network`); +const mockedFilePath = resolve( + `${__dirname}/../../../../../../shared/dataService/business/network`, +); const dataServicePath = resolve(`${__dirname}/../../../../../../shared/dataService`); const mockedRequestFilePath = resolve(`${__dirname}/../../../../../../shared/utils/request`); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/invoke.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/invoke.test.js index 9b7e859f0..4ef1b9f62 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/invoke.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/invoke.test.js @@ -15,22 +15,39 @@ */ const { resolve } = require('path'); -const mockedFilePath = resolve(`${__dirname}/../../../../../shared/constants`); +const mockedConstantsFilePath = resolve(`${__dirname}/../../../../../shared/constants`); +const mockedConfigFilePath = resolve(`${__dirname}/../../../../../config`); +const mockedRequestFilePath = resolve(`${__dirname}/../../../../../shared/utils/request`); jest.mock('../../../../../shared/constants', () => { - const { registeredEndpoints, engineEndpoints, allRegisteredEndpoints } = require('../../../../constants/endpoints'); + const { + registeredEndpoints, + engineEndpoints, + allRegisteredEndpoints, + } = require('../../../../constants/endpoints'); const { metadata } = require('../../../../constants/metadata'); - const actual = jest.requireActual(mockedFilePath); + const actual = jest.requireActual(mockedConstantsFilePath); return { ...actual, - getAllRegisteredEndpoints() { return allRegisteredEndpoints; }, - getRegisteredEndpoints() { return registeredEndpoints; }, - getEngineEndpoints() { return engineEndpoints; }, - getSystemMetadata() { return metadata; }, + getAllRegisteredEndpoints() { + return allRegisteredEndpoints; + }, + getRegisteredEndpoints() { + return registeredEndpoints; + }, + getEngineEndpoints() { + return engineEndpoints; + }, + getSystemMetadata() { + return metadata; + }, }; }); -const { checkIfEndpointRegistered, validateEndpointParams } = require('../../../../../shared/dataService/business/invoke'); +const { + checkIfEndpointRegistered, + validateEndpointParams, +} = require('../../../../../shared/dataService/business/invoke'); describe('Test checkIfEndpointRegistered method', () => { it('should return true when called with valid registered endpoint', async () => { @@ -140,10 +157,18 @@ describe('invokeEndpoint', () => { }; it('should invoke the endpoint and return data and meta', async () => { - jest.mock('../../../../../shared/utils/request', () => ({ + jest.mock(mockedRequestFilePath, () => ({ requestConnector: jest.fn(() => mockBlockByHeightRes), })); + jest.mock(mockedConfigFilePath, () => { + const actual = jest.requireActual(mockedConfigFilePath); + return { + ...actual, + invokeAllowedMethods: ['*'], + }; + }); + const params = { endpoint: 'chain_getBlockByHeight', params: { @@ -159,8 +184,32 @@ describe('invokeEndpoint', () => { }); }); + it('should throw error if module or endpoint is not allowed', async () => { + jest.mock(mockedRequestFilePath, () => ({ + requestConnector: jest.fn(() => mockBlockByHeightRes), + })); + + jest.mock(mockedConfigFilePath, () => { + const actual = jest.requireActual(mockedConfigFilePath); + return { + ...actual, + invokeAllowedMethods: ['legacy'], + }; + }); + + const params = { + endpoint: 'chain_getBlockByHeight', + params: { + height: 10, + }, + }; + + const { invokeEndpoint } = require('../../../../../shared/dataService/business/invoke'); + expect(() => invokeEndpoint(params)).rejects.toThrow(); + }); + it('should throw error when node is not reachable', async () => { - jest.mock('../../../../../shared/utils/request', () => ({ + jest.mock(mockedRequestFilePath, () => ({ requestConnector: jest.fn(() => { throw new Error('Timeout error.'); }), @@ -178,7 +227,7 @@ describe('invokeEndpoint', () => { }); it('should throw error when invalid endpoint is supplied', async () => { - jest.mock('../../../../../shared/utils/request', () => ({ + jest.mock(mockedRequestFilePath, () => ({ requestConnector: jest.fn(() => mockBlockByHeightRes), })); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/legacy/legacy.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/legacy/legacy.test.js new file mode 100644 index 000000000..2baf29e9a --- /dev/null +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/legacy/legacy.test.js @@ -0,0 +1,70 @@ +/* + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ +/* eslint-disable import/no-dynamic-require */ +const { resolve } = require('path'); + +const mockRequestPath = resolve(`${__dirname}/../../../../../../shared/utils/request`); +const dataServicePath = resolve(`${__dirname}/../../../../../../shared/dataService`); + +beforeEach(() => { + jest.resetModules(); + jest.clearAllMocks(); +}); + +jest.mock('lisk-service-framework', () => { + const actual = jest.requireActual('lisk-service-framework'); + return { + ...actual, + DB: { + MySQL: { + getTableInstance: jest.fn(), + KVStore: { + ...actual.DB.MySQL.KVStore, + configureKeyValueTable: jest.fn(), + getKeyValueTable: jest.fn(), + }, + }, + }, + CacheRedis: jest.fn(), + CacheLRU: jest.fn(), + }; +}); + +describe('getLegacyAccountInfo', () => { + const publicKey = 'fe50ee28b084414499465ff823e7d651c9d19d75d33a82c44b2a15e3dc62bac9'; + + it('should return legacy account info', async () => { + jest.mock(mockRequestPath, () => ({ + requestConnector: jest.fn(() => ({ + balance: 100000000000, + })), + })); + + const { getLegacyAccountInfo } = require(dataServicePath); + const legacyAccountInfo = await getLegacyAccountInfo({ publicKey }); + const expectedResponse = { + data: { + balance: 100000000000, + legacyAddress: '4823075312309157000L', + }, + meta: { + address: 'lskyvfv3esyznwkpxcp4u7rnsoqwv55y82vw4yh7b', + publicKey: 'fe50ee28b084414499465ff823e7d651c9d19d75d33a82c44b2a15e3dc62bac9', + }, + }; + expect(legacyAccountInfo).toEqual(expectedResponse); + }); +}); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/mainchain.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/mainchain.test.js deleted file mode 100644 index 62794aa6e..000000000 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/mainchain.test.js +++ /dev/null @@ -1,196 +0,0 @@ -/* - * LiskHQ/lisk-service - * Copyright © 2023 Lisk Foundation - * - * See the LICENSE file at the top-level directory of this distribution - * for licensing information. - * - * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, - * no part of this software, including this file, may be copied, modified, - * propagated, or distributed except according to the terms contained in the - * LICENSE file. - * - * Removal or modification of this copyright notice is prohibited. - * - */ -/* eslint-disable import/no-dynamic-require */ -const { resolve } = require('path'); -const config = require('../../../../../config'); - -const mockedFilePath = resolve(`${__dirname}/../../../../../shared/dataService/business/network`); -const dataServicePath = resolve(`${__dirname}/../../../../../shared/dataService`); - -beforeEach(() => { - jest.resetModules(); - - jest.mock('lisk-service-framework', () => { - const actualLiskServiceFramework = jest.requireActual('lisk-service-framework'); - return { - ...actualLiskServiceFramework, - DB: { - ...actualLiskServiceFramework.DB, - MySQL: { - ...actualLiskServiceFramework.DB.MySQL, - KVStore: { - ...actualLiskServiceFramework.DB.MySQL.KVStore, - getKeyValueTable: jest.fn(), - }, - }, - }, - CacheRedis: jest.fn(), - CacheLRU: jest.fn(), - }; - }); -}); - -describe('Test isMainchain method', () => { - jest.mock('lisk-service-framework', () => { - const actual = jest.requireActual('lisk-service-framework'); - return { - ...actual, - CacheRedis: jest.fn(), - CacheLRU: jest.fn(), - }; - }); - - it('should return false when chainID is undefined', async () => { - jest.mock(mockedFilePath, () => { - const actual = jest.requireActual(mockedFilePath); - return { - ...actual, - getNetworkStatus() { - return { data: { chainID: undefined } }; - }, - }; - }); - - const { isMainchain } = require(dataServicePath); - const result = await isMainchain(); - expect(typeof result).toBe('boolean'); - expect(result).toBe(false); - }); - - it('should return false when chainID is null', async () => { - jest.mock(mockedFilePath, () => { - const actual = jest.requireActual(mockedFilePath); - return { - ...actual, - getNetworkStatus() { - return { data: { chainID: null } }; - }, - }; - }); - - const { isMainchain } = require(dataServicePath); - const result = await isMainchain(); - expect(typeof result).toBe('boolean'); - expect(result).toBe(false); - }); - - it('should return true when mainchain chainID is valid', async () => { - jest.mock(mockedFilePath, () => { - const actual = jest.requireActual(mockedFilePath); - return { - ...actual, - getNetworkStatus() { - return { data: { chainID: '04000000' } }; - }, - }; - }); - - const { isMainchain } = require(dataServicePath); - const result = await isMainchain(); - expect(typeof result).toBe('boolean'); - expect(result).toBe(true); - }); - - it('should return false when sidechain chainID is valid', async () => { - jest.mock(mockedFilePath, () => { - const actual = jest.requireActual(mockedFilePath); - return { - ...actual, - getNetworkStatus() { - return { data: { chainID: '04000001' } }; - }, - }; - }); - - const { isMainchain } = require(dataServicePath); - const result = await isMainchain(); - expect(typeof result).toBe('boolean'); - expect(result).toBe(false); - }); - - it('should return false when chainID is valid', async () => { - jest.mock(mockedFilePath, () => { - const actual = jest.requireActual(mockedFilePath); - return { - ...actual, - getNetworkStatus() { - return { data: { chainID: 'invalid' } }; - }, - }; - }); - - const { isMainchain } = require(dataServicePath); - const result = await isMainchain(); - expect(typeof result).toBe('boolean'); - expect(result).toBe(false); - }); -}); - -describe('Test resolveMainchainServiceURL method', () => { - it('should return devnet mainchain URL when devnet mainchain chainID is valid', async () => { - const chainID = '04000000'; - jest.mock(mockedFilePath, () => { - const actual = jest.requireActual(mockedFilePath); - return { - ...actual, - getNetworkStatus() { - return { data: { chainID } }; - }, - }; - }); - - const { resolveMainchainServiceURL } = require(dataServicePath); - const result = await resolveMainchainServiceURL(); - - const { serviceURL } = config.networks.LISK.find(c => chainID === c.chainID); - expect(result).toBe(serviceURL); - }); - - it('should return betanet mainchain URL when betanet mainchain chainID is valid', async () => { - const chainID = '02000000'; - jest.mock(mockedFilePath, () => { - const actual = jest.requireActual(mockedFilePath); - return { - ...actual, - getNetworkStatus() { - return { data: { chainID } }; - }, - }; - }); - - const { resolveMainchainServiceURL } = require(dataServicePath); - const result = await resolveMainchainServiceURL(); - - const { serviceURL } = config.networks.LISK.find(c => chainID === c.chainID); - expect(result).toBe(serviceURL); - }); - - it('should return undefined when chainID is invalid', async () => { - jest.mock(mockedFilePath, () => { - const actual = jest.requireActual(mockedFilePath); - return { - ...actual, - getNetworkStatus() { - return { data: { chainID: 'invalid' } }; - }, - }; - }); - - const { resolveMainchainServiceURL } = require(dataServicePath); - const result = await resolveMainchainServiceURL(); - expect(result).toBe(undefined); - }); -}); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/pendingTransactions.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/pendingTransactions.test.js index d4811276e..b6ac420b6 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/pendingTransactions.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/pendingTransactions.test.js @@ -13,7 +13,16 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { validateParams } = require('../../../../../shared/dataService/business/pendingTransactions'); +const { + mockPendingTransactions, + mockSenderAddress, + mockSenderAccountDetails, + mockRecipientAddress, +} = require('../../constants/pendingTransactions'); + +const { + getCurrentChainID, +} = require('../../../../../shared/dataService/business/interoperability/chain'); jest.mock('lisk-service-framework', () => { const actual = jest.requireActual('lisk-service-framework'); @@ -34,6 +43,28 @@ jest.mock('lisk-service-framework', () => { }; }); +jest.mock('../../../../../shared/utils/request', () => ({ + requestConnector: jest.fn(() => mockPendingTransactions), +})); + +jest.mock('../../../../../shared/utils/account', () => ({ + getLisk32AddressFromPublicKey: jest.fn(() => mockSenderAddress), +})); + +jest.mock('../../../../../shared/dataService/utils/account', () => ({ + getIndexedAccountInfo: jest.fn(() => mockSenderAccountDetails), +})); + +jest.mock('../../../../../shared/dataService/business/interoperability/chain', () => ({ + getCurrentChainID: jest.fn(), +})); + +const { + validateParams, + loadAllPendingTransactions, + getPendingTransactions, +} = require('../../../../../shared/dataService/business/pendingTransactions'); + describe('Test validateParams method', () => { it('should return validated params when called with valid params', async () => { const params = { @@ -59,3 +90,108 @@ describe('Test validateParams method', () => { expect(() => validateParams(null)).rejects.toThrow(); }); }); + +describe('Test getPendingTransactions method', () => { + beforeAll(async () => { + await loadAllPendingTransactions(); + }); + + beforeEach(async () => { + jest.resetModules(); + }); + + it('should return all pending transactions without any filters', async () => { + const params = { + sort: 'id:asc', + offset: 0, + limit: 10, + }; + + const result = await getPendingTransactions(params); + expect(result.data.length).toBe(mockPendingTransactions.length); + }); + + it('should return pending transactions with tx id', async () => { + const params = { + id: mockPendingTransactions[0].id, + sort: 'id:asc', + offset: 0, + limit: 10, + }; + + const result = await getPendingTransactions(params); + expect(result.data.length).toBe(1); + }); + + it('should return pending transactions with recipientAddress', async () => { + const params = { + recipientAddress: mockRecipientAddress, + sort: 'id:asc', + offset: 0, + limit: 10, + }; + + const result = await getPendingTransactions(params); + + let txCountWithParams = 0; + mockPendingTransactions.forEach(transaction => { + if (transaction.params && transaction.params.recipientAddress === mockRecipientAddress) { + txCountWithParams++; + } + }); + + expect(result.data.length).toBe(txCountWithParams); + }); + + it('should return pending transactions with receivingChainID and receivingChainID is not currentChainID', async () => { + const params = { + receivingChainID: '02000000', + sort: 'id:asc', + offset: 0, + limit: 10, + }; + + getCurrentChainID.mockResolvedValue('02000001'); + + const result = await getPendingTransactions(params); + + let txCountWithParams = 0; + mockPendingTransactions.forEach(transaction => { + if (transaction.params && transaction.params.receivingChainID === '02000000') { + txCountWithParams++; + } + }); + + expect(result.data.length).toBe(txCountWithParams); + }); + + it('should return pending transactions with receivingChainID and receivingChainID is currentChainID', async () => { + const params = { + receivingChainID: '02000000', + sort: 'id:asc', + offset: 0, + limit: 10, + }; + + getCurrentChainID.mockResolvedValue('02000000'); + + const result = await getPendingTransactions(params); + + let txCountWithParams = 0; + mockPendingTransactions.forEach(transaction => { + if (transaction.params && !transaction.params.receivingChainID) { + txCountWithParams++; + } + }); + + expect(result.data.length).toBe(txCountWithParams); + }); + + it('should throw ValidationException for invalid parameters', async () => { + const params = { + nonce: 123, + }; + + await expect(validateParams(params)).rejects.toThrow(); + }); +}); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/pos/constants.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/pos/constants.test.js index da844ba14..1a2829bc1 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/pos/constants.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/pos/constants.test.js @@ -18,7 +18,9 @@ const { resolve } = require('path'); const mockRequestFilePath = resolve(`${__dirname}/../../../../../../shared/utils/request`); -const posConstantsFilePath = resolve(`${__dirname}/../../../../../../shared/dataService/business/pos/constants`); +const posConstantsFilePath = resolve( + `${__dirname}/../../../../../../shared/dataService/business/pos/constants`, +); jest.mock('lisk-service-framework', () => { const actual = jest.requireActual('lisk-service-framework'); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/pos/validators.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/pos/validators.test.js index e698b153d..07a7374e9 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/pos/validators.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/pos/validators.test.js @@ -21,7 +21,9 @@ const { rawValidators } = require('../../../constants/validators'); const { requestConnector } = require('../../../../../../shared/utils/request'); const mockAccountPath = resolve(`${__dirname}/../../../../../../shared/dataService/utils/account`); -const validatorsPath = resolve(`${__dirname}/../../../../../../shared/dataService/business/pos/validators`); +const validatorsPath = resolve( + `${__dirname}/../../../../../../shared/dataService/business/pos/validators`, +); // Mock dependencies jest.mock('../../../../../../shared/utils/request', () => ({ @@ -58,7 +60,8 @@ describe('getAllPosValidators', () => { // Mock getIndexedAccountInfo function to return jest.mock(mockAccountPath); const { getIndexedAccountInfo } = require(mockAccountPath); - getIndexedAccountInfo.mockResolvedValueOnce({ publicKey: 'key1' }) + getIndexedAccountInfo + .mockResolvedValueOnce({ publicKey: 'key1' }) .mockResolvedValueOnce({ publicKey: 'key2' }) .mockResolvedValueOnce({ publicKey: 'key3' }); @@ -70,9 +73,15 @@ describe('getAllPosValidators', () => { const result = await getAllPosValidators(); // Expect getIndexedAccountInfo to have been called 3 times with different addresses - expect(getIndexedAccountInfo).toHaveBeenCalledWith({ address: rawValidators[0].address }, ['publicKey']); - expect(getIndexedAccountInfo).toHaveBeenCalledWith({ address: rawValidators[1].address }, ['publicKey']); - expect(getIndexedAccountInfo).toHaveBeenCalledWith({ address: rawValidators[2].address }, ['publicKey']); + expect(getIndexedAccountInfo).toHaveBeenCalledWith({ address: rawValidators[0].address }, [ + 'publicKey', + ]); + expect(getIndexedAccountInfo).toHaveBeenCalledWith({ address: rawValidators[1].address }, [ + 'publicKey', + ]); + expect(getIndexedAccountInfo).toHaveBeenCalledWith({ address: rawValidators[2].address }, [ + 'publicKey', + ]); expect(getIndexedAccountInfo).toHaveBeenCalledTimes(3); // Expect output to include public keys fetched from getIndexedAccountInfo function @@ -142,20 +151,28 @@ describe('getPosValidators', () => { const validators = rawValidators; // Mock connector to respond with validators - requestConnector.mockReturnValueOnce(validators[0]) + requestConnector + .mockReturnValueOnce(validators[0]) .mockReturnValueOnce(validators[1]) .mockReturnValueOnce(validators[2]); // Make a query to getAllPosValidators function const { getPosValidators } = require(validatorsPath); - const params = { addresses: [validators[0].address, validators[1].address, - validators[2].address] }; + const params = { + addresses: [validators[0].address, validators[1].address, validators[2].address], + }; const result = await getPosValidators(params); // Assert the result - expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { address: validators[0].address }); - expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { address: validators[1].address }); - expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { address: validators[2].address }); + expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { + address: validators[0].address, + }); + expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { + address: validators[1].address, + }); + expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { + address: validators[2].address, + }); expect(requestConnector).toHaveBeenCalledTimes(3); expect(result).toEqual(validators); }); @@ -165,20 +182,28 @@ describe('getPosValidators', () => { validators[0].isBanned = true; // Mock connector to respond with validators - requestConnector.mockReturnValueOnce(validators[0]) + requestConnector + .mockReturnValueOnce(validators[0]) .mockReturnValueOnce(validators[1]) .mockReturnValueOnce(validators[2]); // Make a query to getAllPosValidators function const { getPosValidators } = require(validatorsPath); - const params = { addresses: [validators[0].address, validators[1].address, - validators[2].address] }; + const params = { + addresses: [validators[0].address, validators[1].address, validators[2].address], + }; const result = await getPosValidators(params); // Assert the result - expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { address: validators[0].address }); - expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { address: validators[1].address }); - expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { address: validators[2].address }); + expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { + address: validators[0].address, + }); + expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { + address: validators[1].address, + }); + expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { + address: validators[2].address, + }); expect(requestConnector).toHaveBeenCalledTimes(3); expect(result.length).toEqual(3); @@ -198,7 +223,9 @@ describe('getPosValidators', () => { await expect(getPosValidators(params)).rejects.toThrow(errorMessage); // Assert the result - expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { address: 'validator-address' }); + expect(requestConnector).toHaveBeenCalledWith('getPosValidator', { + address: 'validator-address', + }); expect(requestConnector).toHaveBeenCalledTimes(1); }); }); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/token.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/token.test.js index ec7f8ce3d..137a46704 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/token.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/token.test.js @@ -19,7 +19,11 @@ const { resolve } = require('path'); const knownAccountsPath = resolve(`${__dirname}/../../../../../shared/dataService/knownAccounts`); const tokensPath = resolve(`${__dirname}/../../../../../shared/dataService/business/token`); -const { mockTokenTopBalancesParams, mockTokenTopBalancesTokenInfos, mockTokenTopBalancesDbSearchResult } = require('../../constants/token'); +const { + mockTokenTopBalancesParams, + mockTokenTopBalancesTokenInfos, + mockTokenTopBalancesDbSearchResult, +} = require('../../constants/token'); describe('getTokenTopBalances', () => { afterEach(() => { @@ -55,11 +59,11 @@ describe('getTokenTopBalances', () => { DB: { MySQL: { getTableInstance: jest.fn(() => ({ - find: jest.fn((data) => { + find: jest.fn(data => { expect(data).toEqual(mockTokenTopBalancesDbSearchResult); return mockTokenTopBalancesTokenInfos; }), - count: jest.fn((data) => { + count: jest.fn(data => { expect(data).toEqual(mockTokenTopBalancesDbSearchResult); return count; }), diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactionEstimateFees.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactionEstimateFees.test.js index e3a96f047..dd33c07e6 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactionEstimateFees.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactionEstimateFees.test.js @@ -16,28 +16,40 @@ /* eslint-disable import/no-dynamic-require */ const { resolve } = require('path'); -const { inputTransaction, inputMultisigTransaction } = require('../../../../constants/transactions'); - -const mockedChannelFilePath = resolve(`${__dirname}/../../../../../shared/dataService/business/interoperability/channel`); -const mockedTransactionFeeEstimatesFilePath = resolve(`${__dirname}/../../../../../shared/dataService/business/transactionsEstimateFees`); +const { + inputTransaction, + inputMultisigTransaction, +} = require('../../../../constants/transactions'); + +const mockedChannelFilePath = resolve( + `${__dirname}/../../../../../shared/dataService/business/interoperability/channel`, +); +const mockedTransactionFeeEstimatesFilePath = resolve( + `${__dirname}/../../../../../shared/dataService/business/transactionsEstimateFees`, +); const mockedAuthFilePath = resolve(`${__dirname}/../../../../../shared/dataService/business/auth`); const mockedAccountFilePath = resolve(`${__dirname}/../../../../../shared/utils/account`); const mockedRequestFilePath = resolve(`${__dirname}/../../../../../shared/utils/request`); -const mockedPOSConstantsFilePath = resolve(`${__dirname}/../../../../../shared/dataService/pos/constants`); -const mockedFeeEstimateFilePath = resolve(`${__dirname}/../../../../../shared/dataService/business/feeEstimates`); -const mockedRTransactionsDryRunFilePath = resolve(`${__dirname}../../../../../../shared/dataService/business/transactionsDryRun`); -const mockedNetworkFilePath = resolve(`${__dirname}/../../../../../shared/dataService/business/network`); +const mockedPOSConstantsFilePath = resolve( + `${__dirname}/../../../../../shared/dataService/pos/constants`, +); +const mockedFeeEstimateFilePath = resolve( + `${__dirname}/../../../../../shared/dataService/business/feeEstimates`, +); +const mockedNetworkFilePath = resolve( + `${__dirname}/../../../../../shared/dataService/business/network`, +); const { mockTxRequest, mockTxResult, - mockTxsenderAddress, + mockTxSenderAddress, mockTxAuthAccountInfo, - mockTxrequestConnector, + mockTxRequestConnector, posConstants, mockTxFeeEstimate, mockTransferCrossChainTxRequest, - mockTransferCrossChainTxrequestConnector, + mockTransferCrossChainTxRequestConnector, mockTransferCrossChainTxResult, mockEscrowAccountExistsRequestConnector, mockInteroperabilitySubmitMainchainCrossChainUpdateTxRequest, @@ -46,10 +58,18 @@ const { mockInteroperabilityRegisterSidechainTxResult, mockAuthAccountInfo, mockAuthInfoForMultisigAccount, - mockRegisterValidatorTxrequestConnector, + mockRegisterValidatorTxRequestConnector, mockRegisterValidatorTxResult, } = require('../../constants/transactionEstimateFees'); +const { tokenHasUserAccount } = require('../../../../../shared/dataService/business/token'); + +const { + dryRunTransactions, +} = require('../../../../../shared/dataService/business/transactionsDryRun'); + +const { requestConnector } = require('../../../../../shared/utils/request'); + jest.mock('lisk-service-framework', () => { const actual = jest.requireActual('lisk-service-framework'); return { @@ -65,29 +85,31 @@ jest.mock('lisk-service-framework', () => { }, }, HTTP: { - get: jest.fn((url) => { + get: jest.fn(url => { if (url.includes('/api/v3/blockchain/apps/meta')) { return Promise.resolve({ data: { - data: [{ - serviceURLs: [ - { - http: 'http://mock-service.com', - ws: 'ws://mock-service.com', - }, - ], - }], + data: [ + { + serviceURLs: [ + { + http: 'http://mock-service.com', + ws: 'ws://mock-service.com', + }, + ], + }, + ], }, - }); - } if (url.includes('/token/account/exists')) { + } + if (url.includes('/token/account/exists')) { return Promise.resolve({ data: { data: { isExists: false }, }, - }); - } if (url.includes('api/v3/token/constants')) { + } + if (url.includes('api/v3/token/constants')) { return Promise.resolve({ data: { data: { @@ -95,10 +117,8 @@ jest.mock('lisk-service-framework', () => { userAccountInitializationFee: '1', escrowAccountInitializationFee: '1', }, - }, }, - }); } @@ -113,153 +133,279 @@ jest.mock('lisk-service-framework', () => { jest.mock('../../../../../shared/dataService/business/schemas', () => { const { schemas } = require('../../../../constants/schemas'); return { - getSchemas() { return schemas; }, + getSchemas() { + return schemas; + }, }; }); +jest.mock('../../../../../shared/dataService/business/token', () => ({ + tokenHasUserAccount: jest.fn().mockImplementation(() => ({ + data: { isExists: true }, + meta: {}, + })), + getTokenConstants: jest.fn().mockImplementation(() => ({ + data: { + extraCommandFees: { + userAccountInitializationFee: '5000000', + escrowAccountInitializationFee: '5000000', + }, + }, + meta: {}, + })), + getTokenBalances: jest.fn().mockImplementation(() => ({ + data: [{ availableBalance: '500000000000' }], + meta: {}, + })), +})); + +jest.mock('../../../../../shared/dataService/business/transactionsDryRun', () => ({ + dryRunTransactions: jest.fn(), +})); + +jest.mock('../../../../../shared/utils/request', () => ({ + requestConnector: jest.fn(), +})); + +describe('getCcmBuffer', () => { + it('should return null if the transaction is not token transferCrossChain', async () => { + const { getCcmBuffer } = require(mockedTransactionFeeEstimatesFilePath); + expect(getCcmBuffer(mockRegisterValidatorTxRequestConnector.transaction)).resolves.toBeNull(); + }); + + it('should return ccmbuffer if the transaction is transferCrossChain with CCM success event', async () => { + requestConnector.mockResolvedValue('CCM buffer'); + dryRunTransactions.mockReturnValueOnce({ + data: { events: [{ name: 'ccmSendSuccess', data: { ccm: 'hello' } }] }, + }); + + const { getCcmBuffer } = require(mockedTransactionFeeEstimatesFilePath); + expect(() => getCcmBuffer(mockTransferCrossChainTxRequestConnector)).not.toThrow(); + }); + + it('should throw validation error if the transaction is transferCrossChain without CCM success event', async () => { + const mockErrorMessage = 'validation Error'; + requestConnector.mockResolvedValue('CCM buffer'); + dryRunTransactions + .mockReturnValueOnce({ + data: { events: [] }, + }) + .mockReturnValueOnce({ + data: { errorMessage: mockErrorMessage }, + }); + + const { getCcmBuffer } = require(mockedTransactionFeeEstimatesFilePath); + expect(() => getCcmBuffer(mockTransferCrossChainTxRequestConnector)).rejects.toThrow( + mockErrorMessage, + ); + }); + + it('should throw validation error if the transaction is transferCrossChain with CCM success failed', async () => { + requestConnector.mockResolvedValue('CCM buffer'); + dryRunTransactions + .mockReturnValueOnce({ + data: { events: [{ name: 'ccmSentFailed', code: 1 }] }, + }) + .mockReturnValueOnce({ + data: { events: [{ name: 'ccmSentFailed', code: 1 }] }, + }); + + const { getCcmBuffer } = require(mockedTransactionFeeEstimatesFilePath); + expect(() => getCcmBuffer(mockTransferCrossChainTxRequestConnector)).rejects.toThrow(); + }); + + it('should return empty buffer if the transaction is transferCrossChain without CCM success failed', async () => { + requestConnector.mockResolvedValue('CCM buffer'); + dryRunTransactions + .mockReturnValueOnce({ + data: { events: [] }, + }) + .mockReturnValueOnce({ + data: { events: [] }, + }); + + const { getCcmBuffer } = require(mockedTransactionFeeEstimatesFilePath); + await expect(getCcmBuffer(mockTransferCrossChainTxRequestConnector)).resolves.toStrictEqual( + Buffer.from('', 'hex'), + ); + }); +}); + +describe('validateUserHasTokenAccount', () => { + it('should return undefined if user has token account initialized', () => { + const { validateUserHasTokenAccount } = require(mockedTransactionFeeEstimatesFilePath); + const { tokenID, recipientAddress } = mockTransferCrossChainTxRequest.transaction.params; + + expect(validateUserHasTokenAccount(tokenID, recipientAddress)).resolves.toBeUndefined(); + }); + + it("should throw an error if user doesn't have token account initialized", async () => { + tokenHasUserAccount.mockReturnValueOnce({ + data: { isExists: false }, + meta: {}, + }); + + const { validateUserHasTokenAccount } = require(mockedTransactionFeeEstimatesFilePath); + const { tokenID, recipientAddress } = mockTransferCrossChainTxRequest.transaction.params; + + await expect(validateUserHasTokenAccount(tokenID, recipientAddress)).rejects.toThrow(); + }); +}); + describe('validateTransactionParams', () => { it('should validate a valid token and register validator transaction', () => { const { validateTransactionParams } = require(mockedTransactionFeeEstimatesFilePath); - expect(() => validateTransactionParams(mockTransferCrossChainTxRequest.transaction), + expect(() => + validateTransactionParams(mockTransferCrossChainTxRequest.transaction), ).not.toThrow(); - expect(() => validateTransactionParams(mockRegisterValidatorTxrequestConnector.transaction), + expect(() => + validateTransactionParams(mockRegisterValidatorTxRequestConnector.transaction), ).not.toThrow(); }); it('should validate a valid token cross chain transfer transaction if passed without optional params', () => { const { validateTransactionParams } = require(mockedTransactionFeeEstimatesFilePath); - const { - messageFee, - messageFeeTokenID, - ...remParams - } = mockTransferCrossChainTxRequest.transaction.params; + const { messageFee, messageFeeTokenID, ...remParams } = + mockTransferCrossChainTxRequest.transaction.params; - expect(() => validateTransactionParams({ - ...mockTransferCrossChainTxRequest.transaction, - params: { - ...remParams, - }, - })).not.toThrow(); + expect(() => + validateTransactionParams({ + ...mockTransferCrossChainTxRequest.transaction, + params: { + ...remParams, + }, + }), + ).not.toThrow(); }); it('should throw an error for incorrect tokenID in token transaction', () => { - const { - tokenID, - recipientAddress, - ...remParams - } = mockTransferCrossChainTxRequest.transaction.params; + const { tokenID, recipientAddress, ...remParams } = + mockTransferCrossChainTxRequest.transaction.params; const { validateTransactionParams } = require(mockedTransactionFeeEstimatesFilePath); - expect(() => validateTransactionParams({ - ...mockTransferCrossChainTxRequest.transaction, - params: { - ...remParams, - tokenID: 'invalidTokenID', - recipientAddress, - }, - })).rejects.toThrow(); + expect(() => + validateTransactionParams({ + ...mockTransferCrossChainTxRequest.transaction, + params: { + ...remParams, + tokenID: 'invalidTokenID', + recipientAddress, + }, + }), + ).rejects.toThrow(); }); it('should throw an error for incorrect recipientAddress in token transaction', () => { - const { - tokenID, - recipientAddress, - ...remParams - } = mockTransferCrossChainTxRequest.transaction.params; + const { tokenID, recipientAddress, ...remParams } = + mockTransferCrossChainTxRequest.transaction.params; const { validateTransactionParams } = require(mockedTransactionFeeEstimatesFilePath); - expect(() => validateTransactionParams({ - ...mockTransferCrossChainTxRequest.transaction, - params: { - ...remParams, - tokenID, - recipientAddress: 'invalidRecipientAddress', - }, - })).rejects.toThrow(); + expect(() => + validateTransactionParams({ + ...mockTransferCrossChainTxRequest.transaction, + params: { + ...remParams, + tokenID, + recipientAddress: 'invalidRecipientAddress', + }, + }), + ).rejects.toThrow(); }); it('should throw an error for incorrect blsKey in register validator transaction', () => { - const { - blsKey, - proofOfPossession, - generatorKey, - ...remParams - } = mockRegisterValidatorTxrequestConnector.transaction.params; + const { blsKey, proofOfPossession, generatorKey, ...remParams } = + mockRegisterValidatorTxRequestConnector.transaction.params; const { validateTransactionParams } = require(mockedTransactionFeeEstimatesFilePath); - expect(() => validateTransactionParams({ - ...mockRegisterValidatorTxrequestConnector.transaction, - params: { - ...remParams, - blsKey: 'invalidBLSKey', - proofOfPossession, - generatorKey, - }, - })).rejects.toThrow(); + expect(() => + validateTransactionParams({ + ...mockRegisterValidatorTxRequestConnector.transaction, + params: { + ...remParams, + blsKey: 'invalidBLSKey', + proofOfPossession, + generatorKey, + }, + }), + ).rejects.toThrow(); }); it('should throw an error for incorrect proofOfPossession in register validator transaction', () => { - const { blsKey, - proofOfPossession, - generatorKey, - ...remParams - } = mockRegisterValidatorTxrequestConnector.transaction.params; + const { blsKey, proofOfPossession, generatorKey, ...remParams } = + mockRegisterValidatorTxRequestConnector.transaction.params; const { validateTransactionParams } = require(mockedTransactionFeeEstimatesFilePath); - expect(() => validateTransactionParams({ - ...mockRegisterValidatorTxrequestConnector.transaction, - params: { - ...remParams, - blsKey, - proofOfPossession: 'invalidProofOfPossession', - generatorKey, - }, - })).rejects.toThrow(); + expect(() => + validateTransactionParams({ + ...mockRegisterValidatorTxRequestConnector.transaction, + params: { + ...remParams, + blsKey, + proofOfPossession: 'invalidProofOfPossession', + generatorKey, + }, + }), + ).rejects.toThrow(); }); it('should throw an error for incorrect generatorKey in register validator transaction', () => { - const { - blsKey, - proofOfPossession, - generatorKey, - ...remParams - } = mockRegisterValidatorTxrequestConnector.transaction.params; + const { blsKey, proofOfPossession, generatorKey, ...remParams } = + mockRegisterValidatorTxRequestConnector.transaction.params; const { validateTransactionParams } = require(mockedTransactionFeeEstimatesFilePath); - expect(() => validateTransactionParams({ - ...mockRegisterValidatorTxrequestConnector.transaction, - params: { - ...remParams, - blsKey, - proofOfPossession, - generatorKey: 'invalidGeneratorKey', - }, - })).rejects.toThrow(); + expect(() => + validateTransactionParams({ + ...mockRegisterValidatorTxRequestConnector.transaction, + params: { + ...remParams, + blsKey, + proofOfPossession, + generatorKey: 'invalidGeneratorKey', + }, + }), + ).rejects.toThrow(); }); it('should throw an error for incorrect sendingChainID in cross chain update transaction', () => { - const { - sendingChainID, - ...remParams - } = mockInteroperabilitySubmitMainchainCrossChainUpdateTxRequest.transaction.params; + const { sendingChainID, ...remParams } = + mockInteroperabilitySubmitMainchainCrossChainUpdateTxRequest.transaction.params; const { validateTransactionParams } = require(mockedTransactionFeeEstimatesFilePath); - expect(() => validateTransactionParams({ - ...mockInteroperabilitySubmitMainchainCrossChainUpdateTxRequest.transaction, - params: { - ...remParams, - sendingChainID: 'invalidSendingChainID', - }, - })).rejects.toThrow(); + expect(() => + validateTransactionParams({ + ...mockInteroperabilitySubmitMainchainCrossChainUpdateTxRequest.transaction, + params: { + ...remParams, + sendingChainID: 'invalidSendingChainID', + }, + }), + ).rejects.toThrow(); + }); + + it('should throw an error if user has insufficient balance transaction', () => { + const { sendingChainID, ...remParams } = + mockInteroperabilitySubmitMainchainCrossChainUpdateTxRequest.transaction.params; + + const { validateTransactionParams } = require(mockedTransactionFeeEstimatesFilePath); + + expect(() => + validateTransactionParams({ + ...mockInteroperabilitySubmitMainchainCrossChainUpdateTxRequest.transaction, + params: { + ...remParams, + amount: Number.MAX_SAFE_INTEGER.toString(), + }, + }), + ).rejects.toThrow(); }); }); @@ -278,19 +424,21 @@ describe('Test transaction fees estimates', () => { }); describe('Test calcDynamicFeeEstimates method', () => { - const feeEstimatePerByte = { low: 0, med: 10, high: 50 }; + const feeEstimatePerByte = { + low: 3.3066625382716053, + med: 3.307093037235057, + high: 4.366180864805574, + }; const minFee = 150000; const size = 150; it('should return dynamic fee estimates', async () => { - const { - calcDynamicFeeEstimates, - } = require(mockedTransactionFeeEstimatesFilePath); + const { calcDynamicFeeEstimates } = require(mockedTransactionFeeEstimatesFilePath); const expectedResponse = { - low: BigInt('150000'), - medium: BigInt('151500'), - high: BigInt('157500'), + low: BigInt('150496'), + medium: BigInt('150496'), + high: BigInt('150655'), }; const dynamicFeeEstimates = calcDynamicFeeEstimates(feeEstimatePerByte, minFee, size); @@ -300,63 +448,51 @@ describe('Test transaction fees estimates', () => { }); it('should throw error when feeEstimatePerByte is undefined', async () => { - const { - calcDynamicFeeEstimates, - } = require(mockedTransactionFeeEstimatesFilePath); + const { calcDynamicFeeEstimates } = require(mockedTransactionFeeEstimatesFilePath); expect(() => { calcDynamicFeeEstimates(undefined, minFee, size); - }).toThrow(TypeError); + }).toThrow(); }); - it('should throw error when minFee is undefined', async () => { - const { - calcDynamicFeeEstimates, - } = require(mockedTransactionFeeEstimatesFilePath); + it('should throw error when feeEstimatePerByte is null', async () => { + const { calcDynamicFeeEstimates } = require(mockedTransactionFeeEstimatesFilePath); expect(() => { - calcDynamicFeeEstimates(feeEstimatePerByte, undefined, size); - }).toThrow(TypeError); + calcDynamicFeeEstimates(null, minFee, size); + }).toThrow(); }); - it('should throw error when transaction size is undefined', async () => { - const { - calcDynamicFeeEstimates, - } = require(mockedTransactionFeeEstimatesFilePath); + it('should throw error when minFee is undefined', async () => { + const { calcDynamicFeeEstimates } = require(mockedTransactionFeeEstimatesFilePath); expect(() => { - calcDynamicFeeEstimates(feeEstimatePerByte, minFee, undefined); - }).toThrow(TypeError); + calcDynamicFeeEstimates(feeEstimatePerByte, undefined, size); + }).toThrow(); }); - it('should throw error when feeEstimatePerByte is null', async () => { - const { - calcDynamicFeeEstimates, - } = require(mockedTransactionFeeEstimatesFilePath); + it('should throw error when minFee is null', async () => { + const { calcDynamicFeeEstimates } = require(mockedTransactionFeeEstimatesFilePath); expect(() => { - calcDynamicFeeEstimates(null, minFee, size); - }).toThrow(TypeError); + calcDynamicFeeEstimates(feeEstimatePerByte, null, size); + }).toThrow(); }); - it('should throw error when minFee is null', async () => { - const { - calcDynamicFeeEstimates, - } = require(mockedTransactionFeeEstimatesFilePath); + it('should throw error when transaction size is undefined', async () => { + const { calcDynamicFeeEstimates } = require(mockedTransactionFeeEstimatesFilePath); expect(() => { - calcDynamicFeeEstimates(feeEstimatePerByte, null, size); - }).toThrow(TypeError); + calcDynamicFeeEstimates(feeEstimatePerByte, minFee, undefined); + }).toThrow(); }); it('should throw error when transaction size is null', async () => { - const { - calcDynamicFeeEstimates, - } = require(mockedTransactionFeeEstimatesFilePath); + const { calcDynamicFeeEstimates } = require(mockedTransactionFeeEstimatesFilePath); expect(() => { calcDynamicFeeEstimates(feeEstimatePerByte, minFee, null); - }).toThrow(TypeError); + }).toThrow(); }); }); @@ -366,18 +502,12 @@ describe('Test transaction fees estimates', () => { const authInfoForMultisigAccount = { ...authAccountInfo, numberOfSignatures: 2, - mandatoryKeys: [ - '4d9c2774f1c98accafb8554c164ce5689f66a32d768b64a9f694d5bd51dc1b4d', - ], - optionalKeys: [ - 'b1353e202043ead83083ce8b7eb3a9d04fb49cdcf8c73c0e81567d55d114c076', - ], + mandatoryKeys: ['4d9c2774f1c98accafb8554c164ce5689f66a32d768b64a9f694d5bd51dc1b4d'], + optionalKeys: ['b1353e202043ead83083ce8b7eb3a9d04fb49cdcf8c73c0e81567d55d114c076'], }; it('should return transaction when called with all valid params', async () => { - const { - mockTransaction, - } = require(mockedTransactionFeeEstimatesFilePath); + const { mockTransaction } = require(mockedTransactionFeeEstimatesFilePath); const transaction = await mockTransaction( inputTransaction, @@ -387,9 +517,7 @@ describe('Test transaction fees estimates', () => { }); it('should return multisignature transaction when called with all valid params', async () => { - const { - mockTransaction, - } = require(mockedTransactionFeeEstimatesFilePath); + const { mockTransaction } = require(mockedTransactionFeeEstimatesFilePath); const transaction = await mockTransaction( inputMultisigTransaction, @@ -408,9 +536,7 @@ describe('Test transaction fees estimates', () => { }); it('should return transaction when called transaction without id', async () => { - const { - mockTransaction, - } = require(mockedTransactionFeeEstimatesFilePath); + const { mockTransaction } = require(mockedTransactionFeeEstimatesFilePath); const { id, ...remParams } = inputTransaction; const transaction = await mockTransaction(remParams, authAccountInfo.numberOfSignatures); @@ -424,9 +550,7 @@ describe('Test transaction fees estimates', () => { }); it('should return transaction when called transaction without fee', async () => { - const { - mockTransaction, - } = require(mockedTransactionFeeEstimatesFilePath); + const { mockTransaction } = require(mockedTransactionFeeEstimatesFilePath); const { fee, ...remParams } = inputTransaction; const transaction = await mockTransaction(remParams, authAccountInfo.numberOfSignatures); @@ -440,9 +564,7 @@ describe('Test transaction fees estimates', () => { }); it('should return multisignature transaction when called transaction without signatures', async () => { - const { - mockTransaction, - } = require(mockedTransactionFeeEstimatesFilePath); + const { mockTransaction } = require(mockedTransactionFeeEstimatesFilePath); const { signatures, ...remParams } = inputMultisigTransaction; const transaction = await mockTransaction( @@ -460,9 +582,7 @@ describe('Test transaction fees estimates', () => { }); it('should return transaction when called transaction params without messageFee', async () => { - const { - mockTransaction, - } = require(mockedTransactionFeeEstimatesFilePath); + const { mockTransaction } = require(mockedTransactionFeeEstimatesFilePath); const { messageFee, ...remTransactionParams } = inputTransaction.params; @@ -480,9 +600,7 @@ describe('Test transaction fees estimates', () => { }); it('should return transaction when called transaction params without messageFeeTokenID', async () => { - const { - mockTransaction, - } = require(mockedTransactionFeeEstimatesFilePath); + const { mockTransaction } = require(mockedTransactionFeeEstimatesFilePath); const { messageFeeTokenID, ...remTransactionParams } = inputTransaction.params; @@ -500,41 +618,28 @@ describe('Test transaction fees estimates', () => { }); it('should throw error when transaction is undefined', async () => { - const { - mockTransaction, - } = require(mockedTransactionFeeEstimatesFilePath); + const { mockTransaction } = require(mockedTransactionFeeEstimatesFilePath); expect(async () => mockTransaction(undefined)).rejects.toThrow(); }); it('should throw error when transaction is null', async () => { - const { - mockTransaction, - } = require(mockedTransactionFeeEstimatesFilePath); + const { mockTransaction } = require(mockedTransactionFeeEstimatesFilePath); expect(async () => mockTransaction(null)).rejects.toThrow(); }); }); describe('Test estimateTransactionFees method', () => { - afterEach(() => jest.clearAllMocks()); - jest.resetModules(); - // Mock the dependencies const { calcAdditionalFees } = require(mockedTransactionFeeEstimatesFilePath); const { calcMessageFee } = require(mockedTransactionFeeEstimatesFilePath); const { getAuthAccountInfo } = require(mockedAuthFilePath); const { getLisk32AddressFromPublicKey } = require(mockedAccountFilePath); - const { requestConnector } = require(mockedRequestFilePath); const { getPosConstants } = require(mockedPOSConstantsFilePath); const { getFeeEstimates } = require(mockedFeeEstimateFilePath); - const { dryRunTransactions } = require(mockedRTransactionsDryRunFilePath); const { getNetworkStatus } = require(mockedNetworkFilePath); - jest.mock(mockedRTransactionsDryRunFilePath, () => ({ - dryRunTransactions: jest.fn(), - })); - jest.mock(mockedAuthFilePath, () => ({ getAuthAccountInfo: jest.fn(), })); @@ -561,11 +666,6 @@ describe('Test transaction fees estimates', () => { }; }); - jest.mock(mockedRequestFilePath, () => ({ - requestConnector: jest.fn(), - requestFeeEstimator: jest.fn(), - })); - jest.mock(mockedPOSConstantsFilePath, () => ({ getPosConstants: jest.fn(), })); @@ -576,10 +676,10 @@ describe('Test transaction fees estimates', () => { it('should calculate transaction fees correctly', async () => { // Mock the return values of the functions - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); getAuthAccountInfo.mockResolvedValue(mockTxAuthAccountInfo); requestConnector - .mockReturnValueOnce(mockTxrequestConnector) + .mockReturnValueOnce(mockTxRequestConnector) .mockReturnValue({ userAccount: '1', escrowAccount: '0', minFee: '130000', size: 160 }); getFeeEstimates.mockReturnValue(mockTxFeeEstimate); calcAdditionalFees.mockResolvedValue({}); @@ -595,15 +695,17 @@ describe('Test transaction fees estimates', () => { it('should calculate transaction fees correctly for transfer cross chain transaction', async () => { // Mock the return values of the functions - dryRunTransactions.mockReturnValue({ data: { events: [{ name: 'ccmSendSuccess', data: { ccm: 'hello' } }] } }); - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + dryRunTransactions.mockReturnValue({ + data: { events: [{ name: 'ccmSendSuccess', data: { ccm: 'hello' } }] }, + }); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); getAuthAccountInfo.mockResolvedValue(mockTxAuthAccountInfo); requestConnector .mockReturnValueOnce(mockAuthAccountInfo) .mockReturnValueOnce(mockEscrowAccountExistsRequestConnector) - .mockReturnValueOnce(mockTransferCrossChainTxrequestConnector) + .mockReturnValueOnce(mockTransferCrossChainTxRequestConnector) .mockReturnValueOnce('encoded CCM Object') - .mockReturnValueOnce(mockTransferCrossChainTxrequestConnector); + .mockReturnValueOnce(mockTransferCrossChainTxRequestConnector); getFeeEstimates.mockReturnValue(mockTxFeeEstimate); calcAdditionalFees.mockResolvedValue({}); calcMessageFee.mockResolvedValue({}); @@ -619,7 +721,7 @@ describe('Test transaction fees estimates', () => { it('should calculate transaction fees correctly for register validator transaction', async () => { // Mock the return values of the functions - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); getAuthAccountInfo.mockResolvedValue(mockTxAuthAccountInfo); requestConnector .mockReturnValueOnce(mockAuthAccountInfo) @@ -633,15 +735,15 @@ describe('Test transaction fees estimates', () => { const { estimateTransactionFees } = require(mockedTransactionFeeEstimatesFilePath); // Call the function - const result = await estimateTransactionFees(mockRegisterValidatorTxrequestConnector); + const result = await estimateTransactionFees(mockRegisterValidatorTxRequestConnector); expect(result).toEqual(mockRegisterValidatorTxResult); }); it('should throw if empty, undefined or null object is passed', async () => { // Mock the return values of the functions - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); getAuthAccountInfo.mockResolvedValue(mockTxAuthAccountInfo); - requestConnector.mockResolvedValue(mockTxrequestConnector); + requestConnector.mockResolvedValue(mockTxRequestConnector); getFeeEstimates.mockReturnValue(mockTxFeeEstimate); calcAdditionalFees.mockResolvedValue({}); calcMessageFee.mockResolvedValue({}); @@ -657,7 +759,7 @@ describe('Test transaction fees estimates', () => { it('should throw when getAuthAccountInfo fails', async () => { // Mock the return values of the functions - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); requestConnector.mockRejectedValue('Error'); getFeeEstimates.mockReturnValue(mockTxFeeEstimate); calcAdditionalFees.mockResolvedValue({}); @@ -672,7 +774,7 @@ describe('Test transaction fees estimates', () => { requestConnector.mockRejectedValue('Error'); // Mock the return values of the functions - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); getAuthAccountInfo.mockResolvedValue(mockTxAuthAccountInfo); getFeeEstimates.mockReturnValue(mockTxFeeEstimate); calcAdditionalFees.mockResolvedValue({}); @@ -687,9 +789,9 @@ describe('Test transaction fees estimates', () => { getFeeEstimates.mockReturnValue(new Error('Error')); // Mock the return values of the functions - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); getAuthAccountInfo.mockResolvedValue(mockTxAuthAccountInfo); - requestConnector.mockResolvedValue(mockTxrequestConnector); + requestConnector.mockResolvedValue(mockTxRequestConnector); calcAdditionalFees.mockResolvedValue({}); calcMessageFee.mockResolvedValue({}); getPosConstants.mockResolvedValue(posConstants); @@ -700,10 +802,10 @@ describe('Test transaction fees estimates', () => { it('should throw Validation Exception when TOKEN_ID specified are incorrect', async () => { // Mock the return values of the functions - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); getAuthAccountInfo.mockResolvedValue(mockTxAuthAccountInfo); requestConnector - .mockReturnValueOnce(mockTxrequestConnector) + .mockReturnValueOnce(mockTxRequestConnector) .mockReturnValue({ userAccount: '1', escrowAccount: '0', minFee: '130000', size: 160 }); getFeeEstimates.mockReturnValue(mockTxFeeEstimate); calcAdditionalFees.mockResolvedValue({}); @@ -720,10 +822,10 @@ describe('Test transaction fees estimates', () => { it('should throw Validation Exception when address specified are incorrect', async () => { // Mock the return values of the functions - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); getAuthAccountInfo.mockResolvedValue(mockTxAuthAccountInfo); requestConnector - .mockReturnValueOnce(mockTxrequestConnector) + .mockReturnValueOnce(mockTxRequestConnector) .mockReturnValue({ userAccount: '1', escrowAccount: '0', minFee: '130000', size: 160 }); getFeeEstimates.mockReturnValue(mockTxFeeEstimate); calcAdditionalFees.mockResolvedValue({}); @@ -753,11 +855,15 @@ describe('Test transaction fees estimates', () => { Object.entries(transactionsMap).forEach(([transactionType, transactionInfo]) => { it(`should calculate transaction fees correctly for ${transactionType} transaction`, async () => { // Mock the return values of the functions - getLisk32AddressFromPublicKey.mockReturnValue(mockTxsenderAddress); + getLisk32AddressFromPublicKey.mockReturnValue(mockTxSenderAddress); getAuthAccountInfo.mockResolvedValue(mockTxAuthAccountInfo); - requestConnector - .mockReturnValueOnce(mockTxrequestConnector) - .mockReturnValue({ userAccount: '1', escrowAccount: '0', fee: '100000000', minFee: '166000', size: 166 }); + requestConnector.mockReturnValueOnce(mockTxRequestConnector).mockReturnValue({ + userAccount: '1', + escrowAccount: '0', + fee: '100000000', + minFee: '166000', + size: 166, + }); getFeeEstimates.mockReturnValue(mockTxFeeEstimate); calcAdditionalFees.mockResolvedValue({}); calcMessageFee.mockResolvedValue({}); @@ -766,12 +872,8 @@ describe('Test transaction fees estimates', () => { const { estimateTransactionFees } = require(mockedTransactionFeeEstimatesFilePath); // Call the function - const result = await estimateTransactionFees( - transactionInfo.request, - ); - expect(result).toEqual( - transactionInfo.result, - ); + const result = await estimateTransactionFees(transactionInfo.request); + expect(result).toEqual(transactionInfo.result); }); }); }); @@ -781,9 +883,7 @@ describe('Test transaction fees estimates', () => { const optionalProps = ['id', 'fee', 'signatures']; it('should return object with required properties', async () => { - const { - filterOptionalProps, - } = require(mockedTransactionFeeEstimatesFilePath); + const { filterOptionalProps } = require(mockedTransactionFeeEstimatesFilePath); const input = { module: 'token', @@ -809,18 +909,14 @@ describe('Test transaction fees estimates', () => { }); it('should return an object when input is undefined', async () => { - const { - filterOptionalProps, - } = require(mockedTransactionFeeEstimatesFilePath); + const { filterOptionalProps } = require(mockedTransactionFeeEstimatesFilePath); const txWithRequiredProps = filterOptionalProps(undefined, optionalProps); expect(Object.getOwnPropertyNames(txWithRequiredProps).length).toBe(0); }); it('should return an object when input is null', async () => { - const { - filterOptionalProps, - } = require(mockedTransactionFeeEstimatesFilePath); + const { filterOptionalProps } = require(mockedTransactionFeeEstimatesFilePath); const txWithRequiredProps = filterOptionalProps(null, optionalProps); expect(Object.getOwnPropertyNames(txWithRequiredProps).length).toBe(0); @@ -828,9 +924,6 @@ describe('Test transaction fees estimates', () => { }); describe('Test getNumberOfSignatures method', () => { - // Mock the dependencies - const { requestConnector } = require(mockedRequestFilePath); - jest.mock(mockedRequestFilePath, () => ({ requestConnector: jest.fn(), })); @@ -842,7 +935,7 @@ describe('Test transaction fees estimates', () => { const { getNumberOfSignatures } = require(mockedTransactionFeeEstimatesFilePath); // Call the function - const result = await getNumberOfSignatures(mockTxsenderAddress); + const result = await getNumberOfSignatures(mockTxSenderAddress); expect(result).toEqual(1); }); @@ -853,7 +946,7 @@ describe('Test transaction fees estimates', () => { const { getNumberOfSignatures } = require(mockedTransactionFeeEstimatesFilePath); // Call the function - const result = await getNumberOfSignatures(mockTxsenderAddress); + const result = await getNumberOfSignatures(mockTxSenderAddress); expect(result).toEqual(2); }); }); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactions.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactions.test.js index 5271840b1..ecf0498ff 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactions.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactions.test.js @@ -13,7 +13,15 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { validateParams } = require('../../../../../shared/dataService/business/transactions'); +const { + mockTxRequest, + mockTransferCrossChainTxRequest, +} = require('../../constants/transactionEstimateFees'); + +const { + validateParams, + normalizeTransactions, +} = require('../../../../../shared/dataService/business/transactions'); jest.mock('lisk-service-framework', () => { const actual = jest.requireActual('lisk-service-framework'); @@ -40,11 +48,13 @@ describe('Test validateParams method', () => { const result = await validateParams(params); const expectedResult = { - propBetweens: [{ - property: 'height', - from: 10, - to: 1000, - }], + propBetweens: [ + { + property: 'height', + from: 10, + to: 1000, + }, + ], }; expect(result).toEqual(expectedResult); }); @@ -62,3 +72,32 @@ describe('Test validateParams method', () => { expect(() => validateParams(null)).rejects.toThrow(); }); }); + +describe('Test normalizeTransactions method', () => { + it('should return normalized transactions when called with valid transactions', async () => { + const transactions = [mockTxRequest.transaction, mockTransferCrossChainTxRequest.transaction]; + const normalizedTransactions = await normalizeTransactions(transactions); + + const expectedResult = [ + { + ...mockTxRequest.transaction, + moduleCommand: `${mockTxRequest.transaction.module}:${mockTxRequest.transaction.command}`, + }, + { + ...mockTransferCrossChainTxRequest.transaction, + moduleCommand: `${mockTransferCrossChainTxRequest.transaction.module}:${mockTransferCrossChainTxRequest.transaction.command}`, + }, + ]; + + expect(normalizedTransactions.length).toEqual(transactions.length); + expect(normalizedTransactions).toEqual(expectedResult); + }); + + it('should throw error when called with null', async () => { + expect(() => normalizeTransactions(null)).rejects.toThrow(); + }); + + it('should throw error when called with undefined', async () => { + expect(() => normalizeTransactions(null)).rejects.toThrow(); + }); +}); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactionsDryRun.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactionsDryRun.test.js index 586ca488b..3cd2d2d90 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactionsDryRun.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/business/transactionsDryRun.test.js @@ -17,9 +17,11 @@ /* eslint-disable import/no-dynamic-require */ const { resolve } = require('path'); -const mockTransactionsDryRunFilePath = resolve(`${__dirname}/../../../../../shared/dataService/business/transactionsDryRun`); +const mockTransactionsDryRunFilePath = resolve( + `${__dirname}/../../../../../shared/dataService/business/transactionsDryRun`, +); const { requestConnector } = require('../../../../../shared/utils/request'); -const { mockTxrequestConnector } = require('../../constants/transactionEstimateFees'); +const { mockTxRequestConnector } = require('../../constants/transactionEstimateFees'); const { mockTransactionsDryRunResultFromNode, mockTransactionsDryRunResult, @@ -64,7 +66,7 @@ describe('Transactions DryRun', () => { const { dryRunTransactions } = require(mockTransactionsDryRunFilePath); const response = await dryRunTransactions({ - transaction: mockTxrequestConnector, + transaction: mockTxRequestConnector, }); expect(requestConnector).toHaveBeenCalledTimes(1); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/indexStatus.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/indexStatus.test.js new file mode 100644 index 000000000..e83e19420 --- /dev/null +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/indexStatus.test.js @@ -0,0 +1,64 @@ +/* + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ +const { + indexStatUpdateListener, + indexingProgressListener, + getIndexStatus, +} = require('../../../../shared/dataService/indexStatus'); + +describe('indexStatUpdateListener', () => { + it('should update index stats', async () => { + const mockIndexStats = { + genesisHeight: 0, + lastBlockHeight: 18779, + lastIndexedBlockHeight: 13955, + chainLength: 18780, + numBlocksIndexed: 13956, + percentageIndexed: 74.31, + isIndexingInProgress: false, + }; + + // Call the function + await indexStatUpdateListener(mockIndexStats); + + // Assert the result + const indexStatus = await getIndexStatus(); + // eslint-disable-next-line no-restricted-syntax, guard-for-in + for (const key in indexStatus) { + expect(mockIndexStats[key]).toEqual(indexStatus.data[key]); + } + }); +}); + +describe('indexingProgressListener', () => { + it('should update indexing in progress status', async () => { + // Call the function + indexingProgressListener(2); // Assuming 2 jobs in progress + + // Assert the result + const indexStatus = await getIndexStatus(); + expect(indexStatus.data.isIndexingInProgress).toBe(true); + }); + + it('should update indexing in progress status to false when no jobs are in progress', async () => { + // Call the function + indexingProgressListener(0); // No jobs in progress + + // Assert the result + const indexStatus = await getIndexStatus(); + expect(indexStatus.data.isIndexingInProgress).toBe(false); + }); +}); diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/knownAccounts.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/knownAccounts.test.js index 8364921fd..86bb42a6b 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/knownAccounts.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/knownAccounts.test.js @@ -18,8 +18,12 @@ const { resolve } = require('path'); // All file paths -const mockedNetworkFilePath = resolve(`${__dirname}/../../../../shared/dataService/business/network`); -const mockedAccountKnowledgeConstantsFilePath = resolve(`${__dirname}/../constants/accountKnowledge`); +const mockedNetworkFilePath = resolve( + `${__dirname}/../../../../shared/dataService/business/network`, +); +const mockedAccountKnowledgeConstantsFilePath = resolve( + `${__dirname}/../constants/accountKnowledge`, +); const knownAccountsFilePath = resolve(`${__dirname}/../../../../shared/dataService/knownAccounts`); // Mock config @@ -56,7 +60,7 @@ describe('reloadAccountKnowledge', () => { Queue: jest.fn(), Logger: () => ({ debug: jest.fn(), - info: async (data) => expect(data).toEqual('Updated known accounts cache with 2 entries.'), + info: async data => expect(data).toEqual('Updated known accounts cache with 2 entries.'), warn: jest.fn(), error: jest.fn(), }), @@ -85,7 +89,8 @@ describe('reloadAccountKnowledge', () => { Logger: () => ({ debug: jest.fn(), info: jest.fn(), - warn: async (data) => expect(data).toEqual('Lisk static URL did not respond with valid data.'), + warn: async data => + expect(data).toEqual('Lisk static URL did not respond with valid data.'), error: jest.fn(), }), }; @@ -114,7 +119,8 @@ describe('reloadAccountKnowledge', () => { debug: jest.fn(), info: jest.fn(), warn: jest.fn(), - error: async (data) => expect(data).toEqual('Could not reload known accounts: Test error message.'), + error: async data => + expect(data).toEqual('Could not reload known accounts: Test error message'), }), }; }); @@ -141,7 +147,10 @@ describe('reloadAccountKnowledge', () => { Logger: () => ({ debug: jest.fn(), info: jest.fn(), - warn: async (data) => expect(data).toEqual('Static information anavailable for the current chainID: invalidChainID.'), + warn: async data => + expect(data).toEqual( + 'Static information unavailable for the current chainID: invalidChainID.', + ), error: jest.fn(), }), }; @@ -169,7 +178,7 @@ describe('reloadAccountKnowledge', () => { }, Logger: () => ({ debug: jest.fn(), - info: async (data) => expect(data).toEqual('Updated known accounts cache with 2 entries.'), + info: async data => expect(data).toEqual('Updated known accounts cache with 2 entries.'), warn: jest.fn(), error: jest.fn(), }), @@ -200,18 +209,14 @@ describe('reloadAccountKnowledge', () => { describe('resolveNetworkByChainID', () => { it('should return the network name for a valid chain ID', () => { - const { - resolveNetworkByChainID, - } = require(knownAccountsFilePath); + const { resolveNetworkByChainID } = require(knownAccountsFilePath); const result = resolveNetworkByChainID(chainID); expect(result).toEqual('mainnet'); }); it('should return the network name for a valid network ID', () => { - const { - resolveNetworkByChainID, - } = require(knownAccountsFilePath); + const { resolveNetworkByChainID } = require(knownAccountsFilePath); const validSidechainID = '00000001'; const result = resolveNetworkByChainID(validSidechainID); @@ -219,9 +224,7 @@ describe('resolveNetworkByChainID', () => { }); it('should return null if the chain ID does not exist in any network', () => { - const { - resolveNetworkByChainID, - } = require(knownAccountsFilePath); + const { resolveNetworkByChainID } = require(knownAccountsFilePath); const invalidChainID = '99999999'; const result = resolveNetworkByChainID(invalidChainID); @@ -245,7 +248,7 @@ describe('getAccountKnowledge', () => { }, Logger: () => ({ debug: jest.fn(), - info: async (data) => expect(data).toEqual('Updated known accounts cache with 2 entries.'), + info: async data => expect(data).toEqual('Updated known accounts cache with 2 entries.'), warn: jest.fn(), error: jest.fn(), }), diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/pos/validators.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/pos/validators.test.js index 5b7532a61..a0e5a224d 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/pos/validators.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/pos/validators.test.js @@ -16,7 +16,9 @@ /* eslint-disable import/no-dynamic-require */ const path = require('path'); -const posValidatorsPath = path.resolve(`${__dirname}/../../../../../shared/dataService/pos/validators`); +const posValidatorsPath = path.resolve( + `${__dirname}/../../../../../shared/dataService/pos/validators`, +); jest.mock('lisk-service-framework', () => { const actual = jest.requireActual('lisk-service-framework'); @@ -63,22 +65,22 @@ describe('Test validatorComparator method', () => { expect(result).toBeGreaterThan(0); }); - it('should return -1 when validator weight is same but first address is smaller', async () => { + it('should return 1 when validator weight is same but first address is smaller', async () => { const { validatorComparator } = require(posValidatorsPath); const result = validatorComparator( { validatorWeight: BigInt(1e20), hexAddress: '002e84247fd3876baca6698d98f0ace199af96ed' }, { validatorWeight: BigInt(1e20), hexAddress: '0282ed03925a5c31271fa3b70bb94ce12fd83ea9' }, ); - expect(result).toBe(-1); + expect(result).toBe(1); }); - it('should return 1 when validator weight is same but first address is greater', async () => { + it('should return -1 when validator weight is same but first address is greater', async () => { const { validatorComparator } = require(posValidatorsPath); const result = validatorComparator( { validatorWeight: BigInt(1e20), hexAddress: '0282ed03925a5c31271fa3b70bb94ce12fd83ea9' }, { validatorWeight: BigInt(1e20), hexAddress: '002e84247fd3876baca6698d98f0ace199af96ed' }, ); - expect(result).toBe(1); + expect(result).toBe(-1); }); it('should return 0 when both validator weight and address are equal', async () => { diff --git a/services/blockchain-indexer/tests/unit/shared/dataservice/transactions.test.js b/services/blockchain-indexer/tests/unit/shared/dataservice/transactions.test.js index f3d5e1263..417fc2ed1 100644 --- a/services/blockchain-indexer/tests/unit/shared/dataservice/transactions.test.js +++ b/services/blockchain-indexer/tests/unit/shared/dataservice/transactions.test.js @@ -84,7 +84,7 @@ describe('dryRunTransactions', () => { it('should return bad request error response on other error', async () => { const mockError = new Error('Some other error'); const expectedErrorResponse = { - data: { error: `Failed to dry run transaction: Error: ${mockError.message}.` }, + data: { error: `Failed to dry run transaction: Error: ${mockError.message}` }, status: 'BAD_REQUEST', }; diff --git a/services/blockchain-indexer/tests/unit/shared/indexer/accountIndex.test.js b/services/blockchain-indexer/tests/unit/shared/indexer/accountIndex.test.js index c4da66fed..3a56ce7b2 100644 --- a/services/blockchain-indexer/tests/unit/shared/indexer/accountIndex.test.js +++ b/services/blockchain-indexer/tests/unit/shared/indexer/accountIndex.test.js @@ -43,7 +43,7 @@ describe('updateAccountInfoPk', () => { DB: { MySQL: { getTableInstance: jest.fn(() => ({ - upsert: jest.fn((data) => { + upsert: jest.fn(data => { expect(data).toEqual({ publicKey: mockPublicKey, address: mockAddress, @@ -95,7 +95,7 @@ describe('updateAccountInfoPk', () => { }, Queue: jest.fn(), Logger: jest.fn().mockReturnValue({ - warn: jest.fn((data) => { + warn: jest.fn(data => { expect(data).toEqual('Failed to update accounts table. Will retry later.'); }), }), @@ -137,7 +137,7 @@ describe('updateAccountInfoPk', () => { }, Queue: jest.fn(), Logger: jest.fn().mockReturnValue({ - warn: jest.fn((data) => { + warn: jest.fn(data => { expect(data).toEqual('Failed to update accounts table. Will retry later.'); }), }), @@ -175,7 +175,7 @@ describe('updateAccountInfoAddr', () => { DB: { MySQL: { getTableInstance: jest.fn(() => ({ - upsert: jest.fn((data) => { + upsert: jest.fn(data => { expect(data).toEqual({ address: mockAddress, }); @@ -226,7 +226,7 @@ describe('updateAccountInfoAddr', () => { }, Queue: jest.fn(), Logger: jest.fn().mockReturnValue({ - warn: jest.fn((data) => { + warn: jest.fn(data => { expect(data).toEqual('Failed to update accounts table. Will retry later.'); }), }), @@ -268,7 +268,7 @@ describe('updateAccountInfoAddr', () => { }, Queue: jest.fn(), Logger: jest.fn().mockReturnValue({ - warn: jest.fn((data) => { + warn: jest.fn(data => { expect(data).toEqual('Failed to update accounts table. Will retry later.'); }), }), diff --git a/services/blockchain-indexer/tests/unit/shared/utils/array.test.js b/services/blockchain-indexer/tests/unit/shared/utils/array.test.js index 03133f982..49d687971 100644 --- a/services/blockchain-indexer/tests/unit/shared/utils/array.test.js +++ b/services/blockchain-indexer/tests/unit/shared/utils/array.test.js @@ -99,8 +99,8 @@ describe('Unit tests for array utilities', () => { }); describe('Test dropDuplicates method', () => { - const isEveryElementUnique = (array) => array - .every((e, i, a) => a.filter(n => n === e).length === 1); + const isEveryElementUnique = array => + array.every((e, i, a) => a.filter(n => n === e).length === 1); it('Array with duplicates', async () => { const input1 = range(2, 8); diff --git a/services/blockchain-indexer/tests/unit/shared/utils/param.test.js b/services/blockchain-indexer/tests/unit/shared/utils/param.test.js index 02c42a7c3..f977731a0 100644 --- a/services/blockchain-indexer/tests/unit/shared/utils/param.test.js +++ b/services/blockchain-indexer/tests/unit/shared/utils/param.test.js @@ -58,21 +58,27 @@ describe('Test normalizeRangeParam method', () => { const params = { key: 'abc:456', }; - expect(() => normalizeRangeParam(params, 'key')).toThrow(new ValidationException("Invalid (non-numeric) 'key' range values supplied: abc:456.")); + expect(() => normalizeRangeParam(params, 'key')).toThrow( + new ValidationException("Invalid (non-numeric) 'key' range values supplied: abc:456."), + ); }); it('should return ValidationException when `to` is not a number', async () => { const params = { key: '123:abc', }; - expect(() => normalizeRangeParam(params, 'key')).toThrow(new ValidationException("Invalid (non-numeric) 'key' range values supplied: 123:abc.")); + expect(() => normalizeRangeParam(params, 'key')).toThrow( + new ValidationException("Invalid (non-numeric) 'key' range values supplied: 123:abc."), + ); }); it('should return ValidationException when `from` is greater than `to`', async () => { const params = { key: '456:123', }; - expect(() => normalizeRangeParam(params, 'key')).toThrow(new ValidationException('From key cannot be greater than to key.')); + expect(() => normalizeRangeParam(params, 'key')).toThrow( + new ValidationException('From key cannot be greater than to key.'), + ); }); it('should return proper response when only `from` is specified', async () => { @@ -84,10 +90,12 @@ describe('Test normalizeRangeParam method', () => { const { key, ...paramsWithoutKey } = params; expect(response).toEqual({ ...paramsWithoutKey, - propBetweens: [{ - property: 'key', - from: 123, - }], + propBetweens: [ + { + property: 'key', + from: 123, + }, + ], }); }); @@ -100,10 +108,12 @@ describe('Test normalizeRangeParam method', () => { const { key, ...paramsWithoutKey } = params; expect(response).toEqual({ ...paramsWithoutKey, - propBetweens: [{ - property: 'key', - to: 456, - }], + propBetweens: [ + { + property: 'key', + to: 456, + }, + ], }); }); @@ -114,16 +124,16 @@ describe('Test normalizeRangeParam method', () => { }; const response = normalizeRangeParam(params, 'key'); const { key, ...paramsWithoutKey } = params; - expect(response).toEqual( - { - ...paramsWithoutKey, - propBetweens: [{ + expect(response).toEqual({ + ...paramsWithoutKey, + propBetweens: [ + { property: 'key', from: 123, to: 456, }, - ], - }); + ], + }); }); it('should return proper response when multiple range params are specified', async () => { @@ -136,24 +146,24 @@ describe('Test normalizeRangeParam method', () => { // Normalize key const response = normalizeRangeParam(params, 'key'); const { key, ...paramsWithoutKey } = params; - expect(response).toEqual( - { - ...paramsWithoutKey, - propBetweens: [{ + expect(response).toEqual({ + ...paramsWithoutKey, + propBetweens: [ + { property: 'key', from: 123, to: 456, }, - ], - }); + ], + }); // Normalize key3 const response2 = normalizeRangeParam(response, 'key3'); const { key3, ...paramsWithoutKey3 } = paramsWithoutKey; - expect(response2).toEqual( - { - ...paramsWithoutKey3, - propBetweens: [{ + expect(response2).toEqual({ + ...paramsWithoutKey3, + propBetweens: [ + { property: 'key', from: 123, to: 456, @@ -163,7 +173,7 @@ describe('Test normalizeRangeParam method', () => { from: 666, to: 777, }, - ], - }); + ], + }); }); }); diff --git a/services/blockchain-indexer/tests/unit/shared/utils/parser.test.js b/services/blockchain-indexer/tests/unit/shared/utils/parser.test.js index a657dd12e..c4a3fa5b5 100644 --- a/services/blockchain-indexer/tests/unit/shared/utils/parser.test.js +++ b/services/blockchain-indexer/tests/unit/shared/utils/parser.test.js @@ -13,10 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - parseToJSONCompatObj, - parseInputBySchema, -} = require('../../../../shared/utils/parser'); +const { parseToJSONCompatObj, parseInputBySchema } = require('../../../../shared/utils/parser'); const { liskAccount, @@ -31,16 +28,25 @@ const { describe('Test parse utilities', () => { describe('parseToJSONCompatObj', () => { it('should parse buffer', async () => { - const bufferData = Buffer.from('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'hex'); + const bufferData = Buffer.from( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + 'hex', + ); const parsedResult = parseToJSONCompatObj(bufferData); expect(typeof parsedResult).toBe('string'); - expect(parsedResult).toEqual('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'); + expect(parsedResult).toEqual( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + ); }); it('should parse string', async () => { - const parsedResult = parseToJSONCompatObj('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'); + const parsedResult = parseToJSONCompatObj( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + ); expect(typeof parsedResult).toBe('string'); - expect(parsedResult).toEqual('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'); + expect(parsedResult).toEqual( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + ); }); it('should parse number', async () => { @@ -85,11 +91,13 @@ describe('Test parse utilities', () => { }); it('should parse array of object', async () => { - const data = [{ - delegateAddress: Buffer.from('8a9494ab112fb99ffd0ae8b653c4ed4e27f87fcb', 'hex'), - amount: BigInt(2000000000), - unvoteHeight: 934107, - }]; + const data = [ + { + delegateAddress: Buffer.from('8a9494ab112fb99ffd0ae8b653c4ed4e27f87fcb', 'hex'), + amount: BigInt(2000000000), + unvoteHeight: 934107, + }, + ]; const parsedResult = parseToJSONCompatObj(data); expect(parsedResult).toBeInstanceOf(Array); expect(parsedResult[0]).toMatchObject({ diff --git a/services/blockchain-indexer/tests/unit/shared/utils/transactions.test.js b/services/blockchain-indexer/tests/unit/shared/utils/transactions.test.js index a25d2e845..e15a671d6 100644 --- a/services/blockchain-indexer/tests/unit/shared/utils/transactions.test.js +++ b/services/blockchain-indexer/tests/unit/shared/utils/transactions.test.js @@ -13,19 +13,15 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { normalizeTransaction, getTransactionExecutionStatus } = require('../../../../shared/utils/transactions'); +const { + normalizeTransaction, + getTransactionExecutionStatus, +} = require('../../../../shared/utils/transactions'); const { TRANSACTION_STATUS } = require('../../../../shared/constants'); -const { - inputTransaction, - expectedTransaction, -} = require('../../../constants/transactions'); +const { inputTransaction, expectedTransaction } = require('../../../constants/transactions'); -const { - validTx, - eventsForValidTx, - eventsWithFailStatus, -} = require('../../../constants/events'); +const { validTx, eventsForValidTx, eventsWithFailStatus } = require('../../../constants/events'); describe('Test normalizeTransaction method', () => { it('should return normalizedTransaction -> valid tx', async () => { diff --git a/services/blockchain-indexer/yarn.lock b/services/blockchain-indexer/yarn.lock index c1b019ace..d2110c33f 100644 --- a/services/blockchain-indexer/yarn.lock +++ b/services/blockchain-indexer/yarn.lock @@ -10,46 +10,46 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -61,40 +61,40 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953" + integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -103,10 +103,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -114,7 +114,7 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -134,24 +134,24 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -171,7 +171,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -180,7 +180,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -210,20 +210,20 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" @@ -234,44 +234,52 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" + integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -320,17 +328,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -348,6 +356,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -405,9 +420,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -419,211 +434,212 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" + integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" + integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -634,198 +650,199 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.14.0": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a" + integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ== dependencies: - "@babel/compat-data" "^7.22.20" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -837,59 +854,58 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" core-js-compat "^3.31.0" semver "^6.3.1" @@ -908,13 +924,13 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.8.4": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" + integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": +"@babel/template@^7.22.15", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== @@ -923,28 +939,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -981,142 +997,164 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" "@jest/transform@^27.5.1": version "27.5.1" @@ -1139,6 +1177,27 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + "@jest/types@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" @@ -1150,6 +1209,18 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -1174,69 +1245,79 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" -"@liskhq/lisk-codec@^0.4.0-rc.1": - version "0.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-codec/-/lisk-codec-0.4.0-rc.1.tgz#fbffec74bd54efb820758cc00ca9737d913b452e" - integrity sha512-o5vPFhh2siETT9lDWu+ZJo/Ni5/EYtvUoi3k1kWaJ/X6YF03J4L2GZoRVzZKnXPMPuUDJyT131gUjM0Z3BPgSA== +"@liskhq/lisk-codec@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-codec/-/lisk-codec-0.4.0.tgz#0b512f7bc835f921d728ead04d498b1a7a647cd1" + integrity sha512-03mgvftrWK5KfjBl/VSceEBtcr2wA4NLGnuBsoxKiwL/Bolfd1f3rdXbQgUKzeY4UJEoDGHN6jRPbXLHH/yUnw== dependencies: - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" - "@liskhq/lisk-utils" "^0.4.0-rc.0" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-cryptography" "^4.0.0" + "@liskhq/lisk-utils" "^0.4.0" + "@liskhq/lisk-validator" "^0.8.0" -"@liskhq/lisk-cryptography@4.0.0-rc.1", "@liskhq/lisk-cryptography@^4.0.0-rc.1": - version "4.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0-rc.1.tgz#b8df408aa1a94362091eda06b0a38577e4db5ead" - integrity sha512-e9ubCGSi8OzOJ21i8Mlc7Zsu+b2ofMGsC0QegzhQSf9Vf5+qAk2CHUR0X/+kT8wvSIpN6krfbz81sfzDPq/PBQ== +"@liskhq/lisk-cryptography@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0.tgz#f8752053f5512a6257a6b59a9ae45567e4ff5053" + integrity sha512-246hoey+sKx0/2GrECXfsjTmhv5PaD0z/vYpV1zTL4qPOHaDNqbKsSLg/uAt2OfM7et1KoG76jpYzaiifqCJiw== dependencies: - "@liskhq/lisk-passphrase" "^4.0.0-rc.0" + "@liskhq/lisk-passphrase" "^4.0.0" buffer-reverse "1.0.1" hash-wasm "4.9.0" tweetnacl "1.0.3" -"@liskhq/lisk-passphrase@^4.0.0-rc.0": - version "4.0.0-rc.0" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.0.0-rc.0.tgz#78fe583229c96d76258906375e34ff84a413be05" - integrity sha512-m87nhvUpOlSLr5NRV2M4INtg0IjjFF7Bte96Iq6X1dhzOjlmPg/QUQa7MFUzQu3NEWWHnpwON8QQK1FUE6ixYw== +"@liskhq/lisk-cryptography@^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.1.0.tgz#8621bcb61008adb5faee4d148a91e1da068ab3cc" + integrity sha512-5//E14nlqyvOE21uwB8zCCYe0JmeEVCQ6gg/TjboKYEct/OX0GkK5gyb6tqJr8ApaQxRaL5WqPt2VOwxf564VA== + dependencies: + "@liskhq/lisk-passphrase" "^4.1.0" + buffer-reverse "1.0.1" + hash-wasm "4.9.0" + tweetnacl "1.0.3" + +"@liskhq/lisk-passphrase@^4.0.0", "@liskhq/lisk-passphrase@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.1.0.tgz#d9a72a9c9d4cdb557a25b84bffe73d579155f723" + integrity sha512-1VdpEp+OGiyCF0Fjtgcc+SLlHeIflzya49GzIXcXjFNf19VgkUu/eIDM8XHxSdj/5KzpL+yD07OYCh+LdoAkfA== dependencies: bip39 "3.0.3" -"@liskhq/lisk-transactions@6.0.0-rc.1": - version "6.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-transactions/-/lisk-transactions-6.0.0-rc.1.tgz#4d4583487ae778aac8ffcb622227da99ef5940b7" - integrity sha512-zfgdkS0ySaiSK4j7NNcrXqatk2gViTvBqjFBgGviqA4xUlSZWFaHYIgRzxkOKvDT1EsA5YUk2Z2ARj5xMZVvzw== +"@liskhq/lisk-transactions@6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-transactions/-/lisk-transactions-6.0.0.tgz#6bcd43b1cd3a7787f98fe41d1abd8ed26c180e7b" + integrity sha512-HnvPxtoglIR1qHohIXg7K9HCiU0naMcz2+wZUH1jwgDwugCNaypLSTNat1dI7/5MHn8MpohHun0a1tWmJZYH/A== dependencies: - "@liskhq/lisk-codec" "^0.4.0-rc.1" - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-codec" "^0.4.0" + "@liskhq/lisk-cryptography" "^4.0.0" + "@liskhq/lisk-validator" "^0.8.0" -"@liskhq/lisk-utils@0.4.0-rc.0", "@liskhq/lisk-utils@^0.4.0-rc.0": - version "0.4.0-rc.0" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-utils/-/lisk-utils-0.4.0-rc.0.tgz#6337e1d7e8ca766bbc7ea07408eaf34b2e51bd93" - integrity sha512-oMTRwkWWBNqZABXQTFxvo6L/vyAeYka9MlNGNZE7ObaAO8JjxHRukQDZAX36+NcrvREsp1yNQF8YW1xFs+XIvg== +"@liskhq/lisk-utils@0.4.0", "@liskhq/lisk-utils@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-utils/-/lisk-utils-0.4.0.tgz#84a8281d6f1db0605e286fcc41721965df474a71" + integrity sha512-rzZZrh36GVSqB65Y4LjaZIe2AVLUH8zXNDNBX0MXM7pI5BhBesDmDpVS2qVLoF7lhyBmUPk9SrARI0wK9/+z9g== dependencies: lodash.clonedeep "4.5.0" -"@liskhq/lisk-validator@0.8.0-rc.1", "@liskhq/lisk-validator@^0.8.0-rc.1": - version "0.8.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-validator/-/lisk-validator-0.8.0-rc.1.tgz#f723bd1667e61c4c5bec680343342c1f8191ff67" - integrity sha512-gLFa+5scCVPWc6cZEx5cALx6gRmF51xH/Szg7YeWi6uJkcQBSlT3ephvAUEVOWcRQ4SL7XadM/vWE0wXvoqqeA== +"@liskhq/lisk-validator@0.8.0", "@liskhq/lisk-validator@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-validator/-/lisk-validator-0.8.0.tgz#af62c4ef9cc71b2bd696eb70dca89ca7411c96c3" + integrity sha512-aChkjwuwBBzvDIQhyCRozOvQ0fTWjzAOLZJi3i53+1op6J3f6LZYG6ffA6q/x6W1/tQbApSoc2GJWrSCjmFpFw== dependencies: - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" + "@liskhq/lisk-cryptography" "^4.0.0" ajv "8.1.0" ajv-formats "2.1.1" debug "4.3.4" @@ -1279,34 +1360,34 @@ resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz#0f164b726869f71da3c594171df5ebc1c4b0a407" integrity sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ== -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -1315,24 +1396,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" @@ -1342,74 +1423,73 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/node@11.11.6": version "11.11.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" accepts@~1.3.4: version "1.3.8" @@ -1419,36 +1499,6 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ajv-formats@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -1574,14 +1624,16 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.3.0, babel-jest@^27.5.1: +babel-jest@^27.3.0: version "27.5.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== @@ -1595,6 +1647,19 @@ babel-jest@^27.3.0, babel-jest@^27.5.1: graceful-fs "^4.2.9" slash "^3.0.0" +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -1616,29 +1681,39 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" + integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz#1fac2b1dcef6274e72b3c72977ed8325cb330591" - integrity sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg== +babel-plugin-polyfill-corejs3@^0.8.5: + version "0.8.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.32.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" + integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -1666,6 +1741,14 @@ babel-preset-jest@^27.5.1: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1682,9 +1765,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -1753,19 +1836,14 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.10, browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: @@ -1810,9 +1888,9 @@ bull@^3.29.3: uuid "^8.3.0" bull@^4.8.1: - version "4.11.3" - resolved "https://registry.yarnpkg.com/bull/-/bull-4.11.3.tgz#466214c8d2aa6ac4fc3133c3616d31a37af4c099" - integrity sha512-DhS0XtiAuejkAY08iGOdDK35eex/yGNoezlWqGJTu9FqWFF/oBjUhpsusE9SXiI4culyDbOoFs+l3ar0VXhFqQ== + version "4.11.5" + resolved "https://registry.yarnpkg.com/bull/-/bull-4.11.5.tgz#59b51d631467fa83c1a3437b7fcf262005bea529" + integrity sha512-9jazyvBBYr55IRDkfJh/mJjWiq8NJUMoCC5zTuBX4JhkZvVXegnwsaIa1jr3x9xwSxGvWEhwQ9lt1jlCT5j6pQ== dependencies: cron-parser "^4.2.1" get-port "^5.1.1" @@ -1827,13 +1905,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1855,10 +1934,10 @@ camelcase@^6.2.0, camelcase@^6.3.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -1888,9 +1967,9 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -1905,13 +1984,13 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: @@ -1985,7 +2064,7 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: +convert-source-map@^1.4.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -2000,12 +2079,12 @@ cookie@~0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.31.0, core-js-compat@^3.32.2: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" - integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.34.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.34.0.tgz#61a4931a13c52f8f08d924522bba65f8c94a5f17" + integrity sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA== dependencies: - browserslist "^4.21.10" + browserslist "^4.22.2" cors@~2.8.5: version "2.8.5" @@ -2038,6 +2117,19 @@ create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" @@ -2062,32 +2154,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -2100,7 +2166,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2119,11 +2185,6 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -2131,10 +2192,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -2146,16 +2207,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2199,32 +2260,25 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -2244,9 +2298,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -2260,9 +2314,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -2283,25 +2337,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -2311,7 +2365,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -2325,7 +2379,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -2333,13 +2387,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -2375,32 +2429,16 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2441,22 +2479,23 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -2498,7 +2537,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -2510,10 +2549,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -2548,10 +2587,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -2585,15 +2624,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -2628,7 +2667,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2680,11 +2719,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -2703,13 +2742,6 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hash-base@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" @@ -2724,12 +2756,12 @@ hash-wasm@4.9.0: resolved "https://registry.yarnpkg.com/hash-wasm/-/hash-wasm-4.9.0.tgz#7e9dcc9f7d6bd0cc802f2a58f24edce999744206" integrity sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w== -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" @@ -2747,28 +2779,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -2825,12 +2840,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -2838,7 +2853,7 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -ioredis@^4.27.0, ioredis@^4.28.5: +ioredis@^4.27.0: version "4.28.5" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== @@ -2910,11 +2925,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2958,11 +2973,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -3037,11 +3047,11 @@ isstream@^0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -3052,6 +3062,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -3078,145 +3099,130 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== jest-haste-map@^27.5.1: version "27.5.1" @@ -3238,69 +3244,66 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -3312,83 +3315,86 @@ jest-regex-util@^27.5.1: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" @@ -3400,33 +3406,31 @@ jest-serializer@^27.5.1: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" jest-util@^27.5.1: version "27.5.1" @@ -3440,29 +3444,42 @@ jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" jest-when@^3.5.1: @@ -3479,14 +3496,25 @@ jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: - "@jest/core" "^27.5.1" + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -3501,39 +3529,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3587,9 +3582,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -3638,13 +3633,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -3705,7 +3700,7 @@ lodash.isarguments@^3.1.0: resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3751,9 +3746,9 @@ lru-cache@^8.0.0: integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== luxon@^3.2.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.3.tgz#8ddf0358a9492267ffec6a13675fbaab5551315d" - integrity sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg== + version "3.4.4" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af" + integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA== make-dir@^4.0.0: version "4.0.0" @@ -3841,9 +3836,9 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -3858,9 +3853,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.17, moleculer@^0.14.21: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -3920,16 +3915,16 @@ msgpackr-extract@^3.0.2: "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" msgpackr@^1.5.2: - version "1.9.9" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.9.tgz#ec71e37beb8729280847f683cb0a340eb35ce70f" - integrity sha512-sbn6mioS2w0lq1O6PpGtsv6Gy8roWM+o3o4Sqjd6DudrL/nOugY+KyJUimoWzHnf9OkO0T6broHFnYE/R05t9A== + version "1.10.0" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.10.0.tgz#adbca9c951f06647a808f76bc00a519cf6f7fbe4" + integrity sha512-rVQ5YAQDoZKZLX+h8tNq7FiHrPJoeGHViz3U4wIcykhAEpwF/nH2Vbk8dQxmpX5JavkI8C7pt4bnkJ02ZmRoUw== optionalDependencies: msgpackr-extract "^3.0.2" mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -3971,9 +3966,9 @@ negotiator@0.6.3: integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" @@ -4002,10 +3997,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" @@ -4024,20 +4019,15 @@ nuid@^1.1.4: resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -4045,12 +4035,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -4103,6 +4093,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -4137,11 +4134,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4228,14 +4220,14 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" prettyjson@^1.2.1: version "1.2.5" @@ -4264,10 +4256,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -4277,10 +4269,15 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" @@ -4296,11 +4293,6 @@ qs@^6.11.0: dependencies: side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - randombytes@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -4333,10 +4325,10 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" @@ -4445,11 +4437,6 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -4462,15 +4449,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.14.2, resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -4481,13 +4468,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -4525,13 +4505,6 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@7.5.2: version "7.5.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" @@ -4544,7 +4517,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.5.2, semver@^7.5.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -4585,6 +4558,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -4628,7 +4611,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4700,24 +4683,19 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4767,7 +4745,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4844,7 +4822,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -4858,24 +4836,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -4902,14 +4867,6 @@ tarn@^3.0.2: resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -4924,11 +4881,6 @@ text-decoding@^1.0.0: resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - tildify@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" @@ -4961,23 +4913,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -5086,6 +5021,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -5114,11 +5054,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -5139,14 +5074,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -5170,14 +5097,14 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" validator@13.7.0: version "13.7.0" @@ -5189,21 +5116,7 @@ vary@^1: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -5215,28 +5128,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -5245,15 +5136,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -5265,13 +5147,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -5307,26 +5189,19 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest-ssl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" @@ -5347,20 +5222,25 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/services/export/README.md b/services/export/README.md index 3a24851b4..96a3d9090 100644 --- a/services/export/README.md +++ b/services/export/README.md @@ -37,7 +37,7 @@ A list of the most commonly used environment variables is presented below: - `EXPORT_S3_BUCKET_NAME`: Amazon S3 bucket name. Optional. > **Note**: `interval` takes priority over `schedule` and must be greater than 0 to be valid for all the moleculer job configurations. -> **Note**: When EXPORT_S3_* environment variables are not specified, the local filesystem is used. +> **Note**: When EXPORT*S3*\* environment variables are not specified, the local filesystem is used. ## Management diff --git a/services/export/app.js b/services/export/app.js index 29deaddb2..4b046972c 100644 --- a/services/export/app.js +++ b/services/export/app.js @@ -14,11 +14,7 @@ * */ const path = require('path'); -const { - Microservice, - LoggerConfig, - Logger, -} = require('lisk-service-framework'); +const { Microservice, LoggerConfig, Logger } = require('lisk-service-framework'); const config = require('./config'); @@ -45,10 +41,13 @@ app.addMethods(path.join(__dirname, 'methods')); app.addJobs(path.join(__dirname, 'jobs')); // Run the application -app.run().then(() => { - logger.info(`Service started ${packageJson.name}.`); -}).catch(err => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); - logger.fatal(err.stack); - process.exit(1); -}); +app + .run() + .then(() => { + logger.info(`Service started ${packageJson.name}.`); + }) + .catch(err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); + logger.fatal(err.stack); + process.exit(1); + }); diff --git a/services/export/config.js b/services/export/config.js index eec577ebf..d81b58cce 100644 --- a/services/export/config.js +++ b/services/export/config.js @@ -18,15 +18,17 @@ const packageJson = require('./package.json'); const config = {}; // Moleculer broker config -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 5; // in seconds /** * External endpoints */ config.endpoints = {}; -config.endpoints.redis = process.env.SERVICE_EXPORT_REDIS || 'redis://127.0.0.1:6379/3'; -config.endpoints.volatileRedis = process.env.SERVICE_EXPORT_REDIS_VOLATILE || 'redis://127.0.0.1:6379/4'; +config.endpoints.redis = + process.env.SERVICE_EXPORT_REDIS || 'redis://lisk:password@127.0.0.1:6379/3'; +config.endpoints.volatileRedis = + process.env.SERVICE_EXPORT_REDIS_VOLATILE || 'redis://lisk:password@127.0.0.1:6379/4'; // Logging config.log = { @@ -83,6 +85,8 @@ config.queue = { attempts: 5, timeout: 5 * 60 * 1000, // millisecs removeOnComplete: true, + removeOnFail: true, + stackTraceLimit: 0, }, settings: {}, }, @@ -116,7 +120,7 @@ config.s3.bucketNameDefault = process.env.EXPORT_S3_BUCKET_NAME || 'export'; config.job = { // Interval takes priority over schedule and must be greater than 0 to be valid purgeCache: { - interval: process.env.JOB_INTERVAL_CACHE_PURGE || 0, + interval: Number(process.env.JOB_INTERVAL_CACHE_PURGE) || 0, schedule: process.env.JOB_SCHEDULE_CACHE_PURGE || '45 4 * * *', }, }; diff --git a/services/export/jest.config.functional.js b/services/export/jest.config.functional.js index 22871a84e..18a8f9c56 100644 --- a/services/export/jest.config.functional.js +++ b/services/export/jest.config.functional.js @@ -10,7 +10,5 @@ module.exports = { testEnvironment: 'node', // The glob patterns Jest uses to detect test files - testMatch: [ - '**/tests/functional/**/?(*.)+(spec|test).[tj]s?(x)', - ], + testMatch: ['**/tests/functional/**/?(*.)+(spec|test).[tj]s?(x)'], }; diff --git a/services/export/jest.config.unit.js b/services/export/jest.config.unit.js index f14628449..865a77657 100644 --- a/services/export/jest.config.unit.js +++ b/services/export/jest.config.unit.js @@ -10,7 +10,5 @@ module.exports = { testEnvironment: 'node', // The glob patterns Jest uses to detect test files - testMatch: [ - '**/tests/unit/**/?(*.)+(spec|test).[tj]s?(x)', - ], + testMatch: ['**/tests/unit/**/?(*.)+(spec|test).[tj]s?(x)'], }; diff --git a/services/export/jobs/purge.js b/services/export/jobs/purge.js index 9d272a0d4..d74291c3d 100644 --- a/services/export/jobs/purge.js +++ b/services/export/jobs/purge.js @@ -28,7 +28,7 @@ module.exports = [ interval: config.job.purgeCache.interval, schedule: config.job.purgeCache.schedule, controller: () => { - logger.info('Performing cache maintenance'); + logger.info('Running cache maintenance.'); partials.purge(); staticFiles.purge(); }, diff --git a/services/export/methods/controllers/export.js b/services/export/methods/controllers/export.js index 75a633183..6724550b0 100644 --- a/services/export/methods/controllers/export.js +++ b/services/export/methods/controllers/export.js @@ -17,15 +17,12 @@ const { HTTP: { StatusCodes: { NOT_FOUND }, }, - Exceptions: { - ServiceUnavailableException, - NotFoundException, - }, + Exceptions: { ServiceUnavailableException, NotFoundException }, } = require('lisk-service-framework'); const exportService = require('../../shared/transactionsExport'); -const scheduleTransactionHistoryExport = async (params) => { +const scheduleTransactionHistoryExport = async params => { const exportResponse = { data: {}, meta: {}, @@ -50,7 +47,7 @@ const scheduleTransactionHistoryExport = async (params) => { } }; -const downloadTransactionHistory = async (params) => { +const downloadTransactionHistory = async params => { try { const csv = await exportService.downloadTransactionHistory(params); return csv; diff --git a/services/export/package.json b/services/export/package.json index 4cb834a25..5fb4c444e 100644 --- a/services/export/package.json +++ b/services/export/package.json @@ -1,6 +1,6 @@ { "name": "lisk-service-export", - "version": "0.7.0-rc.1", + "version": "0.7.2", "description": "Lisk Service Export", "keywords": [ "lisk", @@ -31,12 +31,13 @@ "watch": "supervisor -w . -i ./node_modules app.js" }, "dependencies": { - "@liskhq/lisk-cryptography": "4.0.0-rc.1", + "@liskhq/lisk-cryptography": "4.0.0", "bluebird": "^3.7.2", "bull": "^3.29.2", "exceljs": "^4.3.0", + "ioredis": "^5.3.2", "json2csv": "^5.0.6", - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz", "minio": "^7.0.21", "moment": "^2.29.4", "moment-range": "^4.0.2", @@ -44,6 +45,6 @@ "node-xlsx": "^0.23.0" }, "devDependencies": { - "jest": "^27.3.0" + "jest": "^29.7.0" } } diff --git a/services/export/shared/csvCache.js b/services/export/shared/csvCache.js index ac17d9157..77c40e04a 100644 --- a/services/export/shared/csvCache.js +++ b/services/export/shared/csvCache.js @@ -14,9 +14,7 @@ * */ const { - Exceptions: { - NotFoundException, - }, + Exceptions: { NotFoundException }, } = require('lisk-service-framework'); const FileStorage = require('./helpers/file'); @@ -27,37 +25,29 @@ const DRIVERS = { S3: 's3-minio', }; -const objectCacheFS = (params) => { - const { - init, - write, - read, - fileExists, - remove, - purge, - isFile, - isFilePathInDirectory, - } = FileStorage; +const objectCacheFS = params => { + const { init, write, read, fileExists, remove, purge, isFile, isFilePathInDirectory } = + FileStorage; const { dirPath, retentionInDays } = params; init({ dirPath }); return { write: (filename, content) => write(`${dirPath}/${filename}`, content), - read: (filename) => { + read: filename => { if (isFilePathInDirectory(`${dirPath}/${filename}`, dirPath)) { return read(`${dirPath}/${filename}`); } return Promise.reject(new Error('Filepath is not allowed.')); }, - fileExists: (filename) => fileExists(`${dirPath}/${filename}`), - remove: (filename) => remove(`${dirPath}/${filename}`), + fileExists: filename => fileExists(`${dirPath}/${filename}`), + remove: filename => remove(`${dirPath}/${filename}`), purge: () => purge(dirPath, retentionInDays), - isFile: (filename) => isFile(`${dirPath}/${filename}`), + isFile: filename => isFile(`${dirPath}/${filename}`), }; }; -const objectCacheS3 = (params) => { +const objectCacheS3 = params => { const { init, write, read, exists, remove, purge, isFile } = S3Storage; const { retentionInDays } = params; @@ -65,15 +55,15 @@ const objectCacheS3 = (params) => { return { write: (filename, content) => write(filename, content), - read: (filename) => read(filename), - exists: (filename) => exists(filename), - remove: (filename) => remove(filename), + read: filename => read(filename), + exists: filename => exists(filename), + remove: filename => remove(filename), purge: () => purge('', retentionInDays), - isFile: (filename) => isFile(filename), + isFile: filename => isFile(filename), }; }; -const objectCache = (params) => { +const objectCache = params => { const { driver } = params; // Check if the storage `driver` is supported diff --git a/services/export/shared/helpers/account.js b/services/export/shared/helpers/account.js index 48cb37e92..8ba1cd6f6 100644 --- a/services/export/shared/helpers/account.js +++ b/services/export/shared/helpers/account.js @@ -15,23 +15,22 @@ */ const { utils: { hash }, - address: { - getLisk32AddressFromPublicKey: getLisk32AddressFromPublicKeyHelper, - }, - legacyAddress: { - getFirstEightBytesReversed, - }, + address: { getLisk32AddressFromPublicKey: getLisk32AddressFromPublicKeyHelper }, + legacyAddress: { getFirstEightBytesReversed }, } = require('@liskhq/lisk-cryptography'); const { PUBLIC_KEY, ADDRESS_LISK32 } = require('../regex'); -const validateLisk32Address = address => (typeof address === 'string' && ADDRESS_LISK32.test(address)); +const validateLisk32Address = address => + typeof address === 'string' && ADDRESS_LISK32.test(address); -const validatePublicKey = publicKey => (typeof publicKey === 'string' && PUBLIC_KEY.test(publicKey)); +const validatePublicKey = publicKey => typeof publicKey === 'string' && PUBLIC_KEY.test(publicKey); -const getLisk32AddressFromPublicKey = publicKey => getLisk32AddressFromPublicKeyHelper(Buffer.from(publicKey, 'hex')); +const getLisk32AddressFromPublicKey = publicKey => + getLisk32AddressFromPublicKeyHelper(Buffer.from(publicKey, 'hex')); -const getLegacyAddress = (publicKey) => getFirstEightBytesReversed(hash(Buffer.from(publicKey, 'hex'))).toString('hex'); +const getLegacyAddress = publicKey => + getFirstEightBytesReversed(hash(Buffer.from(publicKey, 'hex'))).toString('hex'); module.exports = { validateLisk32Address, diff --git a/services/export/shared/helpers/chain.js b/services/export/shared/helpers/chain.js index d8c8c0062..901e6e413 100644 --- a/services/export/shared/helpers/chain.js +++ b/services/export/shared/helpers/chain.js @@ -31,12 +31,12 @@ const getCurrentChainID = async () => { return chainID; }; -const resolveReceivingChainID = (tx, currentChainID) => tx - .moduleCommand === `${MODULE.TOKEN}:${COMMAND.TRANSFER_CROSS_CHAIN}` - ? tx.params.receivingChainID - : currentChainID; +const resolveReceivingChainID = (tx, currentChainID) => + tx.moduleCommand === `${MODULE.TOKEN}:${COMMAND.TRANSFER_CROSS_CHAIN}` + ? tx.params.receivingChainID + : currentChainID; -const getUniqueChainIDs = async (txs) => { +const getUniqueChainIDs = async txs => { const chainIDs = new Set(); txs.forEach(tx => { if (tx.sendingChainID) chainIDs.add(tx.sendingChainID); diff --git a/services/export/shared/helpers/file.js b/services/export/shared/helpers/file.js index 4fa39832d..2df90374a 100644 --- a/services/export/shared/helpers/file.js +++ b/services/export/shared/helpers/file.js @@ -17,40 +17,26 @@ const fs = require('fs'); const BluebirdPromise = require('bluebird'); const { Utils: { - fs: { - stats, - mkdir, - read, - write, - isFile, - getFiles, - fileExists, - isFilePathInDirectory, - rm, - }, + fs: { stats, mkdir, read, write, isFile, getFiles, fileExists, isFilePathInDirectory, rm }, }, Logger, Exceptions: { ValidationException }, } = require('lisk-service-framework'); -const { - getDaysInMilliseconds, -} = require('./time'); +const { getDaysInMilliseconds } = require('./time'); const logger = Logger(); -const list = (dirPath, count = 100, page = 0) => new Promise((resolve, reject) => { - fs.readdir( - dirPath, - (err, files) => { +const list = (dirPath, count = 100, page = 0) => + new Promise((resolve, reject) => { + fs.readdir(dirPath, (err, files) => { if (err) { logger.error(err); return reject(err); } return resolve(files.slice(page, page + count)); - }, - ); -}); + }); + }); const purge = async (dirPath, days) => { if (days === undefined) throw new ValidationException('days cannot be undefined.'); @@ -62,7 +48,7 @@ const purge = async (dirPath, days) => { // Calculate the expiration time for each file and remove if expired await BluebirdPromise.map( files, - async (filePath) => { + async filePath => { const stat = await stats(filePath); const currentTime = new Date().getTime(); const expirationTime = new Date(stat.ctime).getTime() + getDaysInMilliseconds(days); @@ -81,7 +67,7 @@ const purge = async (dirPath, days) => { } }; -const init = async (params) => mkdir(params.dirPath); +const init = async params => mkdir(params.dirPath); module.exports = { init, diff --git a/services/export/shared/helpers/index.js b/services/export/shared/helpers/index.js index 9fb6367fc..4be31fd7e 100644 --- a/services/export/shared/helpers/index.js +++ b/services/export/shared/helpers/index.js @@ -27,12 +27,7 @@ const { getUniqueChainIDs, } = require('./chain'); -const { - MODULE, - COMMAND, - EVENT, - MODULE_SUB_STORE, -} = require('./constants'); +const { MODULE, COMMAND, EVENT, MODULE_SUB_STORE } = require('./constants'); const { init, @@ -53,11 +48,7 @@ const { requestAppRegistry, } = require('./request'); -const { - getDaysInMilliseconds, - dateFromTimestamp, - timeFromTimestamp, -} = require('./time'); +const { getDaysInMilliseconds, dateFromTimestamp, timeFromTimestamp } = require('./time'); const { normalizeTransactionAmount, diff --git a/services/export/shared/helpers/request.js b/services/export/shared/helpers/request.js index f3d6ac095..0398ba4cb 100644 --- a/services/export/shared/helpers/request.js +++ b/services/export/shared/helpers/request.js @@ -16,7 +16,7 @@ let app; -const setAppContext = (h) => app = h; +const setAppContext = h => (app = h); const getAppContext = () => app; diff --git a/services/export/shared/helpers/s3.js b/services/export/shared/helpers/s3.js index ad167c880..b2a838036 100644 --- a/services/export/shared/helpers/s3.js +++ b/services/export/shared/helpers/s3.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - Readable, -} = require('stream'); +const { Readable } = require('stream'); const Minio = require('minio'); const moment = require('moment'); @@ -54,135 +52,124 @@ const awsClientParams = { if (AWS_S3_SESSION_TOKEN) Object.assign(awsClientParams, { sessionToken: AWS_S3_SESSION_TOKEN }); -const clientParams = (AWS_S3_ACCESS_KEY && AWS_S3_SECRET_KEY) - ? awsClientParams - : minioClientParams; +const clientParams = AWS_S3_ACCESS_KEY && AWS_S3_SECRET_KEY ? awsClientParams : minioClientParams; const minioClient = new Minio.Client(clientParams); // eslint-disable-next-line no-unused-vars -const createDir = async (dirPath, options) => new Promise((resolve, reject) => { - // Check if bucket exists, create if not exist - minioClient.bucketExists( - AWS_S3_BUCKET_NAME, - (errBucketExists, isExists) => { +const createDir = async (dirPath, options) => + new Promise((resolve, reject) => { + // Check if bucket exists, create if not exist + minioClient.bucketExists(AWS_S3_BUCKET_NAME, (errBucketExists, isExists) => { if (errBucketExists) return reject(errBucketExists); - if (isExists) return resolve(`Bucket ${AWS_S3_BUCKET_NAME} already exists in region '${AWS_S3_REGION}'.`); - - return minioClient.makeBucket( - AWS_S3_BUCKET_NAME, - AWS_S3_REGION, - (errMakeBucket, data) => { - if (errMakeBucket) return reject(errMakeBucket); - logger.info(data); - return resolve(`Bucket '${AWS_S3_BUCKET_NAME}' created successfully in region '${AWS_S3_REGION}'.`); - }, - ); - }, - ); -}); - -const write = async (fileName, content) => new Promise((resolve, reject) => { - // Stringify the content - const contentString = (typeof content === 'object') - ? JSON.stringify(content) - : content; - - // Create a Readable stream from the content string - const stream = new Readable(); - stream.push(Buffer.from(contentString)); - stream.push(null); - - minioClient.putObject( - AWS_S3_BUCKET_NAME, - fileName, - stream, - (err, objInfo) => { + if (isExists) + return resolve(`Bucket ${AWS_S3_BUCKET_NAME} already exists in region '${AWS_S3_REGION}'.`); + + return minioClient.makeBucket(AWS_S3_BUCKET_NAME, AWS_S3_REGION, (errMakeBucket, data) => { + if (errMakeBucket) return reject(errMakeBucket); + logger.info(data); + return resolve( + `Bucket '${AWS_S3_BUCKET_NAME}' created successfully in region '${AWS_S3_REGION}'.`, + ); + }); + }); + }); + +const write = async (fileName, content) => + new Promise((resolve, reject) => { + // Stringify the content + const contentString = typeof content === 'object' ? JSON.stringify(content) : content; + + // Create a Readable stream from the content string + const stream = new Readable(); + stream.push(Buffer.from(contentString)); + stream.push(null); + + minioClient.putObject(AWS_S3_BUCKET_NAME, fileName, stream, (err, objInfo) => { if (err) return reject(err); return resolve(`Successfully wrote file ${fileName}`, objInfo); - }, - ); -}); + }); + }); -const read = async (fileName) => new Promise((resolve, reject) => { - minioClient.getObject( - AWS_S3_BUCKET_NAME, - fileName, - (errGetObject, stream) => { +const read = async fileName => + new Promise((resolve, reject) => { + minioClient.getObject(AWS_S3_BUCKET_NAME, fileName, (errGetObject, stream) => { if (errGetObject) reject(errGetObject); else { const chunks = []; - stream.on('data', (chunk) => chunks.push(chunk)); - stream.on('error', (errorStream) => reject(errorStream)); + stream.on('data', chunk => chunks.push(chunk)); + stream.on('error', errorStream => reject(errorStream)); stream.on('end', () => { const contentString = Buffer.concat(chunks).toString('utf8'); - new Promise((innerResolve) => innerResolve(JSON.parse(contentString))) + new Promise(innerResolve => innerResolve(JSON.parse(contentString))) .then(json => resolve(json)) .catch(() => resolve(contentString)); }); } }); -}); - -const remove = async (file) => new Promise((resolve, reject) => { - const files = Array.isArray(file) ? file : [file]; - minioClient.removeObjects( - AWS_S3_BUCKET_NAME, - files, - (err) => { + }); + +const remove = async file => + new Promise((resolve, reject) => { + const files = Array.isArray(file) ? file : [file]; + minioClient.removeObjects(AWS_S3_BUCKET_NAME, files, err => { if (err) reject(err); resolve('Successfully to removed the requested file(s)'); }); -}); + }); // eslint-disable-next-line no-unused-vars -const list = async (dirPath, count = 100, page = 0) => new Promise((resolve, reject) => { - const chunks = []; - const stream = minioClient.listObjects(AWS_S3_BUCKET_NAME); - stream.on('data', (chunk) => chunks.push(chunk)); - stream.on('error', (err) => reject(err)); - stream.on('end', () => resolve(chunks.slice(page, page + count).map(e => e.name))); -}); +const list = async (dirPath, count = 100, page = 0) => + new Promise((resolve, reject) => { + const chunks = []; + const stream = minioClient.listObjects(AWS_S3_BUCKET_NAME); + stream.on('data', chunk => chunks.push(chunk)); + stream.on('error', err => reject(err)); + stream.on('end', () => resolve(chunks.slice(page, page + count).map(e => e.name))); + }); const filterEligibleFilesForPurging = async (fileInfoList, days) => { const deleteBeforeMoment = moment().subtract(days, 'days'); // Filter out files older than `days` days - const filteredFileInfoList = fileInfoList - .filter(file => deleteBeforeMoment.diff(moment(file.lastModified)) >= 0); + const filteredFileInfoList = fileInfoList.filter( + file => deleteBeforeMoment.diff(moment(file.lastModified)) >= 0, + ); const eligibleFiles = filteredFileInfoList.map(f => f.name); return eligibleFiles; }; // eslint-disable-next-line no-unused-vars -const purge = async (dirPath, days) => new Promise((resolve, reject) => { - if (days === undefined) throw new ValidationException('days cannot be undefined'); - - const fileInfoList = []; - const stream = minioClient.listObjects(AWS_S3_BUCKET_NAME); - stream.on('data', (info) => fileInfoList.push(info)); - stream.on('error', (err) => reject(err)); - stream.on('end', async () => { - const eligibleFiles = await filterEligibleFilesForPurging(fileInfoList, days); - remove(eligibleFiles) - .then(() => resolve(`Successfully removed ${eligibleFiles.length} files.`)) - .catch((err) => reject(err)); +const purge = async (dirPath, days) => + new Promise((resolve, reject) => { + if (days === undefined) throw new ValidationException('days cannot be undefined'); + + const fileInfoList = []; + const stream = minioClient.listObjects(AWS_S3_BUCKET_NAME); + stream.on('data', info => fileInfoList.push(info)); + stream.on('error', err => reject(err)); + stream.on('end', async () => { + const eligibleFiles = await filterEligibleFilesForPurging(fileInfoList, days); + remove(eligibleFiles) + .then(() => resolve(`Successfully removed ${eligibleFiles.length} files.`)) + .catch(err => reject(err)); + }); }); -}); -const exists = async (fileName) => new Promise((resolve) => { - read(fileName) - .then(() => resolve(true)) - .catch(() => resolve(false)); -}); +const exists = async fileName => + new Promise(resolve => { + read(fileName) + .then(() => resolve(true)) + .catch(() => resolve(false)); + }); -const isFile = async (filePath) => { +const isFile = async filePath => { const fileExists = await exists(filePath); if (!fileExists) { return false; } - const isNonEmptyFile = await new Promise((resolve) => { + const isNonEmptyFile = await new Promise(resolve => { minioClient.statObject(AWS_S3_BUCKET_NAME, filePath, (err, stats) => { if (err) { resolve(false); diff --git a/services/export/shared/helpers/time.js b/services/export/shared/helpers/time.js index 4ef0e9848..14ae71d0a 100644 --- a/services/export/shared/helpers/time.js +++ b/services/export/shared/helpers/time.js @@ -18,7 +18,7 @@ const moment = require('moment'); const config = require('../../config'); const DAY_IN_MILLISEC = moment().endOf('day').valueOf() - moment().startOf('day').valueOf() + 1; -const getDaysInMilliseconds = (days) => days * DAY_IN_MILLISEC; +const getDaysInMilliseconds = days => days * DAY_IN_MILLISEC; const momentFromTimestamp = timestamp => moment.unix(timestamp); diff --git a/services/export/shared/helpers/transaction.js b/services/export/shared/helpers/transaction.js index 86c7d5b54..adb838c76 100644 --- a/services/export/shared/helpers/transaction.js +++ b/services/export/shared/helpers/transaction.js @@ -27,11 +27,13 @@ const normalizeTransactionAmount = (address, tx) => { const { isIncomingCrossChainTransferTransaction } = tx; const { isSelfTokenTransferCredit } = tx; - const sign = (isReclaim && isSender) - || (isTokenTransfer && isRecipient && !isSelfTransfer) - || (isTokenTransfer && isRecipient && isSelfTransfer && isSelfTokenTransferCredit) - || isIncomingCrossChainTransferTransaction - ? 1 : -1; + const sign = + (isReclaim && isSender) || + (isTokenTransfer && isRecipient && !isSelfTransfer) || + (isTokenTransfer && isRecipient && isSelfTransfer && isSelfTokenTransferCredit) || + isIncomingCrossChainTransferTransaction + ? 1 + : -1; return String(sign * tx.params.amount); }; @@ -45,7 +47,7 @@ const normalizeTransactionFee = (address, tx) => { return isRecipient || isIncomingCrossChainTransferTransaction ? String(0) : tx.fee; }; -const checkIfSelfTokenTransfer = (tx) => { +const checkIfSelfTokenTransfer = tx => { const isTokenTransfer = tx.moduleCommand === `${MODULE.TOKEN}:${COMMAND.TRANSFER}`; return isTokenTransfer && tx.sender.address === tx.params.recipientAddress; }; diff --git a/services/export/shared/regex.js b/services/export/shared/regex.js index d80cb0ad3..470896586 100644 --- a/services/export/shared/regex.js +++ b/services/export/shared/regex.js @@ -15,10 +15,14 @@ */ const PUBLIC_KEY = /^([A-Fa-f0-9]{2}){32}$/; const ADDRESS_LISK32 = /^lsk[a-hjkm-z2-9]{38}$/; -const EXCEL_EXPORT_FILENAME = /^\btransactions_([a-fA-F0-9]{8})_(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.xlsx\b$/; -const PARTIAL_FILENAME = /^\b(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.json\b$/g; -const STANDARDIZED_INTERVAL = /^\b((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31)):((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\b$/g; -const EXCEL_FILE_URL = /^\/api\/v3\/export\/download\?filename=transactions_(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.xlsx$/g; +const EXCEL_EXPORT_FILENAME = + /^\btransactions_([a-fA-F0-9]{8})_(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.xlsx\b$/; +const PARTIAL_FILENAME = + /^\b(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.json\b$/g; +const STANDARDIZED_INTERVAL = + /^\b((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31)):((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\b$/g; +const EXCEL_FILE_URL = + /^\/api\/v3\/export\/download\?filename=transactions_(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.xlsx$/g; const MAINCHAIN_ID = /^[a-fA-F0-9]{2}000000$/; module.exports = { diff --git a/services/export/shared/requestAll.js b/services/export/shared/requestAll.js index e4a4bf704..2939a717f 100644 --- a/services/export/shared/requestAll.js +++ b/services/export/shared/requestAll.js @@ -27,13 +27,13 @@ const requestAllStandard = async (fn, params, limit) => { }); const { data } = firstRequest; if (data.error && data.error.includes('Not found')) return []; - const maxAmount = !firstRequest.meta.total || firstRequest.meta.total > defaultMaxAmount - ? defaultMaxAmount - : firstRequest.meta.total; + const maxAmount = + !firstRequest.meta.total || firstRequest.meta.total > defaultMaxAmount + ? defaultMaxAmount + : firstRequest.meta.total; if (maxAmount > oneRequestLimit) { for (let page = 1; page < Math.ceil(maxAmount / oneRequestLimit); page++) { - /* eslint-disable no-await-in-loop */ const result = await fn({ ...params, ...{ @@ -43,30 +43,27 @@ const requestAllStandard = async (fn, params, limit) => { }); if (!result.data.length) break; data.push(...result.data); - /* eslint-enable no-await-in-loop */ } } return data; }; const requestAllCustom = async (fn, method, params, limit) => { - const maxAmount = limit || 1e9; + const maxAmount = limit || Number.MAX_SAFE_INTEGER; const oneRequestLimit = params.limit || 100; - const firstRequest = await fn(method, - { - ...params, - ...{ - limit: oneRequestLimit, - offset: 0, - }, - }); + const firstRequest = await fn(method, { + ...params, + ...{ + limit: oneRequestLimit, + offset: 0, + }, + }); const totalResponse = firstRequest; if (totalResponse && !totalResponse.error) { if (maxAmount > oneRequestLimit) { for (let page = 1; page < Math.ceil(maxAmount / oneRequestLimit); page++) { const curOffset = oneRequestLimit * page; - /* eslint-disable-next-line no-await-in-loop */ const result = await fn(method, { ...params, ...{ @@ -85,16 +82,15 @@ const requestAllCustom = async (fn, method, params, limit) => { // When response is an object, we should traverse the properties and merge the values. // We can safely assume that the properties would be of type array, so concatenation will // result in the whole response. If property is not an array, the latest value is kept. - Object.entries(totalResponse).forEach( - ([dataKey, dataVal]) => { - if (Array.isArray(dataVal)) { - totalResponse[dataKey].push(...result[dataKey]); - } else if (Utils.isObject(dataVal)) { - totalResponse[dataKey] = { ...totalResponse[dataKey], ...result[dataKey] }; - } else { - totalResponse[dataKey] = result[dataKey]; - } - }); + Object.entries(totalResponse).forEach(([dataKey, dataVal]) => { + if (Array.isArray(dataVal)) { + totalResponse[dataKey].push(...result[dataKey]); + } else if (Utils.isObject(dataVal)) { + totalResponse[dataKey] = { ...totalResponse[dataKey], ...result[dataKey] }; + } else { + totalResponse[dataKey] = result[dataKey]; + } + }); } } } diff --git a/services/export/shared/transactionsExport.js b/services/export/shared/transactionsExport.js index 47e80b861..69cfa07fc 100644 --- a/services/export/shared/transactionsExport.js +++ b/services/export/shared/transactionsExport.js @@ -22,10 +22,7 @@ const moment = MomentRange.extendMoment(Moment); const { CacheRedis, - Exceptions: { - NotFoundException, - ValidationException, - }, + Exceptions: { NotFoundException, ValidationException }, Queue, HTTP, } = require('lisk-service-framework'); @@ -70,42 +67,38 @@ let tokenModuleData; let feeTokenID; let defaultStartDate; -const getTransactions = async (params) => requestIndexer('transactions', params); -const getBlocks = async (params) => requestIndexer('blocks', params); +const getTransactions = async params => requestIndexer('transactions', params); +const getBlocks = async params => requestIndexer('blocks', params); -const getGenesisBlock = async (height) => requestIndexer( - 'blocks', - { height }, -); +const getGenesisBlock = async height => requestIndexer('blocks', { height }); -const getAddressFromParams = (params) => params.address - || getLisk32AddressFromPublicKey(params.publicKey); +const getAddressFromParams = params => + params.address || getLisk32AddressFromPublicKey(params.publicKey); -const getTransactionsInAsc = async (params) => getTransactions({ - address: getAddressFromParams(params), - sort: 'timestamp:asc', - timestamp: params.timestamp, - limit: params.limit || 10, - offset: params.offset || 0, -}); +const getTransactionsInAsc = async params => + getTransactions({ + address: getAddressFromParams(params), + sort: 'timestamp:asc', + timestamp: params.timestamp, + limit: params.limit || 10, + offset: params.offset || 0, + }); -const validateIfAccountExists = async (address) => { +const validateIfAccountExists = async address => { const { data: tokenBalances } = await requestIndexer('token.balances', { address }); return !!tokenBalances.length; }; -const getEvents = async (params) => requestAllStandard( - requestIndexer.bind(null, 'events'), - { +const getEvents = async params => + requestAllStandard(requestIndexer.bind(null, 'events'), { topic: params.address, timestamp: params.timestamp, module: params.module, name: params.name, sort: 'timestamp:desc', - }, -); + }); -const getCrossChainTransferTransactionInfo = async (params) => { +const getCrossChainTransferTransactionInfo = async params => { const allEvents = await getEvents({ ...params, module: MODULE.TOKEN, @@ -113,13 +106,13 @@ const getCrossChainTransferTransactionInfo = async (params) => { }); const transactions = []; - const ccmTransferEvents = allEvents - .filter(event => event.data.recipientAddress === params.address); + const ccmTransferEvents = allEvents.filter( + event => event.data.recipientAddress === params.address, + ); for (let i = 0; i < ccmTransferEvents.length; i++) { const ccmTransferEvent = ccmTransferEvents[i]; const [ccuTransactionID] = ccmTransferEvent.topics; - /* eslint-disable-next-line no-await-in-loop */ const [transaction] = (await requestIndexer('transactions', { id: ccuTransactionID })).data; transactions.push({ id: ccuTransactionID, @@ -138,7 +131,7 @@ const getCrossChainTransferTransactionInfo = async (params) => { return transactions; }; -const getRewardAssignedInfo = async (params) => { +const getRewardAssignedInfo = async params => { const allEvents = await getEvents({ ...params, module: MODULE.POS, @@ -146,13 +139,13 @@ const getRewardAssignedInfo = async (params) => { }); const transactions = []; - const rewardsAssignedEvents = allEvents - .filter(event => event.data.stakerAddress === params.address); + const rewardsAssignedEvents = allEvents.filter( + event => event.data.stakerAddress === params.address, + ); for (let i = 0; i < rewardsAssignedEvents.length; i++) { const rewardsAssignedEvent = rewardsAssignedEvents[i]; const [transactionID] = rewardsAssignedEvent.topics; - /* eslint-disable-next-line no-await-in-loop */ const [transaction] = (await requestIndexer('transactions', { id: transactionID })).data; transactions.push({ @@ -172,23 +165,29 @@ const getRewardAssignedInfo = async (params) => { return transactions; }; -const getBlocksInAsc = async (params) => { - const totalBlocks = (await getBlocks({ - generatorAddress: params.address, - timestamp: params.timestamp, - limit: 1, - })).meta.total; - - const blocks = await requestAllStandard(getBlocks, { - generatorAddress: params.address, - timestamp: params.timestamp, - sort: 'timestamp:desc', - }, totalBlocks); +const getBlocksInAsc = async params => { + const totalBlocks = ( + await getBlocks({ + generatorAddress: params.address, + timestamp: params.timestamp, + limit: 1, + }) + ).meta.total; + + const blocks = await requestAllStandard( + getBlocks, + { + generatorAddress: params.address, + timestamp: params.timestamp, + sort: 'timestamp:desc', + }, + totalBlocks, + ); return blocks; }; -const normalizeBlocks = async (blocks) => { +const normalizeBlocks = async blocks => { const normalizedBlocks = blocks.map(block => ({ blockHeight: block.height, date: dateFromTimestamp(block.timestamp), @@ -199,9 +198,11 @@ const normalizeBlocks = async (blocks) => { return normalizedBlocks; }; -const getBlockchainAppsMeta = async (chainID) => { +const getBlockchainAppsMeta = async chainID => { try { - const { data: [appMetadata] } = await requestAppRegistry('blockchain.apps.meta', { chainID }); + const { + data: [appMetadata], + } = await requestAppRegistry('blockchain.apps.meta', { chainID }); return appMetadata; } catch (error) { // Redirect call to the mainchain service @@ -211,25 +212,27 @@ const getBlockchainAppsMeta = async (chainID) => { return appMetadata; } }; -const getChainInfo = async (chainID) => { +const getChainInfo = async chainID => { const { chainName } = await getBlockchainAppsMeta(chainID); return { chainID, chainName }; }; -const getOpeningBalance = async (address) => { +const getOpeningBalance = async address => { if (!tokenModuleData) { - const genesisBlockAssetsLength = await requestConnector( - 'getGenesisAssetsLength', - { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER }, - ); + const genesisBlockAssetsLength = await requestConnector('getGenesisAssetsLength', { + module: MODULE.TOKEN, + subStore: MODULE_SUB_STORE.TOKEN.USER, + }); const totalUsers = genesisBlockAssetsLength[MODULE.TOKEN][MODULE_SUB_STORE.TOKEN.USER]; - tokenModuleData = (await requestAllCustom( - requestConnector, - 'getGenesisAssetByModule', - { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER }, - totalUsers, - )).userSubstore; + tokenModuleData = ( + await requestAllCustom( + requestConnector, + 'getGenesisAssetByModule', + { module: MODULE.TOKEN, subStore: MODULE_SUB_STORE.TOKEN.USER }, + totalUsers, + ) + ).userSubstore; } const filteredAccount = tokenModuleData.find(e => e.address === address); @@ -249,20 +252,24 @@ const getFeeTokenID = async () => { }; const getMetadata = async (params, chainID, currentChainID) => ({ - ...await getChainInfo(chainID), + ...(await getChainInfo(chainID)), note: `Current Chain ID: ${currentChainID}`, openingBalance: await getOpeningBalance(params.address), }); -const validateIfAccountHasTransactions = async (address) => { +const validateIfAccountHasTransactions = async address => { const response = await getTransactions({ address, limit: 1 }); return !!response.data.length; }; const getDefaultStartDate = async () => { if (!defaultStartDate) { - const { data: { genesisHeight } } = await getNetworkStatus(); - const { data: [block] } = await getGenesisBlock(genesisHeight); + const { + data: { genesisHeight }, + } = await getNetworkStatus(); + const { + data: [block], + } = await getGenesisBlock(genesisHeight); defaultStartDate = moment(block.timestamp * 1000).format(DATE_FORMAT); } @@ -276,7 +283,7 @@ const standardizeIntervalFromParams = async ({ interval }) => { let to; if (interval && interval.includes(':')) { [from, to] = interval.split(':'); - if ((moment(to, DATE_FORMAT).diff(moment(from, DATE_FORMAT))) < 0) { + if (moment(to, DATE_FORMAT).diff(moment(from, DATE_FORMAT)) < 0) { throw new ValidationException(`Invalid interval supplied: ${interval}.`); } } else if (interval) { @@ -310,9 +317,11 @@ const getExcelFileUrlFromParams = async (params, chainID) => { }; const resolveChainIDs = (tx, currentChainID) => { - if (tx.moduleCommand === `${MODULE.TOKEN}:${COMMAND.TRANSFER}` - || tx.moduleCommand === `${MODULE.TOKEN}:${COMMAND.TRANSFER_CROSS_CHAIN}` - || tx.isIncomingCrossChainTransferTransaction) { + if ( + tx.moduleCommand === `${MODULE.TOKEN}:${COMMAND.TRANSFER}` || + tx.moduleCommand === `${MODULE.TOKEN}:${COMMAND.TRANSFER_CROSS_CHAIN}` || + tx.isIncomingCrossChainTransferTransaction + ) { const sendingChainID = tx.sendingChainID || currentChainID; const receivingChainID = resolveReceivingChainID(tx, currentChainID); @@ -325,10 +334,7 @@ const resolveChainIDs = (tx, currentChainID) => { }; const normalizeTransaction = (address, tx, currentChainID, txFeeTokenID) => { - const { - moduleCommand, - senderPublicKey, - } = tx; + const { moduleCommand, senderPublicKey } = tx; const date = dateFromTimestamp(tx.block.timestamp); const time = timeFromTimestamp(tx.block.timestamp); @@ -337,7 +343,7 @@ const normalizeTransaction = (address, tx, currentChainID, txFeeTokenID) => { const amountTokenID = tx.params.tokenID; const senderAddress = tx.sender.address; const recipientAddress = tx.params.recipientAddress || null; - const recipientPublicKey = tx.meta && tx.meta.recipient && tx.meta.recipient.publicKey || null; + const recipientPublicKey = (tx.meta && tx.meta.recipient && tx.meta.recipient.publicKey) || null; const blockHeight = tx.block.height; const note = tx.params.data || null; const transactionID = tx.id; @@ -371,7 +377,7 @@ const normalizeTransaction = (address, tx, currentChainID, txFeeTokenID) => { }; }; -const exportTransactions = async (job) => { +const exportTransactions = async job => { const { params } = job.data; const allTransactions = []; @@ -386,13 +392,12 @@ const exportTransactions = async (job) => { const arrayOfDates = Array.from(range.by('day')).map(d => d.format(DATE_FORMAT)); for (let i = 0; i < arrayOfDates.length; i++) { - /* eslint-disable no-await-in-loop */ const day = arrayOfDates[i]; const partialFilename = await getPartialFilenameFromParams(params, day); if (await partials.fileExists(partialFilename)) { const transactions = JSON.parse(await partials.read(partialFilename)); allTransactions.push(...transactions); - } else if (await noTransactionsCache.get(partialFilename) !== true) { + } else if ((await noTransactionsCache.get(partialFilename)) !== true) { const fromTimestamp = moment(day, DATE_FORMAT).startOf('day').unix(); const toTimestamp = moment(day, DATE_FORMAT).endOf('day').unix(); const timestampRange = `${fromTimestamp}:${toTimestamp}`; @@ -409,7 +414,8 @@ const exportTransactions = async (job) => { }); const blocks = await getBlocksInAsc({ - ...params, timestamp: timestampRange, + ...params, + timestamp: timestampRange, }); allBlocks.push(...blocks); @@ -435,7 +441,6 @@ const exportTransactions = async (job) => { } } } - /* eslint-enable no-await-in-loop */ } } @@ -450,21 +455,18 @@ const exportTransactions = async (job) => { } }); - const normalizedTransactions = await Promise.all(allTransactions.map((t) => normalizeTransaction( - getAddressFromParams(params), - t, - currentChainID, - txFeeTokenID, - ))); + const normalizedTransactions = await Promise.all( + allTransactions.map(t => + normalizeTransaction(getAddressFromParams(params), t, currentChainID, txFeeTokenID), + ), + ); const normalizedBlocks = await normalizeBlocks(allBlocks); const uniqueChainIDs = await getUniqueChainIDs(normalizedTransactions); - const metadata = await Promise.all(uniqueChainIDs.map(async (chainID) => getMetadata( - params, - chainID, - currentChainID, - ))); + const metadata = await Promise.all( + uniqueChainIDs.map(async chainID => getMetadata(params, chainID, currentChainID)), + ); const workBook = new excelJS.Workbook(); const transactionExportSheet = workBook.addWorksheet(config.excel.sheets.TRANSACTION_HISTORY); @@ -485,10 +487,11 @@ const scheduleTransactionExportQueue = Queue( config.queue.scheduleTransactionExport.concurrency, ); -const scheduleTransactionHistoryExport = async (params) => { +const scheduleTransactionHistoryExport = async params => { // Schedule only when index is completely built const isBlockchainIndexReady = await requestIndexer('isBlockchainFullyIndexed'); - if (!isBlockchainIndexReady) throw new ValidationException('The blockchain index is not yet ready. Please retry later.'); + if (!isBlockchainIndexReady) + throw new ValidationException('The blockchain index is not yet ready. Please retry later.'); const exportResponse = { data: {}, @@ -533,9 +536,11 @@ const downloadTransactionHistory = async ({ filename }) => { } const isFile = await staticFiles.isFile(filename); - if (!isFile) throw new ValidationException(`Requested file (${filename}) does not exist.`); + if (!isFile) throw new NotFoundException(`Requested file (${filename}) does not exist.`); - excelResponse.data = xlsx.build(xlsx.parse(`${config.cache.exports.dirPath}/${filename}`)).toString('hex'); + excelResponse.data = xlsx + .build(xlsx.parse(`${config.cache.exports.dirPath}/${filename}`)) + .toString('hex'); excelResponse.meta.filename = filename; // Remove the static file if endDate is current date diff --git a/services/export/tests/constants/blocks.js b/services/export/tests/constants/blocks.js index bd818cf97..3a8302261 100644 --- a/services/export/tests/constants/blocks.js +++ b/services/export/tests/constants/blocks.js @@ -38,7 +38,8 @@ const blocks = [ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', + signature: + '82e8916fc8a839518cb9e2a2c7b092c40e7d0ade90de8ec99925efc1a1480927d51dc2c889f755e0eef5425689be6edb2f2cbe726fcbb60aaebf7f5c24b52809', id: 'c1c7c28f5b123135cb5a25f210390f200cd0ed7cc901c0b5997f084e2998c9cc', totalBurnt: '0', totalForged: '0', @@ -69,7 +70,8 @@ const blocks = [ maxHeightPrevoted: 0, maxHeightGenerated: 0, impliesMaxPrevotes: true, - signature: 'fdbcd50af2298cd5635c7925a63811297ab80aac588dac394ce73b16eafa9cd6367b7f5107368d3f109cf0300550d719c0d2643f36d57883b5776e2a74da130f', + signature: + 'fdbcd50af2298cd5635c7925a63811297ab80aac588dac394ce73b16eafa9cd6367b7f5107368d3f109cf0300550d719c0d2643f36d57883b5776e2a74da130f', id: '92bc032502b98d2638efb27958ce42fb5b9afc6436e71109bb636c4464d896fbx', totalBurnt: '0', totalForged: '0', diff --git a/services/export/tests/constants/csv.js b/services/export/tests/constants/csv.js index 8d725026e..5628238a7 100644 --- a/services/export/tests/constants/csv.js +++ b/services/export/tests/constants/csv.js @@ -20,21 +20,36 @@ const jsonObj = { d: '4', }; -const jsonObjList = Array(10).fill(jsonObj).map((o, i) => ({ num: String(i), ...o })); +const jsonObjList = Array(10) + .fill(jsonObj) + .map((o, i) => ({ num: String(i), ...o })); -const generateExcpectedCsv = (json, delimiter) => ''.concat( - Object.keys(json).map(k => `"${k}"`).join(delimiter), - '\n', - Object.values(json).map(k => `"${k}"`).join(delimiter), -); +const generateExcpectedCsv = (json, delimiter) => + ''.concat( + Object.keys(json) + .map(k => `"${k}"`) + .join(delimiter), + '\n', + Object.values(json) + .map(k => `"${k}"`) + .join(delimiter), + ); const generateExcpectedCsvForList = (jsonList, delimiter) => { const csvList = []; jsonList.forEach((json, i) => { if (i === 0) { - csvList.push(Object.keys(json).map(k => `"${k}"`).join(delimiter)); + csvList.push( + Object.keys(json) + .map(k => `"${k}"`) + .join(delimiter), + ); } - csvList.push(Object.values(json).map(k => `"${k}"`).join(delimiter)); + csvList.push( + Object.values(json) + .map(k => `"${k}"`) + .join(delimiter), + ); }); return csvList.join('\n'); diff --git a/services/export/tests/constants/csvExport.js b/services/export/tests/constants/csvExport.js index f7492e1d0..f33c87baf 100644 --- a/services/export/tests/constants/csvExport.js +++ b/services/export/tests/constants/csvExport.js @@ -13,11 +13,16 @@ * Removal or modification of this copyright notice is prohibited. * */ -const generateExcpectedCsv = (json, delimiter) => ''.concat( - Object.keys(json).map(k => typeof k === 'number' ? k : `"${k}"`).join(delimiter), - '\n', - Object.values(json).map(k => (typeof k === 'number' || !k) ? k : `"${k}"`).join(delimiter), -); +const generateExcpectedCsv = (json, delimiter) => + ''.concat( + Object.keys(json) + .map(k => (typeof k === 'number' ? k : `"${k}"`)) + .join(delimiter), + '\n', + Object.values(json) + .map(k => (typeof k === 'number' || !k ? k : `"${k}"`)) + .join(delimiter), + ); const tokenTransferTransaction = { id: 'd41e8fbb909fdf44ffccef6f5b0fb5edf853f0dcf699243a0a92403d2a4f1d1d', diff --git a/services/export/tests/functional/s3.test.js b/services/export/tests/functional/s3.test.js index 8c3ea07e3..8c793b8cc 100644 --- a/services/export/tests/functional/s3.test.js +++ b/services/export/tests/functional/s3.test.js @@ -27,26 +27,21 @@ describe('Test AWS s3 interface', () => { afterAll(async () => { /* eslint-disable no-console */ - await s3.minioClient.removeBucket( - lConfig.s3.bucketName, - (err) => err - ? console.log('unable to remove bucket.') - : console.log('Bucket removed successfully.'), + await s3.minioClient.removeBucket(lConfig.s3.bucketName, err => + err ? console.log('unable to remove bucket.') : console.log('Bucket removed successfully.'), ); /* eslint-enable no-console */ }); describe('init() method', () => { it('Successfully initializes', async () => { - expect(s3.init(lConfig)) - .resolves - .toBeTruthy(); + expect(s3.init(lConfig)).resolves.toBeTruthy(); }); it('Re-initializing does not throw errors', async () => { - expect(s3.init(lConfig)) - .resolves - .toBe(`Bucket ${lConfig.s3.bucketName} already exists in region '${config.s3.region}'.`); + expect(s3.init(lConfig)).resolves.toBe( + `Bucket ${lConfig.s3.bucketName} already exists in region '${config.s3.region}'.`, + ); }); }); @@ -64,7 +59,7 @@ describe('Test AWS s3 interface', () => { it('writes string', async () => { const fileName = 'test.txt'; - const fileContent = 'It\'s a string.'; + const fileContent = "It's a string."; await s3.write(fileName, fileContent); const content = await s3.read(fileName); @@ -88,7 +83,7 @@ describe('Test AWS s3 interface', () => { describe('exists() method', () => { it('returns true for existing file', async () => { expect(existingFiles.length).toBeGreaterThan(0); - existingFiles.forEach(async (fileName) => { + existingFiles.forEach(async fileName => { const isExists = await s3.exists(fileName); expect(isExists).toBe(true); }); @@ -96,7 +91,7 @@ describe('Test AWS s3 interface', () => { it('returns false for non-existing file', async () => { expect(nonexistingFiles.length).toBeGreaterThan(0); - nonexistingFiles.forEach(async (fileName) => { + nonexistingFiles.forEach(async fileName => { const isExists = await s3.exists(fileName); expect(isExists).toBe(false); }); @@ -109,7 +104,7 @@ describe('Test AWS s3 interface', () => { expect(typeof listedFiles).toBe('object'); expect(Array.isArray(listedFiles)).toBeTruthy(); expect(listedFiles.length).toBeGreaterThan(0); - existingFiles.forEach(async (fileName) => { + existingFiles.forEach(async fileName => { expect(listedFiles).toContain(fileName); }); }); @@ -135,7 +130,7 @@ describe('Test AWS s3 interface', () => { const message = await s3.remove(existingFiles); expect(message).toBe(successMessage); - existingFiles.forEach(async (fileName) => { + existingFiles.forEach(async fileName => { const isExists = await s3.exists(fileName); expect(isExists).toBe(false); }); @@ -149,7 +144,9 @@ describe('Test AWS s3 interface', () => { describe('purge() method', () => { it('removes the files by their last modified time', async () => { - const randomList = Array(10).fill().map((_, i) => ({ index: i })); + const randomList = Array(10) + .fill() + .map((_, i) => ({ index: i })); randomList.forEach(async (item, i) => { await s3.write(`purgeFile_${i + 1}.json`, item); }); diff --git a/services/export/tests/functional/transactionsExport.test.js b/services/export/tests/functional/transactionsExport.test.js index 651b0fc09..1bd57bc2e 100644 --- a/services/export/tests/functional/transactionsExport.test.js +++ b/services/export/tests/functional/transactionsExport.test.js @@ -39,21 +39,21 @@ describe('Excel export utils', () => { it('should return standardized interval when both start and end date supplied', async () => { const result = await standardizeIntervalFromParams({ interval: interval.startEnd }); expect(typeof result).toBe('string'); - expect(result.length).toBe((2 * config.excel.dateFormat.length) + 1); + expect(result.length).toBe(2 * config.excel.dateFormat.length + 1); expect(result).toMatch(STANDARDIZED_INTERVAL); }); it('should return standardized interval when only start date supplied', async () => { const result = await standardizeIntervalFromParams({ interval: interval.onlyStart }); expect(typeof result).toBe('string'); - expect(result.length).toBe((2 * config.excel.dateFormat.length) + 1); + expect(result.length).toBe(2 * config.excel.dateFormat.length + 1); expect(result).toMatch(STANDARDIZED_INTERVAL); }); xit('should return standardized interval when dates not supplied', async () => { const result = await standardizeIntervalFromParams({}); expect(typeof result).toBe('string'); - expect(result.length).toBe((2 * config.excel.dateFormat.length) + 1); + expect(result.length).toBe(2 * config.excel.dateFormat.length + 1); expect(result).toMatch(STANDARDIZED_INTERVAL); }); }); diff --git a/services/export/tests/unit/shared/helpers/account.test.js b/services/export/tests/unit/shared/helpers/account.test.js index 41b6a4c68..3ee938369 100644 --- a/services/export/tests/unit/shared/helpers/account.test.js +++ b/services/export/tests/unit/shared/helpers/account.test.js @@ -19,10 +19,7 @@ const { getLisk32AddressFromPublicKey, } = require('../../../../shared/helpers/account'); -const { - valid, - invalid, -} = require('../../../constants/account'); +const { valid, invalid } = require('../../../constants/account'); describe('Account utils', () => { describe('Validate address', () => { diff --git a/services/export/tests/unit/shared/helpers/chain.test.js b/services/export/tests/unit/shared/helpers/chain.test.js index c2a9658b5..445dd05e0 100644 --- a/services/export/tests/unit/shared/helpers/chain.test.js +++ b/services/export/tests/unit/shared/helpers/chain.test.js @@ -13,14 +13,9 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - resolveReceivingChainID, - getUniqueChainIDs, -} = require('../../../../shared/helpers/chain'); +const { resolveReceivingChainID, getUniqueChainIDs } = require('../../../../shared/helpers/chain'); -const { - transactions, -} = require('../../../constants/transaction'); +const { transactions } = require('../../../constants/transaction'); describe('Test chain utils', () => { const currentChainID = '04000000'; diff --git a/services/export/tests/unit/shared/helpers/csv.test.js b/services/export/tests/unit/shared/helpers/csv.test.js index 1ea7d9008..963c72745 100644 --- a/services/export/tests/unit/shared/helpers/csv.test.js +++ b/services/export/tests/unit/shared/helpers/csv.test.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - parseJsonToCsv, -} = require('../../../../shared/helpers/csv'); +const { parseJsonToCsv } = require('../../../../shared/helpers/csv'); const { dynamicFields, diff --git a/services/export/tests/unit/shared/helpers/file.test.js b/services/export/tests/unit/shared/helpers/file.test.js index 5e88b0f0d..4e315b47a 100644 --- a/services/export/tests/unit/shared/helpers/file.test.js +++ b/services/export/tests/unit/shared/helpers/file.test.js @@ -27,9 +27,7 @@ const { isFilePathInDirectory, } = require('../../../../shared/helpers/file'); -const { - dynamicFieldsCustomDelimiter, -} = require('../../../constants/csv'); +const { dynamicFieldsCustomDelimiter } = require('../../../constants/csv'); describe('Test filesystem interface', () => { let dirPath; @@ -58,7 +56,7 @@ describe('Test filesystem interface', () => { await write(filePath, testData); // Verify if data is written into the file - expect((fs.statSync(filePath)).size).toBeGreaterThan(0); + expect(fs.statSync(filePath).size).toBeGreaterThan(0); }); it('should return the data from a file when calling read() method', async () => { diff --git a/services/export/tests/unit/shared/helpers/time.test.js b/services/export/tests/unit/shared/helpers/time.test.js index 5af084762..18fbfc961 100644 --- a/services/export/tests/unit/shared/helpers/time.test.js +++ b/services/export/tests/unit/shared/helpers/time.test.js @@ -13,16 +13,9 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - dateFromTimestamp, - timeFromTimestamp, -} = require('../../../../shared/helpers/time'); +const { dateFromTimestamp, timeFromTimestamp } = require('../../../../shared/helpers/time'); -const { - timestamp, - expectedDate, - expectedTime, -} = require('../../../constants/time'); +const { timestamp, expectedDate, expectedTime } = require('../../../constants/time'); describe('Time utils', () => { it('returns ISO format UTC Date from unix timestamp', async () => { diff --git a/services/export/tests/unit/shared/helpers/transaction.test.js b/services/export/tests/unit/shared/helpers/transaction.test.js index 6d1a9010b..2d6bfa33a 100644 --- a/services/export/tests/unit/shared/helpers/transaction.test.js +++ b/services/export/tests/unit/shared/helpers/transaction.test.js @@ -19,9 +19,7 @@ const { checkIfSelfTokenTransfer, } = require('../../../../shared/helpers/transaction'); -const { - transactions, -} = require('../../../constants/transaction'); +const { transactions } = require('../../../constants/transaction'); describe('Test Transaction utility', () => { describe('Validate transaction amount is properly normalized', () => { diff --git a/services/export/tests/unit/shared/requestAll.test.js b/services/export/tests/unit/shared/requestAll.test.js index da749836c..586edd2f0 100644 --- a/services/export/tests/unit/shared/requestAll.test.js +++ b/services/export/tests/unit/shared/requestAll.test.js @@ -15,22 +15,21 @@ */ const { resolve } = require('path'); -const { - transactions, -} = require('../../constants/transaction'); +const { transactions } = require('../../constants/transaction'); const { requestAllStandard, requestAllCustom } = require('../../../shared/requestAll'); const mockedRequestFilePath = resolve(`${__dirname}/../../../shared/helpers/request`); -const getResponseOfLength = (n, singleRequestLimit) => new Array(n).fill().map((e, i) => ({ - extra_param: 'extra_value', - offset: singleRequestLimit * i, - limit: singleRequestLimit, -})); +const getResponseOfLength = (n, singleRequestLimit) => + new Array(n).fill().map((e, i) => ({ + extra_param: 'extra_value', + offset: singleRequestLimit * i, + limit: singleRequestLimit, + })); describe('Test requestAllStandard method', () => { - const func = async (params) => ({ + const func = async params => ({ data: [params], meta: { total: 1000, @@ -40,36 +39,52 @@ describe('Test requestAllStandard method', () => { it('should call passed function multiple times when total limit > single response limit', async () => { const singleRequestLimit = 5; const expectedResponse = getResponseOfLength(4, singleRequestLimit); - const response = await requestAllStandard(func, { limit: singleRequestLimit, extra_param: 'extra_value' }, 20); + const response = await requestAllStandard( + func, + { limit: singleRequestLimit, extra_param: 'extra_value' }, + 20, + ); expect(response).toEqual(expectedResponse); }); it('should call passed function only once when total limit > single response limit but function return total < single response limit', async () => { const singleRequestLimit = 50; const expectedResponse = getResponseOfLength(1, singleRequestLimit); - const func2 = async (params) => ({ + const func2 = async params => ({ data: [params], meta: { total: singleRequestLimit - 1, }, }); - const response = await requestAllStandard(func2, { limit: singleRequestLimit, extra_param: 'extra_value' }, singleRequestLimit * 10); + const response = await requestAllStandard( + func2, + { limit: singleRequestLimit, extra_param: 'extra_value' }, + singleRequestLimit * 10, + ); expect(response).toEqual(expectedResponse); }); it('should call passed function only once when total limit < single response limit', async () => { const singleRequestLimit = 50; const expectedResponse = getResponseOfLength(1, singleRequestLimit); - const response = await requestAllStandard(func, { limit: singleRequestLimit, extra_param: 'extra_value' }, 20); + const response = await requestAllStandard( + func, + { limit: singleRequestLimit, extra_param: 'extra_value' }, + 20, + ); expect(response).toEqual(expectedResponse); }); it('should throw error if passed function is null', async () => { - expect(async () => requestAllStandard(null, { limit: 50, extra_param: 'extra_value' }, 20)).rejects.toThrow(); + expect(async () => + requestAllStandard(null, { limit: 50, extra_param: 'extra_value' }, 20), + ).rejects.toThrow(); }); it('should throw error if passed function is undefined', async () => { - expect(async () => requestAllStandard(undefined, { limit: 50, extra_param: 'extra_value' }, 20)).rejects.toThrow(); + expect(async () => + requestAllStandard(undefined, { limit: 50, extra_param: 'extra_value' }, 20), + ).rejects.toThrow(); }); }); @@ -82,8 +97,10 @@ describe('Test requestAllCustom method', () => { requestConnector: jest.fn(), })); - requestConnector - .mockResolvedValue([transactions.tokenTransfer, transactions.tokenTransferCrossChain]); + requestConnector.mockResolvedValue([ + transactions.tokenTransfer, + transactions.tokenTransferCrossChain, + ]); const response = await requestAllCustom(requestConnector, 'transactions', { limit: 2 }, 2); expect(response).toEqual([transactions.tokenTransfer, transactions.tokenTransferCrossChain]); diff --git a/services/export/tests/unit/shared/transactionsExport.test.js b/services/export/tests/unit/shared/transactionsExport.test.js index e1c7aa18e..448c2a822 100644 --- a/services/export/tests/unit/shared/transactionsExport.test.js +++ b/services/export/tests/unit/shared/transactionsExport.test.js @@ -18,14 +18,9 @@ const { resolve } = require('path'); const moment = require('moment'); -const { - interval, - tokenTransfer, -} = require('../../constants/csvExport'); +const { interval, tokenTransfer } = require('../../constants/csvExport'); -const { - transactions, -} = require('../../constants/transaction'); +const { transactions } = require('../../constants/transaction'); const { blocks } = require('../../constants/blocks'); @@ -42,10 +37,7 @@ const { normalizeBlocks, } = require('../../../shared/transactionsExport'); -const { - dateFromTimestamp, - timeFromTimestamp, -} = require('../../../shared/helpers/time'); +const { dateFromTimestamp, timeFromTimestamp } = require('../../../shared/helpers/time'); const mockedRequestFilePath = resolve(`${__dirname}/../../../shared/helpers/request`); const mockedRequestAllFilePath = resolve(`${__dirname}/../../../shared/requestAll`); @@ -80,12 +72,14 @@ const partialFilenameExtension = '.json'; describe('Test getOpeningBalance method', () => { it('should return opening balance when called with valid address', async () => { - const mockUserSubstore = [{ - address: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', - availableBalance: '100000000000000', - lockedBalances: [], - tokenID: '0400000000000000', - }]; + const mockUserSubstore = [ + { + address: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', + availableBalance: '100000000000000', + lockedBalances: [], + tokenID: '0400000000000000', + }, + ]; jest.mock(mockedRequestAllFilePath, () => { const actual = jest.requireActual(mockedRequestAllFilePath); @@ -136,29 +130,31 @@ describe('Test getOpeningBalance method', () => { describe('Test getCrossChainTransferTransactionInfo method', () => { it('should return transaction info when called with valid address', async () => { - const mockEventData = [{ - id: 'efe94d3a5ad35297098614100c5dd7bff6657d38baed08fb850fa9ce69b0862c', - module: 'token', - name: 'ccmTransfer', - data: { - senderAddress: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', - recipientAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', - tokenID: '0400000000000000', - amount: '100000000000', - receivingChainID: '04000001', - result: 0, - }, - topics: [ - 'efcbab90c4769dc47029412010ef76623722678f446a7417f59fed998a6407de', - 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', - 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', - ], - block: { - id: '1fc7e1a4a06a6b9610ed5e4fb48c9f839b1fcd0f91b3f6d4c22f9f64eac40657', - height: 313, - timestamp: 1689693410, + const mockEventData = [ + { + id: 'efe94d3a5ad35297098614100c5dd7bff6657d38baed08fb850fa9ce69b0862c', + module: 'token', + name: 'ccmTransfer', + data: { + senderAddress: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + recipientAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', + tokenID: '0400000000000000', + amount: '100000000000', + receivingChainID: '04000001', + result: 0, + }, + topics: [ + 'efcbab90c4769dc47029412010ef76623722678f446a7417f59fed998a6407de', + 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', + ], + block: { + id: '1fc7e1a4a06a6b9610ed5e4fb48c9f839b1fcd0f91b3f6d4c22f9f64eac40657', + height: 313, + timestamp: 1689693410, + }, }, - }]; + ]; jest.mock(mockedRequestAllFilePath, () => { const actual = jest.requireActual(mockedRequestAllFilePath); @@ -176,10 +172,12 @@ describe('Test getCrossChainTransferTransactionInfo method', () => { ...actual, requestIndexer() { return { - data: [{ - moduleCommand: 'interoperability:submitSidechainCrossChainUpdate', - params: { sendingChainID: '04000000' }, - }], + data: [ + { + moduleCommand: 'interoperability:submitSidechainCrossChainUpdate', + params: { sendingChainID: '04000000' }, + }, + ], }; }, }; @@ -187,30 +185,34 @@ describe('Test getCrossChainTransferTransactionInfo method', () => { const { getCrossChainTransferTransactionInfo } = require('../../../shared/transactionsExport'); - const crossChainTransferTxs = await getCrossChainTransferTransactionInfo({ address: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo' }); - const expectedResponse = [{ - block: { - id: '1fc7e1a4a06a6b9610ed5e4fb48c9f839b1fcd0f91b3f6d4c22f9f64eac40657', - height: 313, - timestamp: 1689693410, - }, - id: 'efcbab90c4769dc47029412010ef76623722678f446a7417f59fed998a6407de', - isIncomingCrossChainTransferTransaction: true, - moduleCommand: 'interoperability:submitSidechainCrossChainUpdate', - params: { - amount: '100000000000', - data: 'This entry was generated from \'ccmTransfer\' event emitted from the specified CCU transactionID.', - receivingChainID: '04000001', - recipientAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', - result: 0, - senderAddress: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', - tokenID: '0400000000000000', - }, - sender: { - address: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + const crossChainTransferTxs = await getCrossChainTransferTransactionInfo({ + address: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', + }); + const expectedResponse = [ + { + block: { + id: '1fc7e1a4a06a6b9610ed5e4fb48c9f839b1fcd0f91b3f6d4c22f9f64eac40657', + height: 313, + timestamp: 1689693410, + }, + id: 'efcbab90c4769dc47029412010ef76623722678f446a7417f59fed998a6407de', + isIncomingCrossChainTransferTransaction: true, + moduleCommand: 'interoperability:submitSidechainCrossChainUpdate', + params: { + amount: '100000000000', + data: "This entry was generated from 'ccmTransfer' event emitted from the specified CCU transactionID.", + receivingChainID: '04000001', + recipientAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', + result: 0, + senderAddress: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + tokenID: '0400000000000000', + }, + sender: { + address: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + }, + sendingChainID: '04000000', }, - sendingChainID: '04000000', - }]; + ]; expect(crossChainTransferTxs).toEqual(expectedResponse); }); @@ -233,27 +235,29 @@ describe('Test getCrossChainTransferTransactionInfo method', () => { describe('Test getRewardAssignedInfo method', () => { it('should return reward assigned info when called with valid address', async () => { - const mockEventData = [{ - id: 'efe94d3a5ad35297098614100c5dd7bff6657d38baed08fb850fa9ce69b0862c', - module: 'pos', - name: 'rewardsAssigned', - data: { - stakerAddress: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', - validatorAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', - tokenID: '0400000000000000', - amount: '100000000000', - result: 0, - }, - topics: [ - 'efcbab90c4769dc47029412010ef76623722678f446a7417f59fed998a6407de', - 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', - ], - block: { - id: '1fc7e1a4a06a6b9610ed5e4fb48c9f839b1fcd0f91b3f6d4c22f9f64eac40657', - height: 313, - timestamp: 1689693410, + const mockEventData = [ + { + id: 'efe94d3a5ad35297098614100c5dd7bff6657d38baed08fb850fa9ce69b0862c', + module: 'pos', + name: 'rewardsAssigned', + data: { + stakerAddress: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + validatorAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', + tokenID: '0400000000000000', + amount: '100000000000', + result: 0, + }, + topics: [ + 'efcbab90c4769dc47029412010ef76623722678f446a7417f59fed998a6407de', + 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + ], + block: { + id: '1fc7e1a4a06a6b9610ed5e4fb48c9f839b1fcd0f91b3f6d4c22f9f64eac40657', + height: 313, + timestamp: 1689693410, + }, }, - }]; + ]; jest.mock(mockedRequestAllFilePath, () => { const actual = jest.requireActual(mockedRequestAllFilePath); @@ -271,21 +275,23 @@ describe('Test getRewardAssignedInfo method', () => { ...actual, requestIndexer() { return { - data: [{ - moduleCommand: 'pos:stake', - params: { - stakes: [ - { - validatorAddress: 'lskkdvzyxhvm2kmgs8hmteaad2zrjbjmf4cft9zpp', - amount: '-1000000000', - }, - { - validatorAddress: 'lsk64zamp63e9km9p6vtfea9c5pda2wuw79tc8a9k', - amount: '2000000000', - }, - ], + data: [ + { + moduleCommand: 'pos:stake', + params: { + stakes: [ + { + validatorAddress: 'lskkdvzyxhvm2kmgs8hmteaad2zrjbjmf4cft9zpp', + amount: '-1000000000', + }, + { + validatorAddress: 'lsk64zamp63e9km9p6vtfea9c5pda2wuw79tc8a9k', + amount: '2000000000', + }, + ], + }, }, - }], + ], }; }, }; @@ -293,29 +299,33 @@ describe('Test getRewardAssignedInfo method', () => { const { getRewardAssignedInfo } = require('../../../shared/transactionsExport'); - const rewardsAssignedInfo = await getRewardAssignedInfo({ address: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad' }); - const expectedResponse = [{ - block: { - id: '1fc7e1a4a06a6b9610ed5e4fb48c9f839b1fcd0f91b3f6d4c22f9f64eac40657', - height: 313, - timestamp: 1689693410, - }, - id: 'efcbab90c4769dc47029412010ef76623722678f446a7417f59fed998a6407de', - moduleCommand: 'pos:stake', - params: { - amount: '100000000000', - data: 'This entry was generated from \'rewardsAssigned\' event emitted from the specified transactionID.', - validatorAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', - result: 0, - stakerAddress: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', - tokenID: '0400000000000000', - }, - sender: { - address: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + const rewardsAssignedInfo = await getRewardAssignedInfo({ + address: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + }); + const expectedResponse = [ + { + block: { + id: '1fc7e1a4a06a6b9610ed5e4fb48c9f839b1fcd0f91b3f6d4c22f9f64eac40657', + height: 313, + timestamp: 1689693410, + }, + id: 'efcbab90c4769dc47029412010ef76623722678f446a7417f59fed998a6407de', + moduleCommand: 'pos:stake', + params: { + amount: '100000000000', + data: "This entry was generated from 'rewardsAssigned' event emitted from the specified transactionID.", + validatorAddress: 'lskyvvam5rxyvbvofxbdfcupxetzmqxu22phm4yuo', + result: 0, + stakerAddress: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + tokenID: '0400000000000000', + }, + sender: { + address: 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad', + }, + rewardAmount: '100000000000', + rewardTokenID: '0400000000000000', }, - rewardAmount: '100000000000', - rewardTokenID: '0400000000000000', - }]; + ]; expect(rewardsAssignedInfo).toEqual(expectedResponse); }); @@ -363,11 +373,12 @@ describe('Test normalizeTransaction method', () => { chainID, txFeeTokenID, ); - const expectedFields = Object - .values(fieldMappings.transactionMappings) - .map((v) => v.key !== 'blockReward' ? v.key : undefined); - expect(Object.keys(normalizedTx)) - .toEqual(expect.arrayContaining(expectedFields.filter(e => e))); + const expectedFields = Object.values(fieldMappings.transactionMappings).map(v => + v.key !== 'blockReward' ? v.key : undefined, + ); + expect(Object.keys(normalizedTx)).toEqual( + expect.arrayContaining(expectedFields.filter(e => e)), + ); }); }); diff --git a/services/export/yarn.lock b/services/export/yarn.lock index ab7dc0d89..00df37c03 100644 --- a/services/export/yarn.lock +++ b/services/export/yarn.lock @@ -10,58 +10,58 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" @@ -92,10 +92,10 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -122,43 +122,43 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -195,6 +195,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -245,9 +252,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -260,28 +267,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -343,173 +350,196 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^16.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": @@ -536,35 +566,35 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" -"@liskhq/lisk-cryptography@4.0.0-rc.1": - version "4.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0-rc.1.tgz#b8df408aa1a94362091eda06b0a38577e4db5ead" - integrity sha512-e9ubCGSi8OzOJ21i8Mlc7Zsu+b2ofMGsC0QegzhQSf9Vf5+qAk2CHUR0X/+kT8wvSIpN6krfbz81sfzDPq/PBQ== +"@liskhq/lisk-cryptography@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0.tgz#f8752053f5512a6257a6b59a9ae45567e4ff5053" + integrity sha512-246hoey+sKx0/2GrECXfsjTmhv5PaD0z/vYpV1zTL4qPOHaDNqbKsSLg/uAt2OfM7et1KoG76jpYzaiifqCJiw== dependencies: - "@liskhq/lisk-passphrase" "^4.0.0-rc.0" + "@liskhq/lisk-passphrase" "^4.0.0" buffer-reverse "1.0.1" hash-wasm "4.9.0" tweetnacl "1.0.3" -"@liskhq/lisk-passphrase@^4.0.0-rc.0": - version "4.0.0-rc.0" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.0.0-rc.0.tgz#78fe583229c96d76258906375e34ff84a413be05" - integrity sha512-m87nhvUpOlSLr5NRV2M4INtg0IjjFF7Bte96Iq6X1dhzOjlmPg/QUQa7MFUzQu3NEWWHnpwON8QQK1FUE6ixYw== +"@liskhq/lisk-passphrase@^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.1.0.tgz#d9a72a9c9d4cdb557a25b84bffe73d579155f723" + integrity sha512-1VdpEp+OGiyCF0Fjtgcc+SLlHeIflzya49GzIXcXjFNf19VgkUu/eIDM8XHxSdj/5KzpL+yD07OYCh+LdoAkfA== dependencies: bip39 "3.0.3" @@ -574,34 +604,34 @@ dependencies: debug "^3.1.0" -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -610,24 +640,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" @@ -637,42 +667,44 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/node@11.11.6": version "11.11.6" @@ -684,25 +716,20 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== -"@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" @@ -711,11 +738,6 @@ resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -724,36 +746,6 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -888,9 +880,9 @@ arraybuffer.prototype.slice@^1.0.2: is-shared-array-buffer "^1.0.2" async@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" @@ -902,23 +894,24 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -934,14 +927,14 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: @@ -962,12 +955,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^27.5.1" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -986,17 +979,17 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" big-integer@^1.6.17: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + version "1.6.52" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== binary@~0.3.0: version "0.3.0" @@ -1094,19 +1087,14 @@ browser-or-node@^2.1.1: resolved "https://registry.yarnpkg.com/browser-or-node/-/browser-or-node-2.1.1.tgz#738790b3a86a8fc020193fa581273fbe65eaea0f" integrity sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg== -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: @@ -1170,13 +1158,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1198,10 +1187,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== chainsaw@~0.1.0: version "0.1.0" @@ -1238,9 +1227,9 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -1255,13 +1244,13 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: @@ -1350,10 +1339,10 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== convert-source-map@^2.0.0: version "2.0.0" @@ -1414,6 +1403,19 @@ create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" @@ -1431,23 +1433,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -1456,15 +1441,6 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -1482,7 +1458,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1501,11 +1477,6 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -1518,10 +1489,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -1533,16 +1504,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -1586,17 +1557,10 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== duplexer2@~0.1.4: version "0.1.4" @@ -1610,15 +1574,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -1638,9 +1602,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -1654,9 +1618,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -1677,25 +1641,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -1705,7 +1669,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -1719,7 +1683,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -1727,13 +1691,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -1795,37 +1759,16 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -1837,14 +1780,14 @@ eventemitter2@^6.4.9: integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== exceljs@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/exceljs/-/exceljs-4.3.0.tgz#939bc0d4c59c200acadb7051be34d25c109853c4" - integrity sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w== + version "4.4.0" + resolved "https://registry.yarnpkg.com/exceljs/-/exceljs-4.4.0.tgz#cfb1cb8dcc82c760a9fc9faa9e52dadab66b0156" + integrity sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg== dependencies: archiver "^5.0.0" dayjs "^1.8.34" fast-csv "^4.3.1" - jszip "^3.5.0" + jszip "^3.10.1" readable-stream "^3.6.0" saxes "^5.0.1" tmp "^0.2.0" @@ -1876,15 +1819,16 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" ext@^1.1.2: version "1.7.0" @@ -1901,15 +1845,15 @@ fast-csv@^4.3.1: "@fast-csv/format" "4.3.5" "@fast-csv/parse" "4.3.6" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-xml-parser@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.1.tgz#4f89c31e4c392d6e3d68b299733cad0c2d50d495" - integrity sha512-viVv3xb8D+SiS1W4cv4tva3bni08kAkx0gQnWrykMM8nXPc1FxqZPU00dCEVjkiCg4HoXd2jC4x29Nzg/l2DAA== + version "4.3.2" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz#761e641260706d6e13251c4ef8e3f5694d4b0d79" + integrity sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg== dependencies: strnum "^1.0.5" @@ -1955,7 +1899,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -1967,10 +1911,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -2015,10 +1959,10 @@ fstream@^1.0.12: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -2052,15 +1996,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -2095,7 +2039,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0, glob@^7.2.3: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2147,11 +2091,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -2170,13 +2114,6 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hash-base@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" @@ -2191,12 +2128,12 @@ hash-wasm@4.9.0: resolved "https://registry.yarnpkg.com/hash-wasm/-/hash-wasm-4.9.0.tgz#7e9dcc9f7d6bd0cc802f2a58f24edce999744206" integrity sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w== -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" @@ -2214,28 +2151,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -2297,12 +2217,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -2390,11 +2310,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2445,11 +2365,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2496,11 +2411,6 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed- dependencies: which-typed-array "^1.1.11" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -2529,11 +2439,11 @@ isstream@^0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -2544,6 +2454,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -2570,410 +2491,363 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.6.3" + "@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 "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== - dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -2988,39 +2862,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3075,7 +2916,7 @@ jsonparse@^1.3.1: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jszip@^3.5.0: +jszip@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== @@ -3093,9 +2934,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -3158,13 +2999,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -3275,7 +3116,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3440,9 +3281,9 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: minimist "^1.2.6" moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -3457,9 +3298,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.21: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -3512,9 +3353,9 @@ ms@2.1.3, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -3561,9 +3402,9 @@ next-tick@^1.1.0: integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" @@ -3587,10 +3428,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== node-xlsx@^0.23.0: version "0.23.0" @@ -3616,20 +3457,15 @@ nuid@^1.1.4: resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -3637,12 +3473,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -3695,6 +3531,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -3734,11 +3577,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -3825,14 +3663,14 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" prettyjson@^1.2.1: version "1.2.5" @@ -3866,10 +3704,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -3879,10 +3717,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" @@ -3908,11 +3746,6 @@ query-string@^7.1.3: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - randombytes@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -3945,10 +3778,10 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== readable-stream@3, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" @@ -4029,11 +3862,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -4046,15 +3874,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -4138,7 +3966,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.5.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -4179,6 +4007,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -4227,7 +4065,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4299,24 +4137,19 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - split-on-first@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" @@ -4376,7 +4209,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4465,7 +4298,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -4479,24 +4312,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -4523,14 +4343,6 @@ tarn@^3.0.2: resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -4545,11 +4357,6 @@ text-decoding@^1.0.0: resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - through2@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" @@ -4596,23 +4403,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4714,13 +4504,6 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - tz-offset@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tz-offset/-/tz-offset-0.0.1.tgz#fef920257024d3583ed9072a767721a18bdb8a76" @@ -4736,16 +4519,16 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4775,14 +4558,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4817,35 +4592,21 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" vary@^1: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -4866,28 +4627,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -4896,15 +4635,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -4916,13 +4646,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11, which-typed-array@^1.1.2: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.2: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -4948,20 +4678,13 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + signal-exit "^3.0.7" ws@~8.11.0: version "8.11.0" @@ -4972,11 +4695,6 @@ ws@~8.11.0: version "0.19.3" resolved "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz#f804c1850e2da5260165db0a059dc2a6099d55f3" -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - xml2js@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" @@ -5020,23 +4738,28 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zip-stream@^4.1.0: version "4.1.1" diff --git a/services/fee-estimator/app.js b/services/fee-estimator/app.js index 838e776fa..41314cf10 100644 --- a/services/fee-estimator/app.js +++ b/services/fee-estimator/app.js @@ -14,12 +14,7 @@ * */ const path = require('path'); -const { - Microservice, - Logger, - LoggerConfig, - Signals, -} = require('lisk-service-framework'); +const { Microservice, Logger, LoggerConfig, Signals } = require('lisk-service-framework'); const config = require('./config'); @@ -36,11 +31,9 @@ const app = Microservice({ brokerTimeout: config.brokerTimeout, // in seconds logger: config.log, events: { - chainNewBlock: async (payload) => Signals.get('newBlock').dispatch(payload), + chainNewBlock: async payload => Signals.get('newBlock').dispatch(payload), }, - dependencies: [ - 'connector', - ], + dependencies: ['connector'], }); setAppContext(app); @@ -50,10 +43,13 @@ app.addMethods(path.join(__dirname, 'methods')); app.addEvents(path.join(__dirname, 'events')); // Run the application -app.run().then(async () => { - logger.info(`Service started ${packageJson.name}.`); -}).catch(err => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); - logger.fatal(err.stack); - process.exit(1); -}); +app + .run() + .then(async () => { + logger.info(`Service started ${packageJson.name}.`); + }) + .catch(err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); + logger.fatal(err.stack); + process.exit(1); + }); diff --git a/services/fee-estimator/config.js b/services/fee-estimator/config.js index 367011297..e9bc30f57 100644 --- a/services/fee-estimator/config.js +++ b/services/fee-estimator/config.js @@ -26,30 +26,27 @@ const config = { /** * Inter-service message broker */ -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 10; // in seconds /** * External endpoints */ -config.endpoints.cache = process.env.SERVICE_FEE_ESTIMATOR_CACHE || 'redis://127.0.0.1:6379/1'; +config.endpoints.cache = + process.env.SERVICE_FEE_ESTIMATOR_CACHE || 'redis://lisk:password@127.0.0.1:6379/1'; config.feeEstimates = { - quickAlgorithmEnabled: Boolean( - String(process.env.ENABLE_FEE_ESTIMATOR_QUICK).toLowerCase() !== 'false', - ), - fullAlgorithmEnabled: Boolean( - String(process.env.ENABLE_FEE_ESTIMATOR_FULL).toLowerCase() === 'true', - ), - coldStartBatchSize: Number(process.env.FEE_EST_COLD_START_BATCH_SIZE || 1), - defaultStartBlockHeight: Number(process.env.FEE_EST_DEFAULT_START_BLOCK_HEIGHT || 1), + quickAlgorithmEnabled: String(process.env.ENABLE_FEE_ESTIMATOR_QUICK).toLowerCase() !== 'false', + fullAlgorithmEnabled: String(process.env.ENABLE_FEE_ESTIMATOR_FULL).toLowerCase() === 'true', + coldStartBatchSize: Number(process.env.FEE_EST_COLD_START_BATCH_SIZE) || 1, + defaultStartBlockHeight: Number(process.env.FEE_EST_DEFAULT_START_BLOCK_HEIGHT) || 1, medEstLowerPercentile: 25, medEstUpperPercentile: 75, highEstLowerPercentile: 80, highEstUpperPercentile: 100, - emaBatchSize: Number(process.env.FEE_EST_EMA_BATCH_SIZE || 20), - emaDecayRate: Number(process.env.FEE_EST_EMA_DECAY_RATE || 0.5), - wavgDecayPercentage: Number(process.env.FEE_EST_WAVG_DECAY_PERCENTAGE || 10), + emaBatchSize: Number(process.env.FEE_EST_EMA_BATCH_SIZE) || 20, + emaDecayRate: Number(process.env.FEE_EST_EMA_DECAY_RATE) || 0.5, + wavgDecayPercentage: Number(process.env.FEE_EST_WAVG_DECAY_PERCENTAGE) || 10, }; config.cacheKeys = Object.freeze({ diff --git a/services/fee-estimator/events/feeEstimates.js b/services/fee-estimator/events/feeEstimates.js index 308a084cb..440cea89a 100644 --- a/services/fee-estimator/events/feeEstimates.js +++ b/services/fee-estimator/events/feeEstimates.js @@ -28,9 +28,12 @@ module.exports = [ logger.debug('Returning latest fee_estimates to the socket.io client...'); const restData = await getEstimateFeePerByte(); - if (Object.keys(restData).length > 0 && restData.status !== 'SERVICE_UNAVAILABLE') callback(restData); + if (Object.keys(restData).length > 0 && restData.status !== 'SERVICE_UNAVAILABLE') + callback(restData); } catch (err) { - logger.error(`Error occurred when processing 'update.fee_estimates' event:\n${err.stack}`); + logger.error( + `Error occurred when processing 'update.fee_estimates' event:\n${err.stack}`, + ); } }; Signals.get('newFeeEstimate').add(newFeeEstimateListener); diff --git a/services/fee-estimator/jest.config.functional.js b/services/fee-estimator/jest.config.functional.js index d34526e67..a12de3c9a 100644 --- a/services/fee-estimator/jest.config.functional.js +++ b/services/fee-estimator/jest.config.functional.js @@ -5,9 +5,7 @@ module.exports = { verbose: true, coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/functional/**/*.test.js', - ], + testMatch: ['/tests/functional/**/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/fee-estimator/jest.config.js b/services/fee-estimator/jest.config.js index a6e880799..a7d851771 100644 --- a/services/fee-estimator/jest.config.js +++ b/services/fee-estimator/jest.config.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/unit/*.test.js', - ], + testMatch: ['/tests/unit/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/fee-estimator/package.json b/services/fee-estimator/package.json index c13f7aab1..4218bcd23 100644 --- a/services/fee-estimator/package.json +++ b/services/fee-estimator/package.json @@ -1,6 +1,6 @@ { "name": "lisk-service-fee-estimator", - "version": "0.7.0-rc.1", + "version": "0.7.2", "description": "Lisk Service Fee Estimator", "keywords": [ "lisk", @@ -30,16 +30,17 @@ "test:functional": "jest --config=jest.config.functional.js --detectOpenHandles --forceExit" }, "dependencies": { - "@liskhq/lisk-codec": "0.4.0-rc.1", - "@liskhq/lisk-cryptography": "4.0.0-rc.1", - "@liskhq/lisk-transactions": "6.0.0-rc.1", + "@liskhq/lisk-codec": "0.4.0", + "@liskhq/lisk-cryptography": "4.0.0", + "@liskhq/lisk-transactions": "6.0.0", "bluebird": "^3.7.2", - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz" + "ioredis": "^5.3.2", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz" }, "devDependencies": { "@babel/preset-env": "^7.14.0", "babel-jest": "^27.3.0", - "jest": "^27.3.0", + "jest": "^29.7.0", "jest-when": "^3.5.1", "mocker-data-generator": "^2.12.0" } diff --git a/services/fee-estimator/shared/dynamicFees.js b/services/fee-estimator/shared/dynamicFees.js index 86fa913bb..1c85a7548 100644 --- a/services/fee-estimator/shared/dynamicFees.js +++ b/services/fee-estimator/shared/dynamicFees.js @@ -14,24 +14,15 @@ * */ const util = require('util'); -const { - CacheRedis, - Logger, - Signals, -} = require('lisk-service-framework'); +const { CacheRedis, Logger, Signals } = require('lisk-service-framework'); const { requestConnector } = require('./utils/request'); const config = require('../config'); -const { - getFeeConstants, -} = require('./feeConstants'); +const { getFeeConstants } = require('./feeConstants'); -const { - checkAndProcessExecution, - isFeeCalculationRunningInMode, -} = require('./utils/dynamicFees'); +const { checkAndProcessExecution, isFeeCalculationRunningInMode } = require('./utils/dynamicFees'); const cacheRedisFees = CacheRedis('fees', config.endpoints.cache); @@ -43,12 +34,18 @@ const calculateEstimateFeePerByteFull = async () => { const toHeight = latestBlock.height; if (!isFeeCalculationRunningInMode(config.cacheKeys.cacheKeyFeeEstFull)) { - logger.debug(`Computing full fee estimate for block ${latestBlock.id} at height ${latestBlock.height}.`); + logger.debug( + `Computing full fee estimate for block ${latestBlock.id} at height ${latestBlock.height}.`, + ); } else { - logger.debug('Compute full fee estimate is already running. Won\'t start again until the current execution finishes.'); + logger.debug( + "Compute full fee estimate is already running. Won't start again until the current execution finishes.", + ); } const cachedFeeEstPerByteFull = await checkAndProcessExecution( - fromHeight, toHeight, config.cacheKeys.cacheKeyFeeEstFull, + fromHeight, + toHeight, + config.cacheKeys.cacheKeyFeeEstFull, ); return cachedFeeEstPerByteFull; }; @@ -60,9 +57,13 @@ const calculateEstimateFeePerByteQuick = async () => { const toHeight = latestBlock.height; const fromHeight = toHeight - batchSize; - logger.debug(`Computing quick fee estimate for block ${latestBlock.id} at height ${latestBlock.height}`); + logger.debug( + `Computing quick fee estimate for block ${latestBlock.id} at height ${latestBlock.height}.`, + ); const cachedFeeEstPerByteQuick = await checkAndProcessExecution( - fromHeight, toHeight, config.cacheKeys.cacheKeyFeeEstQuick, + fromHeight, + toHeight, + config.cacheKeys.cacheKeyFeeEstQuick, ); return cachedFeeEstPerByteQuick; @@ -71,7 +72,8 @@ const calculateEstimateFeePerByteQuick = async () => { const getEstimateFeePerByteQuick = () => cacheRedisFees.get(config.cacheKeys.cacheKeyFeeEstFull); const getEstimateFeePerByteFull = () => cacheRedisFees.get(config.cacheKeys.cacheKeyFeeEstQuick); -const getEstimateFeePerByte = async () => { // aka getBestEstimateAvailable +const getEstimateFeePerByte = async () => { + // aka getBestEstimateAvailable if (!config.feeEstimates.quickAlgorithmEnabled && !config.feeEstimates.fullAlgorithmEnabled) { return { data: { error: 'The dynamic fees algorithm has not been enabled.' }, @@ -80,24 +82,28 @@ const getEstimateFeePerByte = async () => { // aka getBestEstimateAvailable } const { header: latestBlock } = await requestConnector('getLastBlock'); - const validate = (feeEstPerByte, allowedLag = 0) => feeEstPerByte - && ['low', 'med', 'high', 'updated', 'blockHeight', 'blockID'] - .every(key => Object.keys(feeEstPerByte).includes(key)) - && Number(latestBlock.height) - Number(feeEstPerByte.blockHeight) <= allowedLag; + const validate = (feeEstPerByte, allowedLag = 0) => + feeEstPerByte && + ['low', 'med', 'high', 'updated', 'blockHeight', 'blockID'].every(key => + Object.keys(feeEstPerByte).includes(key), + ) && + Number(latestBlock.height) - Number(feeEstPerByte.blockHeight) <= allowedLag; const cachedFeeEstPerByteFull = await getEstimateFeePerByteFull(); logger.debug(`Retrieved regular estimate: ${util.inspect(cachedFeeEstPerByteFull)}.`); - if (validate(cachedFeeEstPerByteFull, 15)) return { - ...cachedFeeEstPerByteFull, - ...await getFeeConstants(), - }; + if (validate(cachedFeeEstPerByteFull, 15)) + return { + ...cachedFeeEstPerByteFull, + ...(await getFeeConstants()), + }; const cachedFeeEstPerByteQuick = await getEstimateFeePerByteQuick(); logger.debug(`Retrieved quick estimate: ${util.inspect(cachedFeeEstPerByteQuick)}.`); - if (validate(cachedFeeEstPerByteQuick, 5)) return { - ...cachedFeeEstPerByteQuick, - ...await getFeeConstants(), - }; + if (validate(cachedFeeEstPerByteQuick, 5)) + return { + ...cachedFeeEstPerByteQuick, + ...(await getFeeConstants()), + }; return { data: { error: 'The estimates are currently under processing. Please retry in 30 seconds.' }, @@ -114,7 +120,9 @@ const newBlockListener = async () => { if (config.feeEstimates.quickAlgorithmEnabled) { logger.debug('Initiate the dynamic fee estimates computation (quick algorithm).'); const feeEstimate = await calculateEstimateFeePerByteQuick(); - logger.debug(`============== 'newFeeEstimate' signal: ${Signals.get('newFeeEstimate')} ==============.`); + logger.debug( + `============== 'newFeeEstimate' signal: ${Signals.get('newFeeEstimate')} ==============.`, + ); Signals.get('newFeeEstimate').dispatch(feeEstimate); } } catch (err) { diff --git a/services/fee-estimator/shared/status.js b/services/fee-estimator/shared/status.js index f383549d6..0fb311763 100644 --- a/services/fee-estimator/shared/status.js +++ b/services/fee-estimator/shared/status.js @@ -1,18 +1,18 @@ /* -* LiskHQ/lisk-service -* Copyright © 2023 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const packageJson = require('../package.json'); const { getEstimateFeePerByte } = require('./dynamicFees'); diff --git a/services/fee-estimator/shared/utils/dynamicFees.js b/services/fee-estimator/shared/utils/dynamicFees.js index 13fc420cc..827490d02 100644 --- a/services/fee-estimator/shared/utils/dynamicFees.js +++ b/services/fee-estimator/shared/utils/dynamicFees.js @@ -15,14 +15,9 @@ */ const BluebirdPromise = require('bluebird'); -const { - CacheRedis, - Logger, -} = require('lisk-service-framework'); - -const { - getEstimateFeePerByteForBlock, -} = require('./dynamicFeesLIP'); +const { CacheRedis, Logger } = require('lisk-service-framework'); + +const { getEstimateFeePerByteForBlock } = require('./dynamicFeesLIP'); const { requestConnector } = require('./request'); const config = require('../../config'); @@ -33,7 +28,7 @@ const executionStatus = Object.freeze({ [config.cacheKeys.cacheKeyFeeEstQuick]: false, }); -const isFeeCalculationRunningInMode = (execMode) => executionStatus[execMode]; +const isFeeCalculationRunningInMode = execMode => executionStatus[execMode]; const cacheRedisFees = CacheRedis('fees', config.endpoints.cache); const logger = Logger(); @@ -44,23 +39,27 @@ const getEstimateFeePerByteForBatch = async (fromHeight, toHeight, cacheKey) => // Check if the starting height is permitted by config or adjust acc. // Use incrementation to skip the genesis block - it is not needed - fromHeight = Math.max(...[defaultStartBlockHeight, genesisHeight + 1, fromHeight] - .filter(n => !Number.isNaN(n))); + fromHeight = Math.max( + ...[defaultStartBlockHeight, genesisHeight + 1, fromHeight].filter(n => !Number.isNaN(n)), + ); const cachedFeeEstimate = await cacheRedisFees.get(cacheKey); - const cachedFeeEstimateHeight = !cacheKey.includes('Quick') && cachedFeeEstimate - ? cachedFeeEstimate.blockHeight : 0; // 0 implies does not exist + const cachedFeeEstimateHeight = + !cacheKey.includes('Quick') && cachedFeeEstimate ? cachedFeeEstimate.blockHeight : 0; // 0 implies does not exist - const prevFeeEstPerByte = fromHeight > cachedFeeEstimateHeight - ? { blockHeight: fromHeight - 1, low: 0, med: 0, high: 0 } - : cachedFeeEstimate; + const prevFeeEstPerByte = + fromHeight > cachedFeeEstimateHeight + ? { blockHeight: fromHeight - 1, low: 0, med: 0, high: 0 } + : cachedFeeEstimate; - const range = size => Array(size).fill().map((_, index) => index); + const range = size => + Array(size) + .fill() + .map((_, index) => index); const feeEstPerByte = {}; const blockBatch = {}; do { - /* eslint-disable no-await-in-loop */ const idealEMABatchSize = config.feeEstimates.emaBatchSize; const finalEMABatchSize = (() => { const maxEMABasedOnHeight = prevFeeEstPerByte.blockHeight - genesisHeight; @@ -71,30 +70,31 @@ const getEstimateFeePerByteForBatch = async (fromHeight, toHeight, cacheKey) => blockBatch.data = await BluebirdPromise.map( range(finalEMABatchSize), async i => { - const { header, transactions } = await requestConnector( - 'getBlockByHeight', - { height: prevFeeEstPerByte.blockHeight + 1 - i }, - ); + const { header, transactions } = await requestConnector('getBlockByHeight', { + height: prevFeeEstPerByte.blockHeight + 1 - i, + }); return { ...header, transactions }; }, { concurrency: 50 }, ); - Object.assign(prevFeeEstPerByte, - await getEstimateFeePerByteForBlock(blockBatch, prevFeeEstPerByte)); + Object.assign( + prevFeeEstPerByte, + await getEstimateFeePerByteForBlock(blockBatch, prevFeeEstPerByte), + ); // Store intermediate values, in case of a long running loop if (prevFeeEstPerByte.blockHeight < toHeight) { await cacheRedisFees.set(cacheKey, prevFeeEstPerByte); } - - /* eslint-enable no-await-in-loop */ } while (toHeight > prevFeeEstPerByte.blockHeight); Object.assign(feeEstPerByte, prevFeeEstPerByte); await cacheRedisFees.set(cacheKey, feeEstPerByte); - logger.info(`Recalulated dynamic fees: L: ${feeEstPerByte.low} M: ${feeEstPerByte.med} H: ${feeEstPerByte.high}`); + logger.info( + `Re-calculated dynamic fees: L: ${feeEstPerByte.low} M: ${feeEstPerByte.med} H: ${feeEstPerByte.high}.`, + ); return feeEstPerByte; }; diff --git a/services/fee-estimator/shared/utils/dynamicFeesLIP.js b/services/fee-estimator/shared/utils/dynamicFeesLIP.js index c35508b2a..439f00887 100644 --- a/services/fee-estimator/shared/utils/dynamicFeesLIP.js +++ b/services/fee-estimator/shared/utils/dynamicFeesLIP.js @@ -27,8 +27,8 @@ const calcAvgFeeByteModes = Object.freeze({ }); const EMAcalc = (feePerByte, prevFeeEstPerByte) => { - const calcExpDecay = (emaBatchSize, emaDecayRate) => ( - 1 - Math.pow(1 - emaDecayRate, 1 / emaBatchSize)).toFixed(5); + const calcExpDecay = (emaBatchSize, emaDecayRate) => + (1 - Math.pow(1 - emaDecayRate, 1 / emaBatchSize)).toFixed(5); const alpha = calcExpDecay(config.feeEstimates.emaBatchSize, config.feeEstimates.emaDecayRate); logger.debug(`Estimating fees with 'α' for EMA set to ${alpha}.`); @@ -38,7 +38,7 @@ const EMAcalc = (feePerByte, prevFeeEstPerByte) => { prevFeeEstPerByte = { low: 0, med: 0, high: 0 }; } - Object.keys(feePerByte).forEach((property) => { + Object.keys(feePerByte).forEach(property => { feeEst[property] = alpha * feePerByte[property] + (1 - alpha) * prevFeeEstPerByte[property]; }); @@ -52,7 +52,7 @@ const EMAcalc = (feePerByte, prevFeeEstPerByte) => { const calculateBlockSize = async block => { let blockSize = 0; - block.transactions.forEach(txn => blockSize += txn.size); + block.transactions.forEach(txn => (blockSize += txn.size)); return blockSize; }; @@ -60,28 +60,38 @@ const calculateAvgFeePerByte = (mode, transactionDetails) => { const maxBlockSize = 15 * 2 ** 10; const allowedModes = Object.values(calcAvgFeeByteModes); - const lowerPercentile = allowedModes.includes(mode) && mode === calcAvgFeeByteModes.MEDIUM - ? config.feeEstimates.medEstLowerPercentile : config.feeEstimates.highEstLowerPercentile; - const upperPercentile = allowedModes.includes(mode) && mode === calcAvgFeeByteModes.MEDIUM - ? config.feeEstimates.medEstUpperPercentile : config.feeEstimates.highEstUpperPercentile; + const lowerPercentile = + allowedModes.includes(mode) && mode === calcAvgFeeByteModes.MEDIUM + ? config.feeEstimates.medEstLowerPercentile + : config.feeEstimates.highEstLowerPercentile; + const upperPercentile = + allowedModes.includes(mode) && mode === calcAvgFeeByteModes.MEDIUM + ? config.feeEstimates.medEstUpperPercentile + : config.feeEstimates.highEstUpperPercentile; const lowerBytePos = Math.ceil((lowerPercentile / 100) * maxBlockSize); const upperBytePos = Math.floor((upperPercentile / 100) * maxBlockSize); let currentBytePos = 0; let totalFeePriority = 0; transactionDetails.forEach(transaction => { - if (currentBytePos <= lowerBytePos && lowerBytePos < currentBytePos + transaction.size - && currentBytePos + transaction.size <= upperBytePos) { - totalFeePriority += transaction.feePriority - * (currentBytePos + transaction.size - lowerBytePos + 1); + if ( + currentBytePos <= lowerBytePos && + lowerBytePos < currentBytePos + transaction.size && + currentBytePos + transaction.size <= upperBytePos + ) { + totalFeePriority += + transaction.feePriority * (currentBytePos + transaction.size - lowerBytePos + 1); } if (lowerBytePos <= currentBytePos && currentBytePos + transaction.size <= upperBytePos) { totalFeePriority += transaction.feePriority * transaction.size; } - if (lowerBytePos <= currentBytePos && upperBytePos >= currentBytePos - && upperBytePos <= currentBytePos + transaction.size) { + if ( + lowerBytePos <= currentBytePos && + upperBytePos >= currentBytePos && + upperBytePos <= currentBytePos + transaction.size + ) { totalFeePriority += transaction.feePriority * (upperBytePos - currentBytePos + 1); } @@ -93,24 +103,19 @@ const calculateAvgFeePerByte = (mode, transactionDetails) => { }; const calculateWeightedAvg = async blocks => { - const blockSizes = await BluebirdPromise.map( - blocks, - async block => calculateBlockSize(block), - { concurrency: blocks.length }, - ); - const decayFactor = 1 - (config.feeEstimates.wavgDecayPercentage / 100); + const blockSizes = await BluebirdPromise.map(blocks, async block => calculateBlockSize(block), { + concurrency: blocks.length, + }); + const decayFactor = 1 - config.feeEstimates.wavgDecayPercentage / 100; let weight = 1; let totalWeight = 0; - const blockSizeSum = blockSizes.reduce( - (partialBlockSizeSum, blockSize) => { - partialBlockSizeSum += (blockSize * weight); - totalWeight += weight; - weight *= decayFactor; - return partialBlockSizeSum; - }, - 0, - ); + const blockSizeSum = blockSizes.reduce((partialBlockSizeSum, blockSize) => { + partialBlockSizeSum += blockSize * weight; + totalWeight += weight; + weight *= decayFactor; + return partialBlockSizeSum; + }, 0); const blockSizeWeightedAvg = blockSizeSum / totalWeight; return blockSizeWeightedAvg; @@ -127,10 +132,12 @@ const calculateFeePerByte = async block => { const blockSize = await calculateBlockSize(block); - feePerByte.low = (blockSize < 12.5 * 2 ** 10) ? 0 : transactionDetails[0].feePriority; + feePerByte.low = blockSize < 12.5 * 2 ** 10 ? 0 : transactionDetails[0].feePriority; feePerByte.med = calculateAvgFeePerByte(calcAvgFeeByteModes.MEDIUM, transactionDetails); - feePerByte.high = Math.max(calculateAvgFeePerByte(calcAvgFeeByteModes.HIGH, transactionDetails), - (1.3 * feePerByte.med + 1)); + feePerByte.high = Math.max( + calculateAvgFeePerByte(calcAvgFeeByteModes.HIGH, transactionDetails), + 1.3 * feePerByte.med + 1, + ); return feePerByte; }; @@ -141,7 +148,7 @@ const getEstimateFeePerByteForBlock = async (blockBatch, innerPrevFeeEstPerByte) const feePerByte = await calculateFeePerByte(blockBatch.data[0]); const feeEstPerByte = {}; - if (wavgBlockBatch > (12.5 * 2 ** 10) || sizeLastBlock > (14.8 * 2 ** 10)) { + if (wavgBlockBatch > 12.5 * 2 ** 10 || sizeLastBlock > 14.8 * 2 ** 10) { const EMAoutput = EMAcalc(feePerByte, innerPrevFeeEstPerByte); feeEstPerByte.low = EMAoutput.feeEstLow; diff --git a/services/fee-estimator/shared/utils/request.js b/services/fee-estimator/shared/utils/request.js index 5175dd195..488ea4926 100644 --- a/services/fee-estimator/shared/utils/request.js +++ b/services/fee-estimator/shared/utils/request.js @@ -16,7 +16,7 @@ let app; -const setAppContext = (h) => app = h; +const setAppContext = h => (app = h); const getAppContext = () => app; diff --git a/services/fee-estimator/tests/blockGenerator/createBlocks.js b/services/fee-estimator/tests/blockGenerator/createBlocks.js index 82b2ff209..de3ad98a0 100644 --- a/services/fee-estimator/tests/blockGenerator/createBlocks.js +++ b/services/fee-estimator/tests/blockGenerator/createBlocks.js @@ -16,30 +16,31 @@ const mocker = require('mocker-data-generator').default; const txMocker = require('./createTransactionsData'); -const blockMocker = (blockData, batchSize, payloadLength) => mocker() - .schema('blocks', blockData, batchSize) - .build((err, data) => { - if (err) console.error(err); +const blockMocker = (blockData, batchSize, payloadLength) => + mocker() + .schema('blocks', blockData, batchSize) + .build((err, data) => { + if (err) console.error(err); - let blockIndex = data.blocks.length - 1; - do { - const block = data.blocks[blockIndex]; + let blockIndex = data.blocks.length - 1; + do { + const block = data.blocks[blockIndex]; - if (blockIndex < data.blocks.length - 1) { - block.timestamp = data.blocks[blockIndex + 1].timestamp - 10; - } + if (blockIndex < data.blocks.length - 1) { + block.timestamp = data.blocks[blockIndex + 1].timestamp - 10; + } - if (payloadLength === 0) { - block.transactions = []; - } else { - block.transactions = txMocker(payloadLength); - } - if (blockIndex > 0) { - block.previousBlockId = data.blocks[blockIndex - 1].id; - } - } while (--blockIndex >= 0); + if (payloadLength === 0) { + block.transactions = []; + } else { + block.transactions = txMocker(payloadLength); + } + if (blockIndex > 0) { + block.previousBlockId = data.blocks[blockIndex - 1].id; + } + } while (--blockIndex >= 0); - return data; - }); + return data; + }); module.exports = blockMocker; diff --git a/services/fee-estimator/tests/blockGenerator/createTransactionsData.js b/services/fee-estimator/tests/blockGenerator/createTransactionsData.js index 759bd44e6..3c5f2a020 100644 --- a/services/fee-estimator/tests/blockGenerator/createTransactionsData.js +++ b/services/fee-estimator/tests/blockGenerator/createTransactionsData.js @@ -27,14 +27,12 @@ const { let command; const TOKEN_ID = '0000000000000000'; -const generateHex = (size) => { +const generateHex = size => { let resultHex = ''; const hexCharacters = 'abcdef0123456789'; for (let i = 0; i < size; i++) { - resultHex += hexCharacters.charAt( - Math.floor(Math.random() * hexCharacters.length), - ); + resultHex += hexCharacters.charAt(Math.floor(Math.random() * hexCharacters.length)); } return resultHex; @@ -84,10 +82,12 @@ const transactionData = { numberOfSignatures: { function: () => 0 }, votes: { - function: () => [{ - amount: String((Math.floor(Math.random() * 10) * 10 ** 7)), - delegateAddress: generateHex(40), - }], + function: () => [ + { + amount: String(Math.floor(Math.random() * 10) * 10 ** 7), + delegateAddress: generateHex(40), + }, + ], }, }, signatures: { @@ -102,47 +102,55 @@ const transactionData = { }; const paramsTransactionTypeTransfer = ['amount', 'recipientAddress', 'data', 'tokenID']; -const paramsTransactionTypeRegisterMultisignature = ['mandatoryKeys', 'optionalKeys', 'numberOfSignatures']; +const paramsTransactionTypeRegisterMultisignature = [ + 'mandatoryKeys', + 'optionalKeys', + 'numberOfSignatures', +]; const paramsTransactionTypeVoteDelegate = ['votes']; -const txMocker = (batchSize) => mocker() - .schema('transactions', transactionData, batchSize) - .build((err, data) => { - if (err) throw err; - - data.transactions.forEach((transaction) => { - let containAssets = paramsTransactionTypeTransfer; - const nameFee = 0; - let avgTxSize = 130; - if (transaction.module === MODULE_AUTH) { - transaction.command = COMMAND_AUTH_REGISTER_MULTISIGNATURE; - containAssets = paramsTransactionTypeRegisterMultisignature; - avgTxSize = 117; - - let n = Math.floor(Math.random() * 10) % 5; - let m = Math.floor(Math.random() * 10) % 5; - transaction.params.numberOfSignatures = n + (m > 2 ? m % 2 : 0); - while (--n > 0) transaction.params.mandatoryKeys.push(generateHex(128)); - while (--m > 0) transaction.params.optionalKeys.push(generateHex(128)); - } else if (transaction.module === MODULE_DPOS) { - transaction.command = COMMAND_DPOS_VOTE_DELEGATE; - containAssets = paramsTransactionTypeVoteDelegate; - avgTxSize = 130; - } else if (transaction.module === MODULE_TOKEN - && transaction.command === COMMAND_TOKEN_TRANSFER) { - avgTxSize = 130; - } - - transaction.size = avgTxSize; - transaction.minFee = nameFee + avgTxSize * 10 ** 3; - transaction.fee = String(transaction.minFee - + Math.round(Math.random() * transaction.minFee * 5)); - Object.keys(transaction.params).forEach(key => { - if (!containAssets.includes(key)) delete transaction.params[key]; +const txMocker = batchSize => + mocker() + .schema('transactions', transactionData, batchSize) + .build((err, data) => { + if (err) throw err; + + data.transactions.forEach(transaction => { + let containAssets = paramsTransactionTypeTransfer; + const nameFee = 0; + let avgTxSize = 130; + if (transaction.module === MODULE_AUTH) { + transaction.command = COMMAND_AUTH_REGISTER_MULTISIGNATURE; + containAssets = paramsTransactionTypeRegisterMultisignature; + avgTxSize = 117; + + let n = Math.floor(Math.random() * 10) % 5; + let m = Math.floor(Math.random() * 10) % 5; + transaction.params.numberOfSignatures = n + (m > 2 ? m % 2 : 0); + while (--n > 0) transaction.params.mandatoryKeys.push(generateHex(128)); + while (--m > 0) transaction.params.optionalKeys.push(generateHex(128)); + } else if (transaction.module === MODULE_DPOS) { + transaction.command = COMMAND_DPOS_VOTE_DELEGATE; + containAssets = paramsTransactionTypeVoteDelegate; + avgTxSize = 130; + } else if ( + transaction.module === MODULE_TOKEN && + transaction.command === COMMAND_TOKEN_TRANSFER + ) { + avgTxSize = 130; + } + + transaction.size = avgTxSize; + transaction.minFee = nameFee + avgTxSize * 10 ** 3; + transaction.fee = String( + transaction.minFee + Math.round(Math.random() * transaction.minFee * 5), + ); + Object.keys(transaction.params).forEach(key => { + if (!containAssets.includes(key)) delete transaction.params[key]; + }); }); - }); - return data.transactions; - }); + return data.transactions; + }); module.exports = txMocker; diff --git a/services/fee-estimator/tests/blockGenerator/generateMockData.js b/services/fee-estimator/tests/blockGenerator/generateMockData.js index 2b04bb3eb..3242a6590 100644 --- a/services/fee-estimator/tests/blockGenerator/generateMockData.js +++ b/services/fee-estimator/tests/blockGenerator/generateMockData.js @@ -18,14 +18,12 @@ const fs = require('fs'); const path = require('path'); const blockMocker = require('./createBlocks'); -const generateHex = (size) => { +const generateHex = size => { let resultHex = ''; const characters = 'abcdef0123456789'; for (let i = 0; i < size; i++) { - resultHex += characters.charAt( - Math.floor(Math.random() * characters.length), - ); + resultHex += characters.charAt(Math.floor(Math.random() * characters.length)); } return resultHex; diff --git a/services/fee-estimator/tests/blockGenerator/highTraffic.json b/services/fee-estimator/tests/blockGenerator/highTraffic.json index 19509bff7..1ec3e2a0c 100644 --- a/services/fee-estimator/tests/blockGenerator/highTraffic.json +++ b/services/fee-estimator/tests/blockGenerator/highTraffic.json @@ -160,9 +160,7 @@ "+ea0420df3afb0788ce102a5c3910110834db8a16fcec630bdc41ece23c81e533", "1aa7cf08cf998d3c16ad04b8559ddb32e3c2978896d038e4af6d4bcbf09461967d5d92b85827d12904ddfb8aa77c279716b7bcc150e5702a2c48074334c84b86" ], - "optionalKeys": [ - "+2999fedba8fe5737551f1c537a63c7f3864aee273116b1d78e2776488dfad779" - ], + "optionalKeys": ["+2999fedba8fe5737551f1c537a63c7f3864aee273116b1d78e2776488dfad779"], "numberOfSignatures": 2 }, "signatures": [ @@ -263,9 +261,7 @@ "+a95ac15221c722e8d351970fb3c4a009ba38936d1a8fe15e4a092e4550400dd6", "07f012fecf8337ff564bed793fc8b85fd0e3cc2978eaa67e1172cead412bcf243f905ae7234455b273c4865b8b3d06b7eb6f927f36444cdfd8c42b60a1cebcec" ], - "optionalKeys": [ - "+5202dc644d5d50c8e2ac808fec6e5f870ef3f9315db8fc1d17b3de517e26cc1a" - ], + "optionalKeys": ["+5202dc644d5d50c8e2ac808fec6e5f870ef3f9315db8fc1d17b3de517e26cc1a"], "numberOfSignatures": 2 }, "signatures": [ @@ -299,9 +295,7 @@ "senderPublicKey": "04c48d67924eac511eb331784792397e9c59a499bfffa7d9d9e5fc9a2e5baac0", "nonce": "918", "params": { - "mandatoryKeys": [ - "+cff08eb4673b87e4f963e5fc3d43f73897f9e9e1c6efb65299c9ac925f3e88e8" - ], + "mandatoryKeys": ["+cff08eb4673b87e4f963e5fc3d43f73897f9e9e1c6efb65299c9ac925f3e88e8"], "optionalKeys": [ "+1c86f3222c1a9af4a83f75fb2cb6c22d611bc10d02c708b9939692f98c807b48", "b2d94683d6cf5fb8165082ac1fb414abbab1d665fa309965fc27478d05596e8e1e2bc63841bf8fcd84aba03033733da4924cc614d82ba752c4d8d7acfb3e9a0a" @@ -583,9 +577,7 @@ "senderPublicKey": "e90aa4fcfee7c7d6c5a30752369bc425d0f697a6b7d310dcb6c5678e39fcafea", "nonce": "228", "params": { - "mandatoryKeys": [ - "+17ea1e7b0e28829f069e06fa4c3356012ca89f224649866b9b503cd100c1a0bb" - ], + "mandatoryKeys": ["+17ea1e7b0e28829f069e06fa4c3356012ca89f224649866b9b503cd100c1a0bb"], "optionalKeys": [ "+8a63c3cc32d87941fab2a64cff98c18f814b51558a6f372075f3d1eb71d01810", "a22c1902dd79e9fc8b1974c8cb9f77386f6dd606ba6fae247fca5ea9524aafbc365df9f514f1918d66d2b82ab67dc21a436923c07199c64ec83547ba87bafc28" @@ -678,9 +670,7 @@ "senderPublicKey": "2703231ff743fe32056d878f34cc17a57044c4ef7b4e434e3dc2f4a72d3c372d", "nonce": "993", "params": { - "mandatoryKeys": [ - "+8d2cdeea12d8dc4e6c9c39631d3949ece34058a75d5acd5b7f681b7420075dfe" - ], + "mandatoryKeys": ["+8d2cdeea12d8dc4e6c9c39631d3949ece34058a75d5acd5b7f681b7420075dfe"], "optionalKeys": [ "+9d70cff45b7a83569cf1f657c92122d84409d8529be445221ce68146f453e5ef", "a6878503ba667424b8d018f45ae5a13399cf44899b543d1f4d4448b24ccacf730fe6ceedeb76855488823ebe946b0471bc353f13d9da802abb08d788b7b0fb66", @@ -719,9 +709,7 @@ "senderPublicKey": "d866e76a62b5c4acc45edd2d9310546895d05eb2628a01faf34dd8c73f37404c", "nonce": "788", "params": { - "mandatoryKeys": [ - "+764d61255959cae19185099d702c0af63cc8dc79c3e98b012fad2238f42fcd70" - ], + "mandatoryKeys": ["+764d61255959cae19185099d702c0af63cc8dc79c3e98b012fad2238f42fcd70"], "optionalKeys": [ "+21734acc5703d9018be6243f321aa542f426b8da2574c5be4138caeb358cce6c", "ebeb7819c80d62f11864874f04fbd2eac45a24d75a320bc61196388b9d7542ea01bfb45cdb56c201d139387e7a22e370041e3c10a8d6fc76869a92e333800034", @@ -836,12 +824,8 @@ "senderPublicKey": "1464062d965be0fe534aa2af334521d42945b9f443fafda87da63e1c24941be4", "nonce": "845", "params": { - "mandatoryKeys": [ - "+664aff3c4748cfb02f6384e7be47b69b1994076ff9d382d35a8b7b9a9d9cc528" - ], - "optionalKeys": [ - "+48ef06f2afdc0d05a618a556aa9f5a8a6c1a6db21f573ac061f1d18246ff4b11" - ], + "mandatoryKeys": ["+664aff3c4748cfb02f6384e7be47b69b1994076ff9d382d35a8b7b9a9d9cc528"], + "optionalKeys": ["+48ef06f2afdc0d05a618a556aa9f5a8a6c1a6db21f573ac061f1d18246ff4b11"], "numberOfSignatures": 1 }, "signatures": [ @@ -858,9 +842,7 @@ "senderPublicKey": "83722b7ad660dabb3cbb7ae302e6e3023c55c2767297209d83852aed50539f09", "nonce": "475", "params": { - "mandatoryKeys": [ - "+5e87a00c15697dbd579350b62114c70cb17b479218d10dd246d367201e2958cc" - ], + "mandatoryKeys": ["+5e87a00c15697dbd579350b62114c70cb17b479218d10dd246d367201e2958cc"], "optionalKeys": [ "+1184151f795bfeff11de099864a9e70d19461f177de31a9bca3014086cec683a", "c91c1e1566f9e2adaf8544bcd9962ab464575916e86b7f8326200d479a22321dc584cdda5b74a48dff68b41b1dc114a24a462c7358bb9b69212c2df71655b17d", @@ -904,9 +886,7 @@ "senderPublicKey": "c3c2e87df0cec5f94b7e05be6040f5b31b410deb408ed2a2e26f65b612f0dc4a", "nonce": "219", "params": { - "mandatoryKeys": [ - "+20fcd8905f9a3871f2d0509689a2806f22110efcdb6dd59a2cad7619df86168c" - ], + "mandatoryKeys": ["+20fcd8905f9a3871f2d0509689a2806f22110efcdb6dd59a2cad7619df86168c"], "optionalKeys": [ "+1c72ba4bd89f79dbbc41cac83edd04dc81b2e807c71a7b3c2de26da1afd8b201", "cb5e428b39ea1d0b43a4c15475599d4a43e2ed888806e3e80c06cfb4fc102a28a4f43bf99181de8b2a1a9c0d5c88abe881cd52b973e6734b8a660d385cf36bfe", @@ -1035,9 +1015,7 @@ "c4ef584a2357e0e7050dd62b36d3c086bc9d408c3e90ff6fef3206e3f6ab4ef9b8032ef55b946a408015bd84b7af9a87ac4745dceed387f3da8f9936bf596949", "9f5fd08b7b6ec2008686751d4e8e9b616d3444cf773f287011670a058e6f93a3e4c86942a31048b2df94625ec1296d8f7ca3030c2b1913b1458dbccd4c99005e" ], - "optionalKeys": [ - "+056e3232a25e853c590a357d15eb38351da128285f924dd4a0cf5a590d337e15" - ], + "optionalKeys": ["+056e3232a25e853c590a357d15eb38351da128285f924dd4a0cf5a590d337e15"], "numberOfSignatures": 4 }, "signatures": [ @@ -1483,9 +1461,7 @@ "d656a221ede19d9812e37cb0078da76722a52a9b4b7db5a79a35c769fd14629a25fcd205cb6fe27ebdb51bb075c09f8b9cad931dfd6ffa5487d9ea90645052cf", "f336868f62d90fb9485f8bfe2ff8bfad16123b85b296f8dd48d55e2d87b84fb519b502671be24a58b5b7762d6ce5bb274bb8277cc790b91c96438381652bca7f" ], - "optionalKeys": [ - "+bbac4f312bc28a279b5d496f05e74b807098d578a5213f61defa36f32fb1df1c" - ], + "optionalKeys": ["+bbac4f312bc28a279b5d496f05e74b807098d578a5213f61defa36f32fb1df1c"], "numberOfSignatures": 3 }, "signatures": [ @@ -1739,9 +1715,7 @@ "b914450294fc25be01caa64816f267c2cbb9caebf864486d9a8d97eb063b63d4f55e7e0e3e75126b7b050fe011e7bc80995a83d307fea246b1ba22c7a557cf08", "a5b1092b20f36419c431de3c158ae3757cc09ddb9dcbf6c9ec2055a80518e85c0e39beca876cd9e6015d4316fabca66e18677a68f0eed5405ea6040283d1fbdc" ], - "optionalKeys": [ - "+440e625cb3809db35e04a97261756ca86b4f43a6a5b628ec1545c3275dc210d5" - ], + "optionalKeys": ["+440e625cb3809db35e04a97261756ca86b4f43a6a5b628ec1545c3275dc210d5"], "numberOfSignatures": 4 }, "signatures": [ @@ -1822,12 +1796,8 @@ "senderPublicKey": "3cfbc7f0534236cdee5357c8012c6fb97e1b78fd3f0e8b6732e71f047f3893d7", "nonce": "183", "params": { - "mandatoryKeys": [ - "+cefe42fc7f62ebf496f990e54342e1e27cc3efc15355c43383dfcc5fcf1e1574" - ], - "optionalKeys": [ - "+942ebfb6750fe03dd643d8a9b0d50a5ec526f50734828a952a818f2c7a4b831d" - ], + "mandatoryKeys": ["+cefe42fc7f62ebf496f990e54342e1e27cc3efc15355c43383dfcc5fcf1e1574"], + "optionalKeys": ["+942ebfb6750fe03dd643d8a9b0d50a5ec526f50734828a952a818f2c7a4b831d"], "numberOfSignatures": 1 }, "signatures": [ @@ -1849,9 +1819,7 @@ "d9bd0860715d2f2e7d20287dedde4746c8fe954ae750e5832c3babf62281ca7339ba0a6fdc6d647b138667d57f2e50a0569c99c6197d34dddfcaa12d2c2b51c6", "4977efc33e2fc74be4a6377326d287d5ccc878a937dbc393d4076fa656b642a963693c48299ceb5090f711759ea06e7e4ea330b510c047d9a2e1ac69663ab476" ], - "optionalKeys": [ - "+bc4c7551cf778e839e6db282b6ff48ef9d6ce4b42acd932f7a254f2aefa1da4c" - ], + "optionalKeys": ["+bc4c7551cf778e839e6db282b6ff48ef9d6ce4b42acd932f7a254f2aefa1da4c"], "numberOfSignatures": 3 }, "signatures": [ @@ -2018,12 +1986,8 @@ "senderPublicKey": "cc215a5f65ed841afa9afdb16e26c5d0d13b61a4904da05bbf0c7a531548bb7b", "nonce": "845", "params": { - "mandatoryKeys": [ - "+1b0349fcd56de016106055889dec4f50eea85176860a55f1acf364a1fb1aa734" - ], - "optionalKeys": [ - "+9906e963ae29d45ee2ede79ca31039a04fc303ff301e10aac5ca00b3aafa9826" - ], + "mandatoryKeys": ["+1b0349fcd56de016106055889dec4f50eea85176860a55f1acf364a1fb1aa734"], + "optionalKeys": ["+9906e963ae29d45ee2ede79ca31039a04fc303ff301e10aac5ca00b3aafa9826"], "numberOfSignatures": 1 }, "signatures": [ @@ -2061,9 +2025,7 @@ "+676a27209a92999a7fcfa30cfc03e81c91c249f6fc77f71526d37af9e78eb26a", "cd359c24be7398b9caae32b682e313c7984b3fb85a504e669759c5a7b8f26d7e6f99d87e68cbcf7d20841cb27187da3e6f091f6776fde7f92a4226ab8c006324" ], - "optionalKeys": [ - "+20e01732978d5f2ab4e6b197408724ad2973a25fb235f112cef1bd2971eb4a81" - ], + "optionalKeys": ["+20e01732978d5f2ab4e6b197408724ad2973a25fb235f112cef1bd2971eb4a81"], "numberOfSignatures": 2 }, "signatures": [ @@ -2118,9 +2080,7 @@ "senderPublicKey": "2aa0be19ee2c7fc1c6e20baecff904bcadbf4f9bf3da17d0f7be59359e4aeb99", "nonce": "760", "params": { - "mandatoryKeys": [ - "+bfecf3e093df998c1bfac1b8b224f3078b2d1927cf53a275be26fbf62812fdce" - ], + "mandatoryKeys": ["+bfecf3e093df998c1bfac1b8b224f3078b2d1927cf53a275be26fbf62812fdce"], "optionalKeys": [ "+48207caeed1eaea7a28ad29dde914f882f221c6b8108843c1e3dca8c75f2bae3", "6197944d791d203ce7be9d4b507c23226b2d82d900e7e811a9f31f551cad779f7b19d555b81bfbd9f5514d5ac1a6b11d899ea741853dabd57a6f82a54ab8078c", @@ -2219,9 +2179,7 @@ "2ddb1e9d892552abf07e30d9833086e5857b60522e30564f6ad3b3bb3016273a8d389caf5d9928d9f17a02774410a7d3b22aa40ab99a9e2a5562e4172ead538e", "24fdd2cad9718924dc32e9c0c0d8b241664d9068bd25eafe346bdb396242fa389fd7338f1bdfa2f71f1ebf8a3a6555a893678472bd7f3c3ab989c2300ef2fbcd" ], - "optionalKeys": [ - "+02e035137bf6159c1d695d9c90a3dfa49d83371542cb00b67fccba33321b721e" - ], + "optionalKeys": ["+02e035137bf6159c1d695d9c90a3dfa49d83371542cb00b67fccba33321b721e"], "numberOfSignatures": 3 }, "signatures": [ @@ -2238,12 +2196,8 @@ "senderPublicKey": "64e5aeec835b84c1b2d650ed953c96c15e326621206d32a47135f87e1371ff66", "nonce": "612", "params": { - "mandatoryKeys": [ - "+a631deb00666b92809eda6f553ff9d9ce0ed4983ac648616122b7d2496272773" - ], - "optionalKeys": [ - "+cf2a749be341073ed4caad3e2aba432141ed17ca01d69ebe889488d8015230d5" - ], + "mandatoryKeys": ["+a631deb00666b92809eda6f553ff9d9ce0ed4983ac648616122b7d2496272773"], + "optionalKeys": ["+cf2a749be341073ed4caad3e2aba432141ed17ca01d69ebe889488d8015230d5"], "numberOfSignatures": 1 }, "signatures": [ @@ -2781,12 +2735,8 @@ "senderPublicKey": "af1ec6f076e7232bd08e6433b7f6e9b0ad059c23e595196aa3fb8043163c3cb6", "nonce": "665", "params": { - "mandatoryKeys": [ - "+75c4ce82c9c917ec8a59c9f21f22be8fbc766be3eb56b9f54a9244586f8b9809" - ], - "optionalKeys": [ - "+8f2232b07dd1726e4d127f1b82de82448a9bc128ebc293b38d4715a0684bfd44" - ], + "mandatoryKeys": ["+75c4ce82c9c917ec8a59c9f21f22be8fbc766be3eb56b9f54a9244586f8b9809"], + "optionalKeys": ["+8f2232b07dd1726e4d127f1b82de82448a9bc128ebc293b38d4715a0684bfd44"], "numberOfSignatures": 1 }, "signatures": [ @@ -2933,9 +2883,7 @@ "senderPublicKey": "4aac89ffab0b5151e01d9fa61e044bbf7387fc1ca3001547c4c94d6439b23540", "nonce": "156", "params": { - "mandatoryKeys": [ - "+f317266c8a98500ede7f36714506fa400349239b81248b3c55fd86b5dd110b5f" - ], + "mandatoryKeys": ["+f317266c8a98500ede7f36714506fa400349239b81248b3c55fd86b5dd110b5f"], "optionalKeys": [ "+54aece466350fd1b701edf64280696867b31b00b2edd3f498b47a20c3f15ece7", "44ade91ce81ae502cf1fcc71e7cc4111cd0ea57d9b15c8e0ba24d128f393fd921ca2082d8078f0db7dd1dd39b269e2e4b43258f997126880eb96d9c7aa97c53c" @@ -3066,9 +3014,7 @@ "+ac0cda37cf5c3b5e506211378bcbee9ab015997821190c3a92bfec2dd03f319b", "eb3e72a4bd62de25899738174d351d190fbe2b4f9978e9cdd28970b62874f8cea790516e35f98930a9f167452afefc5445914d86698fcb46b07d1f2e57bac039" ], - "optionalKeys": [ - "+65c2616c5812e2ca943b21b40d98ab1f21350c6f4d3ed249e0e0932f39090c52" - ], + "optionalKeys": ["+65c2616c5812e2ca943b21b40d98ab1f21350c6f4d3ed249e0e0932f39090c52"], "numberOfSignatures": 2 }, "signatures": [ @@ -3219,9 +3165,7 @@ "senderPublicKey": "cf6b2d2264ff226e5fa9dc3496cd456cfc42c3ebbbf8d85a5f91e7a01d37dc8e", "nonce": "437", "params": { - "mandatoryKeys": [ - "+5bcafd6e9d823b387ba2e9305cefca50f85794259088cecfc7bb24ca6a783fca" - ], + "mandatoryKeys": ["+5bcafd6e9d823b387ba2e9305cefca50f85794259088cecfc7bb24ca6a783fca"], "optionalKeys": [ "+84d496d87a81bf7ccaa13eea9dd9975b0c7e295f3e7836c0b0e0bc0685818dd8", "0e53eae8e16bf39f676b75a9909f613b59883b9db1b71e76feb98a49c8bf588a020d90c2bc206a1cb6f896cc08fdb8a4c356fc3d3e2d6704422ce04b8f5d123a", @@ -3243,9 +3187,7 @@ "senderPublicKey": "251d76ce93bcda64f3d0129f868899bc3265690547c56b176ed9f61b2592a878", "nonce": "676", "params": { - "mandatoryKeys": [ - "+59438bc516125489791fbbd7c6f28e1f34a0a45830b76ed090204cbcbdbab9dc" - ], + "mandatoryKeys": ["+59438bc516125489791fbbd7c6f28e1f34a0a45830b76ed090204cbcbdbab9dc"], "optionalKeys": [ "+6a6fc253873ebfb456cddf5e5e82301a794b36926e74348dc729e2ec2a932304", "269ad2893a41b5b635ff6468e3eef08d0520b7b16381f171c1114c918b4d6ed4a239c3ec90927b54d4b69ba3c96fd6483227a9c657042b839d3ec63571f4b081", @@ -3307,12 +3249,8 @@ "senderPublicKey": "eeec2eb5fc1d47ceebe4fa1a082f21b36619417b004394985d97c87969bceda1", "nonce": "26", "params": { - "mandatoryKeys": [ - "+d078b3794ffc2cdb9626f7f530a0ff83b01845b37e20dad7ce74afe089dc779c" - ], - "optionalKeys": [ - "+819cce7ee08d195a0a9613a998d03fb207a29ea6a0be24d9fc5c22a98cfd69c6" - ], + "mandatoryKeys": ["+d078b3794ffc2cdb9626f7f530a0ff83b01845b37e20dad7ce74afe089dc779c"], + "optionalKeys": ["+819cce7ee08d195a0a9613a998d03fb207a29ea6a0be24d9fc5c22a98cfd69c6"], "numberOfSignatures": 0 }, "signatures": [ @@ -3439,12 +3377,8 @@ "senderPublicKey": "2acbfa8829d1e20f62c017eb022d84aa744988d89f136f1b2c55ccba1bac3e1c", "nonce": "315", "params": { - "mandatoryKeys": [ - "+5d8e2d4052a81e90270cae0006d585a51fe8dccbba66eba6ba2d8a0b45c56b2d" - ], - "optionalKeys": [ - "+e9c03b715a186842f1ec186b696173f04a85229994bbb0152639fc1f722e7c8a" - ], + "mandatoryKeys": ["+5d8e2d4052a81e90270cae0006d585a51fe8dccbba66eba6ba2d8a0b45c56b2d"], + "optionalKeys": ["+e9c03b715a186842f1ec186b696173f04a85229994bbb0152639fc1f722e7c8a"], "numberOfSignatures": 1 }, "signatures": [ @@ -3501,9 +3435,7 @@ "senderPublicKey": "ffd77b990401130234ce870eb35d40d84043eb6d9416694fac34f5acea3cf6ec", "nonce": "236", "params": { - "mandatoryKeys": [ - "+67521448fdf6ca686d277f02ac73abb85da5d27cf619c6836bc5a8292fff494a" - ], + "mandatoryKeys": ["+67521448fdf6ca686d277f02ac73abb85da5d27cf619c6836bc5a8292fff494a"], "optionalKeys": [ "+3488ba74f5fe335ded78e0996e810acacfdc2802c19f444ef076a2380998291c", "8676771e0c2e7ddbd45e30766fcac0bff009d5df7100de114c1c763d9c9cea74bfe61043e126816d9bcb6cc0eab703a3ae0b09fbde92054d1997be2f857f6d3a", @@ -3678,9 +3610,7 @@ "e2abe980d569cc995363a4531fec7bfc7c1fbeed8217551b14b1cec4ad684b2901955ff25c11ce3ddcfbdf14ffea05b4e708b88cdab473b39b9f12d3cdb9d8a0", "274261992d6901f1040bd7e26032a7d99af2e72a71022d422696f6f6fe4c4589bdd8663554b2c2c07f4d2dddea4b297d4235053496f62bdd19fa04f4185e6d4f" ], - "optionalKeys": [ - "+c2b5bef4d91e346dcb00481478a61211635cc68e04922fb805629504269a02ec" - ], + "optionalKeys": ["+c2b5bef4d91e346dcb00481478a61211635cc68e04922fb805629504269a02ec"], "numberOfSignatures": 4 }, "signatures": [ @@ -3895,9 +3825,7 @@ "senderPublicKey": "4217a6790b921cbdd48b772b3295b36d9463bb887579271d85aa8c795a484ae4", "nonce": "69", "params": { - "mandatoryKeys": [ - "+08681a60d53e8e898ab4e80405325f8ae77c15afa5e6a722f4b22982fef3c09f" - ], + "mandatoryKeys": ["+08681a60d53e8e898ab4e80405325f8ae77c15afa5e6a722f4b22982fef3c09f"], "optionalKeys": [ "+123062d27c62d1f5b912c9cff1c8b13ea5740ca39ff5635423cae69e95280630", "712d3197bcdc9325c85e6ffb0ce656929427445dc34784cec567fbbdda21fbd2bbd8c8c021903c3792a105f2dd1bad703f9ddb0f56a2544d4c3b6a867a43fac0", @@ -3985,12 +3913,8 @@ "senderPublicKey": "5de6717ba1a21eb119b72de6ecd7b657a3a7681b1b4613ca410c5a7edc1d1673", "nonce": "349", "params": { - "mandatoryKeys": [ - "+9d41ea20fd691a466d2dd1d60191ec78206d4607bca98ebc39aa4a00482060c9" - ], - "optionalKeys": [ - "+17860fca5eac0ee0eee73992f7ea517defb504b6ea814b7fa6e54d6ab1579ef7" - ], + "mandatoryKeys": ["+9d41ea20fd691a466d2dd1d60191ec78206d4607bca98ebc39aa4a00482060c9"], + "optionalKeys": ["+17860fca5eac0ee0eee73992f7ea517defb504b6ea814b7fa6e54d6ab1579ef7"], "numberOfSignatures": 1 }, "signatures": [ @@ -4351,9 +4275,7 @@ "senderPublicKey": "1d45e8c9f87ce156bc40b1403e697a2fd525a6b9880942ed62b88649bf8e0831", "nonce": "574", "params": { - "mandatoryKeys": [ - "+f568a4636777d553622c62876706531c475491b5a33bf4950adfe27e2f8cea1b" - ], + "mandatoryKeys": ["+f568a4636777d553622c62876706531c475491b5a33bf4950adfe27e2f8cea1b"], "optionalKeys": [ "+3ca3f7b23162f74e9e1a1f50cce48087574306380e23f787ef34dcf482e10976", "55a86d08a858bf866e81d10dfb71be60631e98bbbfe3915351ba2bb95ecb187596768cd113ae12a6015e7b86abed0e52d2e81026f2493756cc0deb48a60b6ddf", @@ -4444,9 +4366,7 @@ "d31d4a69cf6b17d938192e0113ce9e4086aed13463e4f8cd5eb9c503767e3dbacc1e93ae1eb9a60c46c3c2bb3e35fea86da549203988b4b777e31b51202f4b07", "60a34ca020261544c8daf3aa48ecf1b6cb753eb5e15c25e4102db745c2e7993c26d09a6470ee25ad15e8d76e223a4f7949525d8ab8e69038c8fecd7b6fa5dd73" ], - "optionalKeys": [ - "+3f8d36d00cf7a61ed4d9f71380b96c492cd4e66e304d201ec18cc60cfb1b278b" - ], + "optionalKeys": ["+3f8d36d00cf7a61ed4d9f71380b96c492cd4e66e304d201ec18cc60cfb1b278b"], "numberOfSignatures": 3 }, "signatures": [ @@ -4463,9 +4383,7 @@ "senderPublicKey": "e091f992ee508af0997e1a63f9d34eda508c80e5a7b02910c74ea145c5776748", "nonce": "88", "params": { - "mandatoryKeys": [ - "+f27635b610658dee94212d72b03c307e5b28369df343b28c092487a93333bbac" - ], + "mandatoryKeys": ["+f27635b610658dee94212d72b03c307e5b28369df343b28c092487a93333bbac"], "optionalKeys": [ "+46113d8434c51308980a79ba0e8b3f86e91733c3b2d464fd4de9fee0fd8dd8ba", "89b3ef0e009a0752b0aab0586f6350c2aa63637e3cebe19c75040f2e2e2f24e9e5fc82ca4508580ca3ce6dbe29843c5d41391c16e5098624c92cf409033413bb", @@ -4620,9 +4538,7 @@ "senderPublicKey": "6e86662b9ce503b2f4aead068c2b0221a6e1fa28e79c599ea5f03e07d4adb200", "nonce": "65", "params": { - "mandatoryKeys": [ - "+ee5707b7064d2398c7fced63350038bc8cbcd8b6481078e02b518319fa9607d7" - ], + "mandatoryKeys": ["+ee5707b7064d2398c7fced63350038bc8cbcd8b6481078e02b518319fa9607d7"], "optionalKeys": [ "+29faf9aa06dd0c128dd1b01f8a95454b8939235a5b94387218b14ed9310699d5", "aba98bb2c4aac22723379b6e5dd03dc2f2b0961abbfcfa7a11583b27a695ecc9a58e1b9be2216eb997340d9292950a057a420898826043fbbfe4311a78cde8e7" @@ -4643,12 +4559,8 @@ "senderPublicKey": "845a941684a9cb5b27018997e5d25ce70f9b54b4fd07e6eab34e46485c9b5065", "nonce": "937", "params": { - "mandatoryKeys": [ - "+40c632c86f030b4addd97dbf8a4dc4ddc2298249617878ceabde772a8283cd43" - ], - "optionalKeys": [ - "+a9a102fb7ae2d98f02abd4ea72b22dad7639cfa5f5304987cc0a51b770eb9068" - ], + "mandatoryKeys": ["+40c632c86f030b4addd97dbf8a4dc4ddc2298249617878ceabde772a8283cd43"], + "optionalKeys": ["+a9a102fb7ae2d98f02abd4ea72b22dad7639cfa5f5304987cc0a51b770eb9068"], "numberOfSignatures": 1 }, "signatures": [ @@ -4766,12 +4678,8 @@ "senderPublicKey": "4d3686b792f74fb216d5d6609d9ff3139b2d41735f556aa1dde8a701838c5edd", "nonce": "97", "params": { - "mandatoryKeys": [ - "+c3e43b3ae9c429a351d178a88076131646961a76df6d9d0098bca5dbed7fc40f" - ], - "optionalKeys": [ - "+8d366690adc43b0c1157c26eecbdecd35ab4be7aa9b8d619848b996a1ef669f2" - ], + "mandatoryKeys": ["+c3e43b3ae9c429a351d178a88076131646961a76df6d9d0098bca5dbed7fc40f"], + "optionalKeys": ["+8d366690adc43b0c1157c26eecbdecd35ab4be7aa9b8d619848b996a1ef669f2"], "numberOfSignatures": 1 }, "signatures": [ @@ -4811,9 +4719,7 @@ "9729f49d978d9dcc507931e9f018cd02f91abb9d5cd6b7b2ef1e65d596b657cbf58cc845dac2af84469359971ac4d53e39a250227c6fcb3e91e99da4a941c0fa", "4c5cdee10f00d7a9be8d95e0bbf56801dc0c6a865f6fc648a3e781df4afd862018ef2b4dab34a15bde11383a55d0a546fb7318f5c40d282486689e4405c42a0f" ], - "optionalKeys": [ - "+73dbffea23a1ce8b9a384a4c109fd6aa2ea402ef36f6f3fcfef312e94c26c3d2" - ], + "optionalKeys": ["+73dbffea23a1ce8b9a384a4c109fd6aa2ea402ef36f6f3fcfef312e94c26c3d2"], "numberOfSignatures": 4 }, "signatures": [ @@ -4908,12 +4814,8 @@ "senderPublicKey": "3dfed32e2d65de4af3f3234cadbc721def46ca4dd80ea57447dcffa6d0246dde", "nonce": "160", "params": { - "mandatoryKeys": [ - "+b4159af9af148a9f1dea4b77c68333a8f12643df361f9339e6555139b9132862" - ], - "optionalKeys": [ - "+74ba2c8181bf3f34d460c5f3443dd41f372c716357ff9de7f5d1f6eec83890da" - ], + "mandatoryKeys": ["+b4159af9af148a9f1dea4b77c68333a8f12643df361f9339e6555139b9132862"], + "optionalKeys": ["+74ba2c8181bf3f34d460c5f3443dd41f372c716357ff9de7f5d1f6eec83890da"], "numberOfSignatures": 1 }, "signatures": [ @@ -4951,12 +4853,8 @@ "senderPublicKey": "3412303da9d7bb8d759fe31a6057fafb7e5c21a6bf7d3fd72ab045b05d03e339", "nonce": "623", "params": { - "mandatoryKeys": [ - "+b200c441e1a873f5e1b84376281351491476bd5dbe56d29551487cc431917944" - ], - "optionalKeys": [ - "+54d715dc369a0f351625a5cbdd1f55d2c8ae4ec4893dad5a049e638c8cbf964b" - ], + "mandatoryKeys": ["+b200c441e1a873f5e1b84376281351491476bd5dbe56d29551487cc431917944"], + "optionalKeys": ["+54d715dc369a0f351625a5cbdd1f55d2c8ae4ec4893dad5a049e638c8cbf964b"], "numberOfSignatures": 1 }, "signatures": [ @@ -5009,12 +4907,8 @@ "senderPublicKey": "bbf92d6736c2a68076d8b8167e9371db33538f4976bdd95d4f85c1d12a12d9b9", "nonce": "962", "params": { - "mandatoryKeys": [ - "+9548af937cecc984efc3f7dbd7012d65bc0d16cd532ef9061540596dac9162d5" - ], - "optionalKeys": [ - "+1719042f04de614fcfc96f8300c51d547fcc48cc3ccc94ab007bca62ec4d5921" - ], + "mandatoryKeys": ["+9548af937cecc984efc3f7dbd7012d65bc0d16cd532ef9061540596dac9162d5"], + "optionalKeys": ["+1719042f04de614fcfc96f8300c51d547fcc48cc3ccc94ab007bca62ec4d5921"], "numberOfSignatures": 0 }, "signatures": [ @@ -5324,9 +5218,7 @@ "b4694c4e0081e95b844505bad7e2154c177da0a8d3333b78118305e276ac4cac76eef6f646863d8592d06a591c112806d6089ff3ba8faa879a0007af70221a4a", "5bb7a774fc11ade0f9297ee2a6535a72e1c62c7b0d02be63bd0c2dda457a5aa5ebe9af5809791ae5c2edad211fc464c46b924862d206b71cda73f4f58f7a9987" ], - "optionalKeys": [ - "+299b1814469e4443c25fa8597bbb4686e608368ca9df4bfab7305bab9c227248" - ], + "optionalKeys": ["+299b1814469e4443c25fa8597bbb4686e608368ca9df4bfab7305bab9c227248"], "numberOfSignatures": 3 }, "signatures": [ @@ -5455,9 +5347,7 @@ "senderPublicKey": "da318fd8f2aed18826465fd8aa753d14cc2b0ce88b99adf1e2892c5d20874663", "nonce": "886", "params": { - "mandatoryKeys": [ - "+b2fbcdb4bcbe7828e93aa80c663c98a7f52312cf5471c83ccb5f9f9f07519f2c" - ], + "mandatoryKeys": ["+b2fbcdb4bcbe7828e93aa80c663c98a7f52312cf5471c83ccb5f9f9f07519f2c"], "optionalKeys": [ "+9e3971d4711c2989622e3b66377515459b227049b76f19dccad63db5ce7eb66f", "abcc2492885dc85042f1b1c8002f86368be278be7f5eae8ac67cfd29a11746646dc968b4fe76fa693c089f1f80216a008ec5109579250fb70f8372aad1f24729", @@ -5555,9 +5445,7 @@ "senderPublicKey": "d1d8148fff89db2173da48905bbfdc01bcb24bb13cb8667c82b26717c37a3b7c", "nonce": "461", "params": { - "mandatoryKeys": [ - "+7bdc0e664089dfa06b90010e53c5296508bee499a286910249b405fbd13622ec" - ], + "mandatoryKeys": ["+7bdc0e664089dfa06b90010e53c5296508bee499a286910249b405fbd13622ec"], "optionalKeys": [ "+77ea618d903cb4af36e85b76ccafa714b517da9dc9ad5bb42adb08ef60a4ab37", "669c00a9613d5869dbe051e97a0e4d31d47e5139b4679efc198895b750dfc317afa65e7036ed1cc4e8c12c90c27d3ad9a617adaa9c688589ee258deef2aef500", @@ -5627,9 +5515,7 @@ "+b7c723cfb65ec44bed654906dd1c49ad3d6932b8d8bda6d9869f25a5fb4b766a", "b742278ba23a591a23a1eff3ff3d047de7594d3e5a27f2887a620d34e77995e526ec9c499f5b3b42471a160dfdc244f3a6dc94580b3faa19975c6b5a8c92bd9b" ], - "optionalKeys": [ - "+ded6388385ee11862971e0cf1888763b3a0f111867a502f4afca2f65ceeab7b4" - ], + "optionalKeys": ["+ded6388385ee11862971e0cf1888763b3a0f111867a502f4afca2f65ceeab7b4"], "numberOfSignatures": 2 }, "signatures": [ @@ -5710,9 +5596,7 @@ "3e1e5bc765b893f5867a0f644c3cabc4adf25d6bfe000cfac975d7faedc6e2eec56183a56a8fb6acc000a49d4c3ffc0de77639e2d87fde2218547801162a1b4b", "caf7e0f97c2224ff10c156eec0a720fa296ec1322554da8a5f7764c3301aa8fe0fa75a5839cf0e7c304af5b4bae31e61c97c2d7df027157dfb2f0141f4445b1a" ], - "optionalKeys": [ - "+5fed945376b7a5c2c78a7d4a16b481668445a2a603ef851384c944c837443f9f" - ], + "optionalKeys": ["+5fed945376b7a5c2c78a7d4a16b481668445a2a603ef851384c944c837443f9f"], "numberOfSignatures": 3 }, "signatures": [ @@ -5729,9 +5613,7 @@ "senderPublicKey": "9b3885792402c3922a560b664143cd4b5cce5daf69333410e4ffc66f8e7822ed", "nonce": "925", "params": { - "mandatoryKeys": [ - "+b1d4d0750cb4127b4565ac9a1dde9c984cd75724f0dd0ade7b12f8646f71254b" - ], + "mandatoryKeys": ["+b1d4d0750cb4127b4565ac9a1dde9c984cd75724f0dd0ade7b12f8646f71254b"], "optionalKeys": [ "+82cbf92b3b4e847c72944a8fa37a8646520d45943ef40da066df3b5e3e533ae2", "1120f64d0649ae5eb96bb658c8d1e316d08b39d9509fe0186b9f1c15ea5d3f10669f78bfcfc8a29c0110abef37443f03aaa6914b757dce15aafd785bb58a1378", @@ -5797,9 +5679,7 @@ "215c4979ea7021f441d11f09153c93443badc0fc15e60d651f8270e1cc0d71ea0587f4ed07fdbd8739aee7b668873ead10e4c6bcb2c333fa5276a755aeffaab8", "d861c66d953c4c77543d92300523a3cb24ccf244addb1af5faeeaccd757dfb04f9dbd8087d73faf66f0197a0b758de8590666b48698f615a61dbc4c535c4c7aa" ], - "optionalKeys": [ - "+e1bb1716717e928b450ca1ce11b3a9450ce8956ee9b72178823a3098680579c5" - ], + "optionalKeys": ["+e1bb1716717e928b450ca1ce11b3a9450ce8956ee9b72178823a3098680579c5"], "numberOfSignatures": 3 }, "signatures": [ @@ -5910,9 +5790,7 @@ "9f17f968133354060f3b09986a0e51c9e3572e6d490957af702ac6f374ad61d478031a23ec128dc38826fed79927ab9af7d23e9c86c8ee2680b4ba7b6309b80f", "4d7676f889a0582a4ba279a8b0e19fcaec9ade754f32764cb580ce18001aa005590ddf54fb1437bf6f63630e80edde4780a6612510b97fc08a4a063cf966bfea" ], - "optionalKeys": [ - "+85fa66e379a06c5048759e0a64dd39dcc745227e226baccd22c98c83bb82f0b6" - ], + "optionalKeys": ["+85fa66e379a06c5048759e0a64dd39dcc745227e226baccd22c98c83bb82f0b6"], "numberOfSignatures": 4 }, "signatures": [ @@ -5963,9 +5841,7 @@ "senderPublicKey": "a15700c309ef6aae12a89d5a6eeb45ed55245c3cebe2664679897d3a92537615", "nonce": "270", "params": { - "mandatoryKeys": [ - "+f3b58e00b3a0b00d3a414e6ed1e481e78c13308e6ad9ac62ce03447ebd7af51a" - ], + "mandatoryKeys": ["+f3b58e00b3a0b00d3a414e6ed1e481e78c13308e6ad9ac62ce03447ebd7af51a"], "optionalKeys": [ "+0e5d21ff6e3f7fb2bebc441828382493a208c2a7cdbb8b9f4ce98dd963fd41ef", "f6b014306435bb9d11f61016df5e3c965878c409b70ace19226b72257b0cbd1e1b32b4faf9e3b0ef06795e4e147ce978a84837e78337621d96066e0eabee5afa", @@ -6169,12 +6045,8 @@ "senderPublicKey": "c36e1fa306e8d0ddaf1cbd04bb2e07529ff4cd4434edb102acbec5c54b86e44b", "nonce": "691", "params": { - "mandatoryKeys": [ - "+5036291a80212f4b73a7606f23f5f4f17d1ad92bdc9182456088019475717955" - ], - "optionalKeys": [ - "+5585b99586712918d037b434d68b19f8d96ef4018665b3a708ee8ba45383cb64" - ], + "mandatoryKeys": ["+5036291a80212f4b73a7606f23f5f4f17d1ad92bdc9182456088019475717955"], + "optionalKeys": ["+5585b99586712918d037b434d68b19f8d96ef4018665b3a708ee8ba45383cb64"], "numberOfSignatures": 1 }, "signatures": [ @@ -6373,9 +6245,7 @@ "senderPublicKey": "68beee16dce89e6e739c679edbfd4e8bc976fa298afd638d3998993bdeffa0e3", "nonce": "992", "params": { - "mandatoryKeys": [ - "+796ffc64dc651967add15c464037fe4b9a126aab67f8cdc4753e7b62ef3b5187" - ], + "mandatoryKeys": ["+796ffc64dc651967add15c464037fe4b9a126aab67f8cdc4753e7b62ef3b5187"], "optionalKeys": [ "+d3b82c151911b7563163e2ca57320ad3397b8117b6cbaf57bde18a2d7d319466", "fd04ac903632816159249e439fcee1339675abcaad11070cde30d229cf16f27f947e9361a480e29ccbd0642fa03c07f484917b32837a5fdcd7c6636a32dda103", @@ -6622,9 +6492,7 @@ "+5ddb8213ba7a8d89aa22e32b4f69d9cef777928ab9feccd5ffe5029657e493c5", "641304f1f181dd1874a091f781012eb528ed06096a6297c65f59c5dc2d34dccf4c0ea8eadc9b881859077b2cf268abad87c39292499e0a3e3456dd5eef55411a" ], - "optionalKeys": [ - "+9fb02e1993cd6aa904557e48de39eefb7bfbc10c652509a5a48e70359f895bcb" - ], + "optionalKeys": ["+9fb02e1993cd6aa904557e48de39eefb7bfbc10c652509a5a48e70359f895bcb"], "numberOfSignatures": 2 }, "signatures": [ @@ -6755,9 +6623,7 @@ "senderPublicKey": "d958ce1fe6baa95eb797339f797453d745ea19b4a8af45a7eea643563467f8f0", "nonce": "342", "params": { - "mandatoryKeys": [ - "+145688a2404a3e2b557d22467e16ca4132464a4b003459c15f1fea10d172f3bf" - ], + "mandatoryKeys": ["+145688a2404a3e2b557d22467e16ca4132464a4b003459c15f1fea10d172f3bf"], "optionalKeys": [ "+d6bf1a31214c231d1f94de18bc3e2de95c490232ce042305bf41ce2e1e8f162c", "20c26b573a9e27992e679422498574d55d97b5682c9035acd8f117b95d7eb9ff965c920ca9e88e0c4150242d3b511224290a4779c0b62160c168f4caa2c8eef7", @@ -7008,9 +6874,7 @@ "d4a6cd390a1d213877f24cf2a6f1c5b1c3292472cf3adc24530c75f0ffa27748be189a15a991afe0bd331e0b552e5facbe8450c904ef89264bb65b5a6a4f971b", "33bf67582975f82bb6117024bfc3c2a88bef718062eb4b31b0dae903e3b796968f785a68980ba09aa0edf1af8c9d0435294ba025261d57093912c3143fc7dcec" ], - "optionalKeys": [ - "+c8513043474e40b623ef94d738b6c95d25358993a6c840164161a42e994b6c90" - ], + "optionalKeys": ["+c8513043474e40b623ef94d738b6c95d25358993a6c840164161a42e994b6c90"], "numberOfSignatures": 3 }, "signatures": [ @@ -7049,9 +6913,7 @@ "9f0fa4dd8a5f48b5c26b5e58ce7d11035a185e0856bda8c8928d06fb4fd7fb0fbe98851407d764c0eef1094062957113da055ec9f14babefd67ae660f66e0868", "35bcd7552c31a78ab4f75e4a519e2047ea4e98adc27a20c4f9e36c3dd63f5e180bfbaede83e582e0e80b0db3cab195d9dde4e556a6af673b744382adc26c4f27" ], - "optionalKeys": [ - "+a01b24577a6df427e588e5e107f645cc003c4cad21f1e129cdccaad8524e532f" - ], + "optionalKeys": ["+a01b24577a6df427e588e5e107f645cc003c4cad21f1e129cdccaad8524e532f"], "numberOfSignatures": 3 }, "signatures": [ @@ -7228,12 +7090,8 @@ "senderPublicKey": "1fa5a5b8fce4cbf87d6ab320b75b58f8692f67b3a3255a125671e4d819846865", "nonce": "843", "params": { - "mandatoryKeys": [ - "+83434b1dcd1b32e24bf1fa91c5459c0f81015b33f8c4fdf2f663e8b89243bf31" - ], - "optionalKeys": [ - "+cbe2d395ad75724d7d97513144069e7e7bf11aeea0522615321cb4acbd2f9172" - ], + "mandatoryKeys": ["+83434b1dcd1b32e24bf1fa91c5459c0f81015b33f8c4fdf2f663e8b89243bf31"], + "optionalKeys": ["+cbe2d395ad75724d7d97513144069e7e7bf11aeea0522615321cb4acbd2f9172"], "numberOfSignatures": 1 }, "signatures": [ @@ -7362,9 +7220,7 @@ "455fc92a4a1bb16022d827e20b0574d7034b8a55139330e0f740b1975f27888d438fa3103fdbe84e044ed47496413678278f0b333572d0703a52981dfe7d1471", "83a5666fa525c64de6367a4f4b3789961c55564e12ee1594b53948bddcd33bc1caadd690e3a17a620c2788c72410968f99988880f8a4a97a9b9a1e4c31b766ce" ], - "optionalKeys": [ - "+7340a33feb08cae723f86bc6c15c4709cf1bd6f5771aaceb7ed53671da37c69b" - ], + "optionalKeys": ["+7340a33feb08cae723f86bc6c15c4709cf1bd6f5771aaceb7ed53671da37c69b"], "numberOfSignatures": 4 }, "signatures": [ @@ -7459,9 +7315,7 @@ "+2dc8cb7a222a4d7da4c23ba70e07a077e7118b8f6a31c0624f360cbabf6977b7", "df2a15e0a7db192e40149ead5c77c7c7b4327a5e1aa2e74c8b13920ea3179590ff12e1bedcde2a7d4d1739aa83eb1cccdc206fc3da90151dc42fe4ddf1bffc36" ], - "optionalKeys": [ - "+7ab899218b6974ac77cbd8189e7e65161e05bd1e8a81b0d683ece3496beb0b4d" - ], + "optionalKeys": ["+7ab899218b6974ac77cbd8189e7e65161e05bd1e8a81b0d683ece3496beb0b4d"], "numberOfSignatures": 2 }, "signatures": [ @@ -7501,9 +7355,7 @@ "20507e7e4aa1e37a3f3a10038b29a3732177cef46c518674016744a7970c482c50873b84d6b3cf627f48da9a26e1abebb932f76626723fa6f8c939468aea9a9a", "100fe185c81816aa3c9110cb95d6e1bec0841c0233c56cb408345ba32394e06f7b2a5968a731357c81af9fe09134809c3a250662fbd84c567b3fb4af6db626e8" ], - "optionalKeys": [ - "+e5fda2ded5f22ec8b18135f870417c1bf56955c052c9a682718154628f2dd4ad" - ], + "optionalKeys": ["+e5fda2ded5f22ec8b18135f870417c1bf56955c052c9a682718154628f2dd4ad"], "numberOfSignatures": 4 }, "signatures": [ @@ -7679,9 +7531,7 @@ "+4b75848f83ad8cc1029eb6c75674577185fa4525073225821804de92f01d86d2", "1257d958bb90a870f3042133c06be6282ebbf278e6eeeb83046a4ba7508549d0a4a14b909c5865b2bdf0e4597caee1570650110045e51e0733b8d7fc76d38432" ], - "optionalKeys": [ - "+e947636427db94d3e01faebb30ceec549d41b2d8d9440f29bc742ea3a1d886c4" - ], + "optionalKeys": ["+e947636427db94d3e01faebb30ceec549d41b2d8d9440f29bc742ea3a1d886c4"], "numberOfSignatures": 2 }, "signatures": [ @@ -7751,12 +7601,8 @@ "senderPublicKey": "9c2d645b55be7172f1733591ebe6e71d37c00c4c71ed481d8aa97902bb70e5ce", "nonce": "431", "params": { - "mandatoryKeys": [ - "+0ec378fa6745ed8a60d775f895be03a65055ba5d6d4bb7ccf15ef2e9c01f7de5" - ], - "optionalKeys": [ - "+fa406bbc6db8e40fde702343eb150160aaa7cf9c26cf529950dfbfc59f41c68b" - ], + "mandatoryKeys": ["+0ec378fa6745ed8a60d775f895be03a65055ba5d6d4bb7ccf15ef2e9c01f7de5"], + "optionalKeys": ["+fa406bbc6db8e40fde702343eb150160aaa7cf9c26cf529950dfbfc59f41c68b"], "numberOfSignatures": 1 }, "signatures": [ @@ -7816,9 +7662,7 @@ "c252a5ad9bfc30e3c5c3f4231b40739145be651bb301a1b2993f27640317bfa408fb2ffe9bc8d451f8e27fe553bf31117e024bab0bb2e0ef6e72657762554fc5", "2cdbd3f3855cf949766f46cab4ba8add34e2945b5b6c9c7d56f11db638c0a1883716f3655d249eca344c7f559f3d5c62c4e2b0746b1890376f63d2fe3d58420e" ], - "optionalKeys": [ - "+5983ae666e90e5a0138bd858b7f31e37b7057cdbc8ff9ab2bd4bccf6b54de63c" - ], + "optionalKeys": ["+5983ae666e90e5a0138bd858b7f31e37b7057cdbc8ff9ab2bd4bccf6b54de63c"], "numberOfSignatures": 3 }, "signatures": [ @@ -8084,12 +7928,8 @@ "senderPublicKey": "840e434f963ee79b170b6e482a096ee710100cd6cd6dd8774ff7024ff8d79081", "nonce": "808", "params": { - "mandatoryKeys": [ - "+58616327314af21d8b205f8a49d711dab6083d42ff3a69916c1d5f3e5daa01a3" - ], - "optionalKeys": [ - "+128b35bfbade145a9eb842953f6249eba8eeecae1ac02e8ecddab965b4aa8b1d" - ], + "mandatoryKeys": ["+58616327314af21d8b205f8a49d711dab6083d42ff3a69916c1d5f3e5daa01a3"], + "optionalKeys": ["+128b35bfbade145a9eb842953f6249eba8eeecae1ac02e8ecddab965b4aa8b1d"], "numberOfSignatures": 1 }, "signatures": [ @@ -8327,9 +8167,7 @@ "+8e244f4bd05ca92ed93532426f328bfa32cd68a4dcb6677bd8c4f0a602d55ab5", "fbd6fe3a5b909a0cfead3147e5b3cb7832a6decb6d22445b41d25d0ffe25f20bec041243183816ab61a104bfda1683f751f3e01cd99d638382d178ec44f24f5b" ], - "optionalKeys": [ - "+e95065a9705a6f16bde30c5109c21d7f0eb625d4868718b505a6f269307c8384" - ], + "optionalKeys": ["+e95065a9705a6f16bde30c5109c21d7f0eb625d4868718b505a6f269307c8384"], "numberOfSignatures": 2 }, "signatures": [ @@ -8346,9 +8184,7 @@ "senderPublicKey": "f38f12f0c9d17b761c073a297ad5ff11c0fa42023e0e88b9702c5b3e0020ebd8", "nonce": "193", "params": { - "mandatoryKeys": [ - "+7dc98e4fa51628ad0a4573673c23cb4052a2edc4a02565d122899c237a3adb3f" - ], + "mandatoryKeys": ["+7dc98e4fa51628ad0a4573673c23cb4052a2edc4a02565d122899c237a3adb3f"], "optionalKeys": [ "+0989fd1fed9f557b8b9caeeb8c78555e44409ff40f915de35b83ce09ddb45cbc", "44292135a2d9c02237db48d08ce64d170231f1fd3d36138aebd81ccf0f5c016af474bf5a33f467187c1ec9330111376abcb88505dc45f291207d058c874ce9ad", @@ -8526,9 +8362,7 @@ "ef9a43bea38d390897d12b9eaa188f8a7bffb0abde95647dbadf3baa7e6732975ab39c2ed325a0c084d80219ace30deade8abb397ef38067876462770e48d5a2", "2f6c756184a3d4e54b830446bcb2529e4b33ba3f76b932f41ffa86d663a45ff81720ae1ed228b58abfef1f055f117c4be856a5f5973035742c739552df2441e5" ], - "optionalKeys": [ - "+9d0a015829bf0c7626342d4ff949d897169501bea2225b4c156f6f120335c8ab" - ], + "optionalKeys": ["+9d0a015829bf0c7626342d4ff949d897169501bea2225b4c156f6f120335c8ab"], "numberOfSignatures": 4 }, "signatures": [ @@ -8701,12 +8535,8 @@ "senderPublicKey": "e2990c003a37ae48bb5a7a1a13547ecf4d92bf1ac34923ad3403bd0f86831e2d", "nonce": "937", "params": { - "mandatoryKeys": [ - "+37661830a48f0b828b389c9f783193a335b4fd9e49c2455642f2248be2557b34" - ], - "optionalKeys": [ - "+ab29993b8060e5a33725c50abab4195692c717d62289756979b1b3b5fb53940d" - ], + "mandatoryKeys": ["+37661830a48f0b828b389c9f783193a335b4fd9e49c2455642f2248be2557b34"], + "optionalKeys": ["+ab29993b8060e5a33725c50abab4195692c717d62289756979b1b3b5fb53940d"], "numberOfSignatures": 1 }, "signatures": [ @@ -8723,9 +8553,7 @@ "senderPublicKey": "09357be70f905b99897dd83914a88dfba106cc3a00fcf262620a83216895622d", "nonce": "247", "params": { - "mandatoryKeys": [ - "+dc8eec15747f13f651fbca7fa6f1e511d43695650315453d097b7544c5e5c757" - ], + "mandatoryKeys": ["+dc8eec15747f13f651fbca7fa6f1e511d43695650315453d097b7544c5e5c757"], "optionalKeys": [ "+9fad814ac714b89323740f654b1e94b600db472085a2e97615ee2c21a7c9ced0", "5aeb4e4b5df91afface16ea33daaf0d3ba9814cc76610a7eee9345ff5aef7b21c86a38f8cde837293f4dd176d2ca43f81483747aadef7499ce0713aca80e3524", @@ -8827,9 +8655,7 @@ "senderPublicKey": "4b773af299fa830ce17d4454d1573f003f1038c9b88687a45a2ea4579899f69b", "nonce": "651", "params": { - "mandatoryKeys": [ - "+e85d281a96167e19c109c4acb1ef785c53a65300cf331f1447e69c743c0b0f6e" - ], + "mandatoryKeys": ["+e85d281a96167e19c109c4acb1ef785c53a65300cf331f1447e69c743c0b0f6e"], "optionalKeys": [ "+077271542a0536f9b7a97b5d89fe4b2099484df5892edb953ede572574e96f4d", "4ae61e73fb41e5eb14371047a2376078ad5c5db14c5666d20cb4b4007f911588f5d5735b768a4ada2d55276c847980f7d7af3a67613060737434c3db7ae43459", @@ -8876,12 +8702,8 @@ "senderPublicKey": "6669875edc43189f2801dd8da5d14c3b5b04948ea68134e315144b565da1e255", "nonce": "850", "params": { - "mandatoryKeys": [ - "+5a6a152e2a990a217d671175ef578acaf3d509e48d8091afb41e09d4c907e73c" - ], - "optionalKeys": [ - "+134974951903d8b3d76faa0cbe20cfb057fabaec9cdecf025eff3b37e3c036be" - ], + "mandatoryKeys": ["+5a6a152e2a990a217d671175ef578acaf3d509e48d8091afb41e09d4c907e73c"], + "optionalKeys": ["+134974951903d8b3d76faa0cbe20cfb057fabaec9cdecf025eff3b37e3c036be"], "numberOfSignatures": 1 }, "signatures": [ @@ -8902,9 +8724,7 @@ "+a2d9dc609f06ca66fdada5f66563c491f42fa82e0f53b943db3c50c5ab914617", "2d9dbb4d95eb77a527e8c70f0a96e9263cdc315737680f36004b663cf782ea565b63d585960fb4cd9a152d9e4c9a2c69e7b70875391817083e6b11ccf230637b" ], - "optionalKeys": [ - "+e40b2cadb39299ef9baa55bfd274cc4b56a191a844c4041570b6f3e1572e0a13" - ], + "optionalKeys": ["+e40b2cadb39299ef9baa55bfd274cc4b56a191a844c4041570b6f3e1572e0a13"], "numberOfSignatures": 2 }, "signatures": [ @@ -8976,9 +8796,7 @@ "senderPublicKey": "941793e707a5c759868e59cfa23844bb23389599427a19be9fc7fcaec3af4b88", "nonce": "874", "params": { - "mandatoryKeys": [ - "+731f57f3c6b5dce12720ed7320bded7258ccec0eb8b150f335a16783f925e7f0" - ], + "mandatoryKeys": ["+731f57f3c6b5dce12720ed7320bded7258ccec0eb8b150f335a16783f925e7f0"], "optionalKeys": [ "+487db17a1dcb46eed12f7d4e6762bd2c8502050eaa1d402cc2cea3fa140141da", "36553e83c272cc310259d4c108fc5b99f225f6844a2337e8864a9606a64a247f371b1f8c44ffca078d4e34543e0bcea9b5645078f6d180fec2fccf57fe77a563" @@ -9018,9 +8836,7 @@ "senderPublicKey": "59f2e2257f675eb1a964575bf33a2ddb59779968e8203ad15afd9d339fc55f88", "nonce": "693", "params": { - "mandatoryKeys": [ - "+01a9e4f75601775ba5ba6e360ce5daea5e3e41cb15dd87a7eefecd38ccbf278e" - ], + "mandatoryKeys": ["+01a9e4f75601775ba5ba6e360ce5daea5e3e41cb15dd87a7eefecd38ccbf278e"], "optionalKeys": [ "+4b776202456b02eba45b8d631da948595ec1eccd70f4042474b0288e2e07aa21", "b0d30d4b44ab09dc09645f4456a70f6921026c6d75736fc5b727f34c788a857e9ada7b609f44ba8ab0796a06f8fd9dfb74152a455c9838c41dc69b6f2c06a2cc", @@ -9082,9 +8898,7 @@ "senderPublicKey": "a5f365dc2bfd276d699c494b8df1c4eba4baacdca0edf0246a825ac18bafcee9", "nonce": "75", "params": { - "mandatoryKeys": [ - "+ffbc2fbd1e2ed90db000ccab1651726e95cdef937895c1a45ded20fa1e4a4869" - ], + "mandatoryKeys": ["+ffbc2fbd1e2ed90db000ccab1651726e95cdef937895c1a45ded20fa1e4a4869"], "optionalKeys": [ "+e47fdfd71ae8ed7afd3f2520a3fd7efb5fb3c49be659d6af35d7095c72aad6f3", "cb7ff1e2f4cd493b47c4cc84f186e982bc17fe7c11b367f983148739036e14ed2555aa34417ebef173686568a34b213637c9d7d31d5d5ef480b1f784377b1ad3", @@ -9170,9 +8984,7 @@ "senderPublicKey": "564915da862447eb4ecd601b1aae05206fd94da29b14039a7c5e29128e8633d0", "nonce": "480", "params": { - "mandatoryKeys": [ - "+961ecd3befebdb18cce4e982578866b3546527735c6d99f575da7f2ce7ed3a7c" - ], + "mandatoryKeys": ["+961ecd3befebdb18cce4e982578866b3546527735c6d99f575da7f2ce7ed3a7c"], "optionalKeys": [ "+302f849efa204cba086be845d3d608f17d07a551db0b18307c44019ce208066f", "95afa1d3fbe461c17ece7c8a266952c931b1ccd7bf39535cf229edbef116aa48dce8635cfff21a314bb3632fd19d693fa9f8f48647974a0d68a2249795f85fca", @@ -9232,9 +9044,7 @@ "senderPublicKey": "2e44c6c21eb005a84131de7f24cfbb52ddfd9408a76e90730a7555a1bed57b34", "nonce": "414", "params": { - "mandatoryKeys": [ - "+5d3726ba8cc3b28d6b4717a2375ad9f0ac4ba0058031e26447183b561503f6e3" - ], + "mandatoryKeys": ["+5d3726ba8cc3b28d6b4717a2375ad9f0ac4ba0058031e26447183b561503f6e3"], "optionalKeys": [ "+ff6b76820ecf962bfb539ac0f2d8e0371e5afaf171d7d58e028a5d4e712052b2", "41bcade648e5578bf8b22f2d29ce0797188941d7873a3a07d95cda315fe2aaf633c13da9a1bd466423ba33a37e2d52a7a5b05234eb474f11be763af475ede420" @@ -9255,12 +9065,8 @@ "senderPublicKey": "3a190b977a97c24b449ea6812f7cf51345e74359a1d318b8f287a831d258ed55", "nonce": "711", "params": { - "mandatoryKeys": [ - "+9a1143622c4a7b7c166b831a5a64ce94a49e881a4ef5357d10bb12f927a3b0c5" - ], - "optionalKeys": [ - "+165e08fc11de78a2571c03eca7febe193f08debbe1afd5611f79efcd4b1d091e" - ], + "mandatoryKeys": ["+9a1143622c4a7b7c166b831a5a64ce94a49e881a4ef5357d10bb12f927a3b0c5"], + "optionalKeys": ["+165e08fc11de78a2571c03eca7febe193f08debbe1afd5611f79efcd4b1d091e"], "numberOfSignatures": 1 }, "signatures": [ @@ -9317,9 +9123,7 @@ "senderPublicKey": "5c6f8074174073857d97e26d861bbc1849fc996675d8b142e16c3725d384d5fc", "nonce": "783", "params": { - "mandatoryKeys": [ - "+743b094d2d55f604f1dfce36e152bcc713d5a7125c33915994431f64e9a7eab3" - ], + "mandatoryKeys": ["+743b094d2d55f604f1dfce36e152bcc713d5a7125c33915994431f64e9a7eab3"], "optionalKeys": [ "+1b308a5ebb16fa2f099cba5e3f9cf0e8fe16e27dfb9095432fcfec4b34750a58", "049c7784466cffe786c37a4813d5fa09a69e3928a551248459f04b1f0957b5f0675673b55e69e09d89923a5cc472dcb7274ceb3ca84af6c829e504a8ddb8901c" @@ -9437,9 +9241,7 @@ "901ac285c5e6605e61c070589ad865f005d277b654daa1eb1f506c2e0d5ded7bb398dc65375e8577dd50cf52fc09d68adb30bc86e83616f560e95e1dddc7716d", "95a79c62c8d04bcbb7f510f9d0b2c1c490225f37d5dcd3bc803dc98c1f63b1ac458a94df204055891120e9c1b3e9109277fc1df2b614b85a43b2af17d7c56abd" ], - "optionalKeys": [ - "+9dfbca1080db84672d2a5ce4a237f088cad204b5eea8162d4f327ecbe4de98c2" - ], + "optionalKeys": ["+9dfbca1080db84672d2a5ce4a237f088cad204b5eea8162d4f327ecbe4de98c2"], "numberOfSignatures": 4 }, "signatures": [ @@ -9492,9 +9294,7 @@ "senderPublicKey": "9bec35555ee51dc65fda91d500b6016009b1204c8ec3416c3a9df9c98e6baf9e", "nonce": "269", "params": { - "mandatoryKeys": [ - "+259d788309705de0800172230e74a195ff7d11c3639c20c83515bcd78d293ca7" - ], + "mandatoryKeys": ["+259d788309705de0800172230e74a195ff7d11c3639c20c83515bcd78d293ca7"], "optionalKeys": [ "+44b6f19368a94eefb715b773cb02f7daf72a92f24edf3ea52ebe9c2a804680c6", "e54e2e346f004b5492efd650d9be2b2f6c6d64f74d8c92d8547d26affd7a42e3ecea81d48691a13c888460b33c98fd9a0f4d87d3af83de5e0b188f30a79a4e1e" @@ -9599,9 +9399,7 @@ "6461b055d59ba414bd2813710dc8a3970e8b4353f97bbd2750b34b0f67af418f113dc91bc886003feeae6605fff95d696bd8566797c633d67d783e4750f39598", "f6d54d4ae1944ec0181c8fff94ad93b50f7cf8fb0c7d51cbfe93ca722ed523353f7d055a8e6e97dd327f0d911a0e98861552c47310a8e26971b4a506c6fb1b75" ], - "optionalKeys": [ - "+db5a88018c9bfc601c3a2848e5c217cb1f7903c3d3217d29718eae1a5fdae1f1" - ], + "optionalKeys": ["+db5a88018c9bfc601c3a2848e5c217cb1f7903c3d3217d29718eae1a5fdae1f1"], "numberOfSignatures": 4 }, "signatures": [ @@ -9639,9 +9437,7 @@ "senderPublicKey": "e5a0f38cfca44051c4e1ef2e52f172dbbe0ccf5a0b7d91e4de2501a4870e3e0e", "nonce": "104", "params": { - "mandatoryKeys": [ - "+1f32e30c1a742d9de3e4c3ae6a409024d3fdd561ff42120bb7fe338e17805754" - ], + "mandatoryKeys": ["+1f32e30c1a742d9de3e4c3ae6a409024d3fdd561ff42120bb7fe338e17805754"], "optionalKeys": [ "+502c72d82a5f24edd583408f4208ee46d6c722f4cc0e8769e8c6ffad16a41ec9", "d13faed4215de6f8b17410ec47984860096948399749cc891a8e8d8894d39b75d46b049f789e612aab92f55f43a6abe3f973bce904abba888b2d162a8d5c4cf9", @@ -9788,12 +9584,8 @@ "senderPublicKey": "b99e8e345b0ac6b8b7c0420591fc730907d9ae4f6c746edb624f908f08385f22", "nonce": "469", "params": { - "mandatoryKeys": [ - "+91e0c1d5b51b1465846da75cec3739eb0abfe830730c5089cbc2b7a58de4f6b1" - ], - "optionalKeys": [ - "+a5dc73f010380a19514e054d1b5d82b11d7bafdbc13aeeaa750a2d74a074c4bf" - ], + "mandatoryKeys": ["+91e0c1d5b51b1465846da75cec3739eb0abfe830730c5089cbc2b7a58de4f6b1"], + "optionalKeys": ["+a5dc73f010380a19514e054d1b5d82b11d7bafdbc13aeeaa750a2d74a074c4bf"], "numberOfSignatures": 0 }, "signatures": [ @@ -9926,12 +9718,8 @@ "senderPublicKey": "2a983751d9a8338ef995d750675dcce9912dcb5c1a9cb6ebbc0b3b289d2d8f28", "nonce": "931", "params": { - "mandatoryKeys": [ - "+0a012c11e9de281d1b549c252cdb720c77934d6f3e872c551a80a88e317055af" - ], - "optionalKeys": [ - "+b8fcce9ee217d7bd8ef2c2949f13e8389239280ce7f969d221112c615335652a" - ], + "mandatoryKeys": ["+0a012c11e9de281d1b549c252cdb720c77934d6f3e872c551a80a88e317055af"], + "optionalKeys": ["+b8fcce9ee217d7bd8ef2c2949f13e8389239280ce7f969d221112c615335652a"], "numberOfSignatures": 0 }, "signatures": [ @@ -9990,9 +9778,7 @@ "senderPublicKey": "cadcb608edd03419ecfe97bd722b56a09bbba232c2255965f5e3803c7e505d0f", "nonce": "575", "params": { - "mandatoryKeys": [ - "+9271db0d1d8551773ebd7878665dd069fc40810f01a7a9c5cd762e6516c16710" - ], + "mandatoryKeys": ["+9271db0d1d8551773ebd7878665dd069fc40810f01a7a9c5cd762e6516c16710"], "optionalKeys": [ "+61905340eb9709292e3d0d343a2b29011164c085456ffc3f892499f183ec65b8", "43e44a58b1cd285794743e1937284377f0020f8d1ee1fe7b21a464dcaff254919050f49e1af49b4ba6c388c82bdeba04bcbfe1a0a63d286e2effc8f8d953258b" @@ -10235,9 +10021,7 @@ "senderPublicKey": "f2ba5d4eb49dd88f8fdd10d8a6324e30741312473887e489e1bc06e339f78b18", "nonce": "63", "params": { - "mandatoryKeys": [ - "+536e25cd12029d024a1f1dbbb9b0671e66f5dc732571b6cf37d1ba51d39395c4" - ], + "mandatoryKeys": ["+536e25cd12029d024a1f1dbbb9b0671e66f5dc732571b6cf37d1ba51d39395c4"], "optionalKeys": [ "+e07b186294579ebb586a7a68ed3fcd14927671afd6d881c6b741411819ee4c63", "e8124fa53109c330b9ffb8fdf0edbcf999a6582a40cb3c4c264f81d645c7691373f95f4c2be0eab7b9b1032c5f549b2c0364ddb89938c487dc3ba9e9a5370a2e" @@ -10315,9 +10099,7 @@ "+ea4524e5426303db249a89da979fccff8710a27c9654a80931f69c2d17815a4e", "c1bc4ded300f8ce687e413df4149464d23dd5f228055674630c7fd208023b5ac9689c0e2bc4ee68f8fe649951d201ef0135263d019e10efa9e6ec8926c99ff40" ], - "optionalKeys": [ - "+2a7cf593946d6f4190f2704aeea208332ee14aba9fd5299128668a313ed45cbb" - ], + "optionalKeys": ["+2a7cf593946d6f4190f2704aeea208332ee14aba9fd5299128668a313ed45cbb"], "numberOfSignatures": 2 }, "signatures": [ @@ -10377,9 +10159,7 @@ "senderPublicKey": "f57ca26723e695157cb691279301490f8f57306e041c5c8d6d4e932d6dce957a", "nonce": "422", "params": { - "mandatoryKeys": [ - "+566c87b68032f79233ae18a7118407823b392eec0b1bcea6846a9a7e6b1d6615" - ], + "mandatoryKeys": ["+566c87b68032f79233ae18a7118407823b392eec0b1bcea6846a9a7e6b1d6615"], "optionalKeys": [ "+d9b3c053755b2d084e37bdb664150ed87fb58c07d4c37d750c2088c26dd559ca", "655566883cae10a49090f508ec4e83e8e15b401e215470e4546296682b03d8f8cd1e7c4d670d30b92bd11eae6d680a5feed22078fbb3859b90d551c56a1f78a7", @@ -10770,9 +10550,7 @@ "senderPublicKey": "0db0a4c5477d28706f7194a7ccc8fa5c7bc3947633b3b6f085e52642be41372f", "nonce": "423", "params": { - "mandatoryKeys": [ - "+3a82f20a5d75c73ce16e25906bda6534cecc799e41bd020f4d5587122ab77de1" - ], + "mandatoryKeys": ["+3a82f20a5d75c73ce16e25906bda6534cecc799e41bd020f4d5587122ab77de1"], "optionalKeys": [ "+097847ce2b02ffe17c4f02b01819d5d1d0ba89e79bb21ebcbf016dd0f9c13a60", "862325e32b556691d8ca03cd98361a2740b4e23c1e6317351446bfdbf239ad8d7fb4df250ba32b69fb22592f2bb4489b8da882102e4e0c64ff068bf5c31008df", @@ -11031,9 +10809,7 @@ "senderPublicKey": "8c5a9a60d1806b6bfb038a18d1eb9e7521b98d8ad7426e0a89b19692a6b97ff4", "nonce": "880", "params": { - "mandatoryKeys": [ - "+c2f0589a9a4be286fc5cf8c05c152aade3831807c180fdadf2198fbd43a44117" - ], + "mandatoryKeys": ["+c2f0589a9a4be286fc5cf8c05c152aade3831807c180fdadf2198fbd43a44117"], "optionalKeys": [ "+35517882ce84c2008ec5fb39451f3330a07ffa0cad47d7de015a86837555b6f6", "35f7c7e3056b446c3e925e64e0c9f1b1bfd032069eb18385523c894f3bb26bf3eb8f61ba35e7c34286d6c3eff0b34e90cfa67c902a21c169ef094e78cdf4fb41", @@ -11186,9 +10962,7 @@ "senderPublicKey": "5b4dbd41d7630bee703d940cfaf9e922aa7b6f698a7d90eb9c63c76608683acc", "nonce": "863", "params": { - "mandatoryKeys": [ - "+c2efd7de831307e09fe87c9a9d3cbd83f279e6354ad267b6479709711713096e" - ], + "mandatoryKeys": ["+c2efd7de831307e09fe87c9a9d3cbd83f279e6354ad267b6479709711713096e"], "optionalKeys": [ "+1164fd5c02e4af3d91faeeefab839b27306c3d7a467cd6dfa0847aab9cd6768c", "6507331640da8894f89401533e415d0a11ba8e74ec4f5ea8a50c30b2cffd7090785883eeeb1a4c3067bc62416a5df183bcbdb0079fd91cb9586cee78cf71cc67", @@ -11621,12 +11395,8 @@ "senderPublicKey": "3edeb795cb94c30b474c5228c1c3d6bca923eec848ccc544510baca0b016150f", "nonce": "103", "params": { - "mandatoryKeys": [ - "+3551fbf22689d940afbe4f0f163e125bc44876f315ca25648ce1cc94973ded08" - ], - "optionalKeys": [ - "+60ea4023b28523a20334c62f0d6f82978498979eb4aca0e9addfb2984dda7390" - ], + "mandatoryKeys": ["+3551fbf22689d940afbe4f0f163e125bc44876f315ca25648ce1cc94973ded08"], + "optionalKeys": ["+60ea4023b28523a20334c62f0d6f82978498979eb4aca0e9addfb2984dda7390"], "numberOfSignatures": 1 }, "signatures": [ @@ -11876,9 +11646,7 @@ "senderPublicKey": "cfe6f4778e89243b3ebefa39f6a79ee618d05dc7ce637598cd776c4cf802a793", "nonce": "850", "params": { - "mandatoryKeys": [ - "+d6f7eb26e44c42ba0a39772270efac73872d6a6f280a39f43ca1791c7f0f405e" - ], + "mandatoryKeys": ["+d6f7eb26e44c42ba0a39772270efac73872d6a6f280a39f43ca1791c7f0f405e"], "optionalKeys": [ "+7c29838d3dc4718ea561c6400e7e6ca47b38a250fef45232e2394399de625123", "05f0a3d396cc781375a267c4853fa23ee708b9cc536fce0be50c4825ec71ae5b3a8b2121132df48d5b2c8d9b103e4fe425e30b516552c232d2424eab2fd87382", @@ -12080,9 +11848,7 @@ "senderPublicKey": "5c2bc49a995fc4937625b576bce25094d5cee13567b963484dbfcae65717a51e", "nonce": "812", "params": { - "mandatoryKeys": [ - "+50d75c25975f48cd8425ff243a1763dbd23797401a67986ea70c14db089d9ceb" - ], + "mandatoryKeys": ["+50d75c25975f48cd8425ff243a1763dbd23797401a67986ea70c14db089d9ceb"], "optionalKeys": [ "+5cf3adfaa3ccfa507681abcdec6edbf67eea292ff27928a727e9727836647224", "1b61e8508f3b2f1fb104cba81bb44d4bc69eeceb8d02ecd4c22fdbe5097ee501af0e45de3e7962fc64e4e41e9d8d0f620ad2544573a0e7b546977a38e3ad5d30", @@ -12109,9 +11875,7 @@ "+8f6a49397ace7e1d139689c601196062518a8ac5ebb575296914bb543b58003d", "9312408d5e967013f3e68f380471685eb4b8d25bcd1fc7bc6a74bfa27000b82e4da08106c491173319a8a75bccc0c8ea07c46ff4695976290b5c8029ec6f8756" ], - "optionalKeys": [ - "+abdd1d86606a00b6d1f28fbe3916fecaf95511788efbec654f2a3c4cdf549b76" - ], + "optionalKeys": ["+abdd1d86606a00b6d1f28fbe3916fecaf95511788efbec654f2a3c4cdf549b76"], "numberOfSignatures": 2 }, "signatures": [ @@ -12128,12 +11892,8 @@ "senderPublicKey": "c8387e4ac1e6a64c3049d5ea235221dc9061fe220bde7cbe36586bafc53ed075", "nonce": "679", "params": { - "mandatoryKeys": [ - "+038043e886c9f343a62174b4b92d65d4cdd3d117820a8a19df66bec27027103e" - ], - "optionalKeys": [ - "+9eec5a970184f1e31498a860709d74a1896771de094df3233161258a22882999" - ], + "mandatoryKeys": ["+038043e886c9f343a62174b4b92d65d4cdd3d117820a8a19df66bec27027103e"], + "optionalKeys": ["+9eec5a970184f1e31498a860709d74a1896771de094df3233161258a22882999"], "numberOfSignatures": 1 }, "signatures": [ @@ -12167,12 +11927,8 @@ "senderPublicKey": "b9aaf10682b99a3c006ae2f29f55030d03865b7f7f2a3af8505f9ebfc10a7105", "nonce": "665", "params": { - "mandatoryKeys": [ - "+40237f0e1c282d6922d6006652968d3288fb1d563cad4c2fc5c0e0c09ed3fc16" - ], - "optionalKeys": [ - "+98dd28f071dacf3c62aa12ce35c1b6cc8e4f9b2ebded368b439df71d63e24976" - ], + "mandatoryKeys": ["+40237f0e1c282d6922d6006652968d3288fb1d563cad4c2fc5c0e0c09ed3fc16"], + "optionalKeys": ["+98dd28f071dacf3c62aa12ce35c1b6cc8e4f9b2ebded368b439df71d63e24976"], "numberOfSignatures": 1 }, "signatures": [ @@ -12314,12 +12070,8 @@ "senderPublicKey": "50e035b5e8a8d4f60ca81bf17bec288a942da77b0b01d53546afde5e3015b5d2", "nonce": "922", "params": { - "mandatoryKeys": [ - "+864e6b7fcf33291219f4a72915c9447353e4596889b8aa6df77dfa96223f648b" - ], - "optionalKeys": [ - "+557c3a7ab2b04d52133877ffa3a1b55e821b0462aca5cf317733540904648b3e" - ], + "mandatoryKeys": ["+864e6b7fcf33291219f4a72915c9447353e4596889b8aa6df77dfa96223f648b"], + "optionalKeys": ["+557c3a7ab2b04d52133877ffa3a1b55e821b0462aca5cf317733540904648b3e"], "numberOfSignatures": 1 }, "signatures": [ @@ -12341,9 +12093,7 @@ "c858a1857b6b7e4b2e56f6f4b8b7999a187b4c8f315f24a7758d55ae6e95d7a160fe0e422308020bfddf15021058fc027f45f7e13c3a45903e5d2e8542253b4c", "9ef2dd2a017710925a5d3ee96f8907370b9a86bfc01c0d74baf1c6e650300e159e401c40e348a592db1d6c5169755c3277f4fa962892a5083f55d5f41280ee65" ], - "optionalKeys": [ - "+0c4c4c9211ad843c911b63ee186a9aabee3c28f747601e75ad6958c526876f03" - ], + "optionalKeys": ["+0c4c4c9211ad843c911b63ee186a9aabee3c28f747601e75ad6958c526876f03"], "numberOfSignatures": 3 }, "signatures": [ @@ -12387,9 +12137,7 @@ "01c4a4cc1dabc228f32feb7b6dc0220c65cd76e7895f07fd6c2b53065c5e469d4e065a8b00d76834af3264e7d3056c3cdee41605b9401f09324c9f233a524073", "8c29070f62ac0da6d55548de207a3c62c92fe75000ff715f99aa37519a830a4e37856a943a62cbc1973bc7f23b38b6d83f0c55592e8d31922c6c8a4699435d3a" ], - "optionalKeys": [ - "+67a0ccb646d29421a82c1de5979aadd981629ee59642ebfbf07fbed799ee3700" - ], + "optionalKeys": ["+67a0ccb646d29421a82c1de5979aadd981629ee59642ebfbf07fbed799ee3700"], "numberOfSignatures": 4 }, "signatures": [ @@ -12522,12 +12270,8 @@ "senderPublicKey": "505c8ad9602246328a8d92620b67147c816d22d545187e0e53aa2a1e85fcf95a", "nonce": "996", "params": { - "mandatoryKeys": [ - "+9de656673ee4b6d492c900acb882e408560ed9d6da146d00155b52b65a6fe124" - ], - "optionalKeys": [ - "+a9fdcd3b29e9e1629ceacaebb50d2a20eb32833d22aa05e429db0390fb477498" - ], + "mandatoryKeys": ["+9de656673ee4b6d492c900acb882e408560ed9d6da146d00155b52b65a6fe124"], + "optionalKeys": ["+a9fdcd3b29e9e1629ceacaebb50d2a20eb32833d22aa05e429db0390fb477498"], "numberOfSignatures": 0 }, "signatures": [ @@ -12766,9 +12510,7 @@ "senderPublicKey": "18a98ef292760f607a5528713a3e2bdfedcaee4f7650f7e4a29b26cf3f251e1f", "nonce": "62", "params": { - "mandatoryKeys": [ - "+3b9d2410b3e660f28c4b417a57a4bb50b72fcee88661bcf889b7f30b46af1cd5" - ], + "mandatoryKeys": ["+3b9d2410b3e660f28c4b417a57a4bb50b72fcee88661bcf889b7f30b46af1cd5"], "optionalKeys": [ "+f11cb507a8d9bb2e687b27583d08b64fe162ce140cca62d7488b34384766b084", "f5fb00f0306bd966f5521aedc604a709c300c6112247d360d7d5fa2ce044fb85103a34039b4726fce3291510aee3ff33a300ce45942282e0b7e6e4e2e957c6c4", @@ -12791,12 +12533,8 @@ "senderPublicKey": "329f7e2e5a6a73219d0536c73d110ed2937b71be847b9b6f6a5652bb323ef102", "nonce": "64", "params": { - "mandatoryKeys": [ - "+976c27d0063c822acf892ed8bee187598dd4974784daa19ec4a70f75b3f1d033" - ], - "optionalKeys": [ - "+c9c81601f3de116867fe5a3fcfff696a2dcf7798acbb3983565c72a98a97a27b" - ], + "mandatoryKeys": ["+976c27d0063c822acf892ed8bee187598dd4974784daa19ec4a70f75b3f1d033"], + "optionalKeys": ["+c9c81601f3de116867fe5a3fcfff696a2dcf7798acbb3983565c72a98a97a27b"], "numberOfSignatures": 0 }, "signatures": [ @@ -12834,9 +12572,7 @@ "senderPublicKey": "066a6114d8e74ba6c88d326d382e952c179ee416c08219727d05560bb2ea5ad4", "nonce": "49", "params": { - "mandatoryKeys": [ - "+4cd6201ad43452b211693cf1800a80159e192ef36ebc3ed5d0d8bcac0890932a" - ], + "mandatoryKeys": ["+4cd6201ad43452b211693cf1800a80159e192ef36ebc3ed5d0d8bcac0890932a"], "optionalKeys": [ "+746abdfccf65a6e975d401e2e097c4f8082d2f361f9c84083617bcd77f897ad2", "75b01966a32c867d47e89f8e0b8e70f6ecd320684d1e29457fc67e1f3230fdefd710ab11e8a319ed14c0cfbbc8fe94f2d640506f8bf1881d4cfec9e824f16113" @@ -12958,9 +12694,7 @@ "+b4bb01ea0665c4ea93b86a6189c769ff6d2d2684b407c4c4ae1dff274f4203a6", "bfa3554aef01d5e8df33b2b6b4a4e9d48e3befa8407f1e6842ffa81d575944ecc08ec659e2f74b553b0b4db272b22ea68790062fe6a47df449e2717aa303b9d8" ], - "optionalKeys": [ - "+97ad400fc83c98de9d62b071970caa392305df1e8041368f08b93d00b6d10c9d" - ], + "optionalKeys": ["+97ad400fc83c98de9d62b071970caa392305df1e8041368f08b93d00b6d10c9d"], "numberOfSignatures": 2 }, "signatures": [ @@ -13017,9 +12751,7 @@ "senderPublicKey": "952beac765bb71590bb7633a199c4a406a8cd492d88d76c8fadc679d62bec051", "nonce": "581", "params": { - "mandatoryKeys": [ - "+e513ed5a8fb1f35abab5b1e2b24361ace82404b3282425a7b9f93f180ec0f890" - ], + "mandatoryKeys": ["+e513ed5a8fb1f35abab5b1e2b24361ace82404b3282425a7b9f93f180ec0f890"], "optionalKeys": [ "+847acdeba7dc174b3497736d611109318198b7b8205e2efde2911efea5ab2b7e", "fdc15b4866a2feddf24d7b73e8473697cf24fe726af3e2fab6a4fc39176ff6c690b40e94f7ad4336f4658f72eb3085c9a55cebc99f5fea6c2a6784096f6d3eb7", @@ -13046,9 +12778,7 @@ "+ace3e4591a87d21c8c21e6095cf981fb1a7ca8d99505ae9e1818dfb40f40d7ae", "104559d612184794d7e3d5890a02970c559fb6799fe86d84a60b332cc103cd851f19a31e0dfb9a755f83b85dd37f588b70e1a6dea98fd10072efcd7028672c4b" ], - "optionalKeys": [ - "+569aa2b3177fcc0b0465a306681df02482dc043725f4988b047461377f1bccf7" - ], + "optionalKeys": ["+569aa2b3177fcc0b0465a306681df02482dc043725f4988b047461377f1bccf7"], "numberOfSignatures": 2 }, "signatures": [ @@ -13144,9 +12874,7 @@ "d04d2cc0b0e27e1dd66c7dbf95ec3c38e5c85a95e895e3d87b393fbefe70470ce49f6f583a4b9c7c835611b67930690ce5cd967f5fcde7724e3006ec51a830e1", "f3181b8f569f40eca729453fb871109df8fc079d4fba46d318ca9a92fc14d2656d67053ad67e02d034cdd67d7e0bdf513a48d34035d5db100f5e1e563a976631" ], - "optionalKeys": [ - "+bb0da6190a8df14dc121904a771ea0bdef4badd11be9686030f2459a0b24e35b" - ], + "optionalKeys": ["+bb0da6190a8df14dc121904a771ea0bdef4badd11be9686030f2459a0b24e35b"], "numberOfSignatures": 3 }, "signatures": [ @@ -13242,9 +12970,7 @@ "f5876ceff58ac7abd290471cc85de3e6c1241ef0374fb2dc16efc7acbd0111dd82bda95f68acbbd299c527b2dc0e8461e39f56f61863ce32a1e0baf71dea6ed0", "1d2e06de632c33b35b044876cebf90ad11927cba556ff64c5fef1919cb31dee7f2a07a3210a5ac676ca450fc0c27bb238609fbaf2f1a523603eb00dc28f95f1a" ], - "optionalKeys": [ - "+be80dc8f4e84b1bd5776013fa7e6d570792b6d920e522fc88c976d28e6acab7f" - ], + "optionalKeys": ["+be80dc8f4e84b1bd5776013fa7e6d570792b6d920e522fc88c976d28e6acab7f"], "numberOfSignatures": 3 }, "signatures": [ @@ -13389,12 +13115,8 @@ "senderPublicKey": "ccd1925d7bdda6dd0a31ef6a2ee263fe825b9e742d484c62c0559cbd3c14a849", "nonce": "997", "params": { - "mandatoryKeys": [ - "+14ea1fb5f9d5ba6cb2386ef77a0b0487979780481ef842d579cc4685e94f2a54" - ], - "optionalKeys": [ - "+2bb7f183cca4ca47a1f2c890ef1389aebde8f90c2d151f618c7aaea2043f9b72" - ], + "mandatoryKeys": ["+14ea1fb5f9d5ba6cb2386ef77a0b0487979780481ef842d579cc4685e94f2a54"], + "optionalKeys": ["+2bb7f183cca4ca47a1f2c890ef1389aebde8f90c2d151f618c7aaea2043f9b72"], "numberOfSignatures": 0 }, "signatures": [ @@ -13411,12 +13133,8 @@ "senderPublicKey": "b643732a228e8fb2c12efa9ddb5b8109b76d3397edab3aedfc12a43970fef6c2", "nonce": "356", "params": { - "mandatoryKeys": [ - "+75f0b31f603783fbc355c06c12d845d8993670dc50782db4d78b4925c8e5689c" - ], - "optionalKeys": [ - "+6051b6a450403607933972d9870c915866822893c61b721a6a54ee66d51955aa" - ], + "mandatoryKeys": ["+75f0b31f603783fbc355c06c12d845d8993670dc50782db4d78b4925c8e5689c"], + "optionalKeys": ["+6051b6a450403607933972d9870c915866822893c61b721a6a54ee66d51955aa"], "numberOfSignatures": 0 }, "signatures": [ @@ -13438,9 +13156,7 @@ "cc7af0b32f39e784b05759ea1018ddf2bd75a8ce09c99cf3132f153ca1d79224eb8d81d8fc59a74902995f2a53eba0b417699befd6b026c754f673a601206b86", "ca5de1a9de374fe88de66f36404e44963d8bcb3b6a2c4f18e83fdd6f2be08aeeeb6dff025e8bda30695a16341056e0130cb12e2b04e9a011b10da21700303977" ], - "optionalKeys": [ - "+abb2546906aa59f74a065b9b49aa7ac30ab78f4bf22763328775594d43378014" - ], + "optionalKeys": ["+abb2546906aa59f74a065b9b49aa7ac30ab78f4bf22763328775594d43378014"], "numberOfSignatures": 3 }, "signatures": [ @@ -13474,9 +13190,7 @@ "senderPublicKey": "7c3d86860a718d9bbd6d2a8d2631852a00fe240a7064de7c4bfc6968b332da89", "nonce": "635", "params": { - "mandatoryKeys": [ - "+173935925b555bfc8eab89e4b44566013f2ed1c3585746d4c0b8e9308a5ae104" - ], + "mandatoryKeys": ["+173935925b555bfc8eab89e4b44566013f2ed1c3585746d4c0b8e9308a5ae104"], "optionalKeys": [ "+ddba5c89b9a8ff559ecce7d4dffaf58c6097e30f40a6987c721a4e458d4201fb", "9373f6717de7944b0b16b25acddbd609251c008c175e35950c4ee2ff42350d3fe613ec29422ee3cd1187f75a38918e359489d89e3fe25a746ad78f5e6241a80c" @@ -13586,9 +13300,7 @@ "senderPublicKey": "7926df80c52d06535bfbd4afc76cb506e14d21e77107f2d02be515afee56b95a", "nonce": "354", "params": { - "mandatoryKeys": [ - "+ba0b4a58aaf23ecea6e5f395ac1ad7a2cc366b17579837a56b7bb34c08aace91" - ], + "mandatoryKeys": ["+ba0b4a58aaf23ecea6e5f395ac1ad7a2cc366b17579837a56b7bb34c08aace91"], "optionalKeys": [ "+f3e054b52fc43e7ae31ebb9da057bcb6a4b61e7c6ec8bffbe28311175d552236", "e1f96472dfe018395d8d6f53a22a4699c8c7d015b6556aba80b46c583788d225b11187a34221dd634fdf87fa8beb062065c59a60cda6988c433d64b5bd9681d4", @@ -13660,9 +13372,7 @@ "56060939b757e84a333c693552f728c737c05faf140762ae4cd281b44d8b3be399adc6b070d1e827a1eb2300a5c7d349a9007547379ca1fe3117f0f622194c2a", "e6b40634937874f1a164a78f8c94dba5e760f08d8aa9d46030bde5fbdf862ef5ca5176095d57169dae4f4f7e2bcc4ecf8fb1d7af9f55a57dea8eb18e0142f89b" ], - "optionalKeys": [ - "+549824063e665b1e72f9041b0882fc17833fb6cad630b6e3febcb85c8a5fa988" - ], + "optionalKeys": ["+549824063e665b1e72f9041b0882fc17833fb6cad630b6e3febcb85c8a5fa988"], "numberOfSignatures": 3 }, "signatures": [ @@ -13704,9 +13414,7 @@ "+ee435d85d6fbc4660aa3a27b3797eee82c5919a94428ef9fb1179152947fb85d", "bea95eb225bb87f0e242e1f813063b1fcf825747de7c31b2a93c9c6962fdd5d946001b7730fa1f074b5add0270b350ec4a028e3ddfda9e6a8c2eb0c930dc8f51" ], - "optionalKeys": [ - "+70da090e205be8ffd91fbe18af6fcf0ca47da1140ef963a52aad7f31feb44315" - ], + "optionalKeys": ["+70da090e205be8ffd91fbe18af6fcf0ca47da1140ef963a52aad7f31feb44315"], "numberOfSignatures": 2 }, "signatures": [ @@ -13727,9 +13435,7 @@ "+15df99cbe1272282854180c061b6feec709a86890d370aef79f1d69c1d8d641f", "3494f53ca47dfa38fe5c6cfbcdefa18a23c69ee4bb712818578dd7351f41c1512d0db21830454127392b9b94407635b95dc466012b7195983fb7504897e5e639" ], - "optionalKeys": [ - "+df7fa4f38e3224c02fc7b6db28003519d3e01ac7f83900fe4bebeba2a2158d3e" - ], + "optionalKeys": ["+df7fa4f38e3224c02fc7b6db28003519d3e01ac7f83900fe4bebeba2a2158d3e"], "numberOfSignatures": 2 }, "signatures": [ @@ -13805,12 +13511,8 @@ "senderPublicKey": "736a84779ad51f1e2fe257f0e6432f88d3696c4499dff73aacaba7d995c0e6af", "nonce": "17", "params": { - "mandatoryKeys": [ - "+d615365ba4671e06ddd600a0d1ba6cfad94b438ced52e14691f932cea2632fa8" - ], - "optionalKeys": [ - "+51008847064f8b02e3bbe04d2227eb1c44dc67bbd98240895c7c7a130f082c2a" - ], + "mandatoryKeys": ["+d615365ba4671e06ddd600a0d1ba6cfad94b438ced52e14691f932cea2632fa8"], + "optionalKeys": ["+51008847064f8b02e3bbe04d2227eb1c44dc67bbd98240895c7c7a130f082c2a"], "numberOfSignatures": 1 }, "signatures": [ @@ -13962,9 +13664,7 @@ "senderPublicKey": "6f19d9f302f256ac270d43c5280a544431dec25164fe8d795b83dd644675318d", "nonce": "515", "params": { - "mandatoryKeys": [ - "+a6e2f6eec1e33d50e5149a28961b390067a9f9ffbc85179fc53962210da65064" - ], + "mandatoryKeys": ["+a6e2f6eec1e33d50e5149a28961b390067a9f9ffbc85179fc53962210da65064"], "optionalKeys": [ "+8446d7c8f7e80273d49e65c4705560f8e27098ad40f9b3e8e886af1063931b68", "4f61375c1c72bbaac73f669ce75ac0527999011bfb134c834f69096c79c051a6ccd19ea344743d5841905c2ae775a39042e494ddbd6cdd1086028fbdb03f1faa" @@ -14031,9 +13731,7 @@ "a8378b322fdd64055279affebee17a2aa60242db8327cea840112c9fd4f559236ef637b397f3fb13e4e12f66dcc71b9b82750c91f5982b1a9d1cb2f064e30d44", "edfbcd3acbc4928ea3b46a8c292178472b727a7ee71cdf999352759edec8e2c4e83c38300a6e06d6c91fc26b1849035c5abf47f5a73f813dab3da6f28e59c57d" ], - "optionalKeys": [ - "+87c92bd217f81e51fc6020e77deecac8992e1e0d79200da6f5187599b68e9949" - ], + "optionalKeys": ["+87c92bd217f81e51fc6020e77deecac8992e1e0d79200da6f5187599b68e9949"], "numberOfSignatures": 4 }, "signatures": [ @@ -14073,9 +13771,7 @@ "+b3e8aa18bcd2d77388941d97e0380ceae3026ccc41e9217b44ae72f8ec3c79f6", "c701e90fc1dc0cea88ad8b3c1a1446d1ad89069a91171576a6f4d3c85f4b9bba594de066cdadc4b0e9c889a32eaf0fe3bfa728b9ea90e73f63199bb5b9fa8094" ], - "optionalKeys": [ - "+20cb0037424573cee8ce162239f4b4dbd35be45e5dad36c12a71d3e45c2c5aa6" - ], + "optionalKeys": ["+20cb0037424573cee8ce162239f4b4dbd35be45e5dad36c12a71d3e45c2c5aa6"], "numberOfSignatures": 2 }, "signatures": [ @@ -14244,9 +13940,7 @@ "senderPublicKey": "1b64df2441fa5dfe421641e071ce143693779c2b035414e3b9b9757a73586bb7", "nonce": "154", "params": { - "mandatoryKeys": [ - "+53b92d7056be86e3fc2cab72cd3ebaf48d75ec6cf46cadb37773ab772dd08d9e" - ], + "mandatoryKeys": ["+53b92d7056be86e3fc2cab72cd3ebaf48d75ec6cf46cadb37773ab772dd08d9e"], "optionalKeys": [ "+8e1954649c069a058154772b3bcee2d7bc980666fd6d2a684370e4a9aa735949", "5ccad1188063513237b6ab00f21d177c405c57ad9d0858552d7da4e0ec310e26d485cbe6459c1ffd3675d0b06420f73039f6591a12ff69d156646ece3d6c36ae", @@ -14285,9 +13979,7 @@ "senderPublicKey": "37d2921390f095e0f064b560ad1a3065e7ccccf6e237d78c3a6073a2ef617b2f", "nonce": "760", "params": { - "mandatoryKeys": [ - "+376a92465a2ceaada36ba4218dfe30ecddf2eb908f9f3b5cd493b81d2f2bc28f" - ], + "mandatoryKeys": ["+376a92465a2ceaada36ba4218dfe30ecddf2eb908f9f3b5cd493b81d2f2bc28f"], "optionalKeys": [ "+c66218c9777ffa9c9bd73d848c7d6c3c9bcdbd3d7bdb9ca600f27f2a369fabe8", "01276193adbbb2b8eb83e119ded18da810df74fedf328b809fa6a854353be80b7666d4fa7ff0a8076189300675843e204ea013f0dd92e7e4f17d07688d28e317", @@ -14574,12 +14266,8 @@ "senderPublicKey": "d37891d4751de8820727df7a09201974923c221723982f75c2cc25148528ae3e", "nonce": "930", "params": { - "mandatoryKeys": [ - "+f054ee27eec3aaef1429c36839f2a02d96e32d6c1ce2ea20a428cb533d215303" - ], - "optionalKeys": [ - "+062d29ddd3d92f97f037ec1d81a3f203ade9fe972ffd0307925d1c24dd80f9f0" - ], + "mandatoryKeys": ["+f054ee27eec3aaef1429c36839f2a02d96e32d6c1ce2ea20a428cb533d215303"], + "optionalKeys": ["+062d29ddd3d92f97f037ec1d81a3f203ade9fe972ffd0307925d1c24dd80f9f0"], "numberOfSignatures": 0 }, "signatures": [ @@ -14791,9 +14479,7 @@ "senderPublicKey": "f7df52d7a5ff22043e2617d52e51d89930b133ca00e3b13cd9f935c9f20dcd8e", "nonce": "41", "params": { - "mandatoryKeys": [ - "+77f4b044d7023d620ac20d791498769fdcab8aa9bd57ec0780d918c1d76dd5e4" - ], + "mandatoryKeys": ["+77f4b044d7023d620ac20d791498769fdcab8aa9bd57ec0780d918c1d76dd5e4"], "optionalKeys": [ "+121a52c74ebae7b6a7d035b2d714f64b2426d228d10bb8e0b834b7de797c999a", "28d5c8770f73f743cf6f3c7f11494f0a01bedab1b1e8492da71224c05b4f944e95c2683e6e5a4a394d21e3136d33522a63f4df2eb2973c694ce0553654370449" @@ -15086,9 +14772,7 @@ "+1a282c214ded9da7b79e996177023a1c7847b11c0ac299699e195c77977e990e", "9c923edead70cccc1126b606eca9ffe43aea3d218b890e36f88e7b6bdd4a04778c70a2b626d675b3dac3fcaa4e95d12477b9021f815264c79072c2e6cde5bc85" ], - "optionalKeys": [ - "+9ff16e89a36568dddad1bb4d920508da7f9e81bed412e695b4798ffe1624ed02" - ], + "optionalKeys": ["+9ff16e89a36568dddad1bb4d920508da7f9e81bed412e695b4798ffe1624ed02"], "numberOfSignatures": 2 }, "signatures": [ @@ -15212,12 +14896,8 @@ "senderPublicKey": "7b4527975dc4526b4cfb86df7563bb09321f91e3daef4af30af2ea51d6f48c85", "nonce": "382", "params": { - "mandatoryKeys": [ - "+c262bcd998218d83275e58419a1640ce201b8bc71adfd1a63f6c94989d45e9f9" - ], - "optionalKeys": [ - "+3778b4873c7283cf0710b4d43aa9368b2dc847839148b813f1957b064d6213c3" - ], + "mandatoryKeys": ["+c262bcd998218d83275e58419a1640ce201b8bc71adfd1a63f6c94989d45e9f9"], + "optionalKeys": ["+3778b4873c7283cf0710b4d43aa9368b2dc847839148b813f1957b064d6213c3"], "numberOfSignatures": 1 }, "signatures": [ @@ -15342,9 +15022,7 @@ "senderPublicKey": "0f87ecb31ba319f775bc27f18794e03829f76201964db61ad10bfba11378c81e", "nonce": "812", "params": { - "mandatoryKeys": [ - "+87001e973da333113e86b92a2b0b7ac4aa14f12c74cc42aa210071e9644959c0" - ], + "mandatoryKeys": ["+87001e973da333113e86b92a2b0b7ac4aa14f12c74cc42aa210071e9644959c0"], "optionalKeys": [ "+7f4d52d947dd2fea21a644651b1266bb9597da5a1dceae39f4879631000be22c", "bbbfb40dc7181b86e9b52d580543f2e277aea523444d82a6ece7c955298c33ad0e5b7bf9459ff89685930bbb66ddcd1997c8c0ed72dddc5931e1ef716f26cdaa" @@ -15365,12 +15043,8 @@ "senderPublicKey": "283893c9adf7bf00c99ff422ad302ff3a75996a79dff5282f66c395eb81f3b6a", "nonce": "105", "params": { - "mandatoryKeys": [ - "+d87614bd1111cc603f308692e858f912fc7b46d018fb9d1cd61f64513dcd3a51" - ], - "optionalKeys": [ - "+a7a6f0f20f6b7150a3222948532e9fb7c06aa171c85c6164e69a546db93665f3" - ], + "mandatoryKeys": ["+d87614bd1111cc603f308692e858f912fc7b46d018fb9d1cd61f64513dcd3a51"], + "optionalKeys": ["+a7a6f0f20f6b7150a3222948532e9fb7c06aa171c85c6164e69a546db93665f3"], "numberOfSignatures": 0 }, "signatures": [ @@ -15541,9 +15215,7 @@ "senderPublicKey": "eab049cc12674d77f91c84d54b85105258e6489576b51495289acbc40a4c9483", "nonce": "538", "params": { - "mandatoryKeys": [ - "+6f463d00ba5386ce88bcb36f92fb3692a27f99afdd45042e571f7a52b51ce1c7" - ], + "mandatoryKeys": ["+6f463d00ba5386ce88bcb36f92fb3692a27f99afdd45042e571f7a52b51ce1c7"], "optionalKeys": [ "+58163439aa269a88aaf7dfcfc84810903e83f7cd2560b5697b1901ab702d3249", "bf97247bd7f02e9903edaa1663a2d09391f152ad2f613c59878a1a2eefa11dd77cc0c9dfa558d43b04e7e7d662d0076b31cfb89e300621484df8de27023dd3d2", @@ -15812,9 +15484,7 @@ "dceced0ab1dbb1b199163f76eaf937564800b558409e0b68824ed02655388cd0ea91b47a281d16caf35c44ef822be303f73c6cb4e934d19752a8c18e8a242aed", "a84e8e8ab436a2ab8935a04c258645d4652a603b614e9e25dc9048a2c4f42a7e796e7d4f683589aa227045b1fb32705430d6f7fe12d5d2bf9e4d4edc96f7dde9" ], - "optionalKeys": [ - "+fbca60b989bcf7cde039e4f694ad7eb0c9b763adfbe923cc2a95de4f8954d8ea" - ], + "optionalKeys": ["+fbca60b989bcf7cde039e4f694ad7eb0c9b763adfbe923cc2a95de4f8954d8ea"], "numberOfSignatures": 4 }, "signatures": [ @@ -15936,9 +15606,7 @@ "0ee0bb7e526e95dacf02fd792f40c2d62aa3d7a6534a5f34e9029c6d65020f6ed1a83fa9866a8f87ff6a00aa4269a80b69c3d9846c226695fddbd712b84740d6", "bf564a621ee8f73d5f3bf7452523f62be5bd1ecfc8e46b849db11a0dd229d3844ea0e901defd258fe837570d957b8429be7184756474a0eb33543ff04d807bd2" ], - "optionalKeys": [ - "+9185250f15044dda0e1974aa781f966ba4f0db474924e32f3e6fabbab1a784c3" - ], + "optionalKeys": ["+9185250f15044dda0e1974aa781f966ba4f0db474924e32f3e6fabbab1a784c3"], "numberOfSignatures": 4 }, "signatures": [ @@ -16094,12 +15762,8 @@ "senderPublicKey": "3a68b28b8fee550877375aafca0a036a4d448b02b7cca575968d4ea3a3e7d9a5", "nonce": "503", "params": { - "mandatoryKeys": [ - "+81d376038136b82c0a1390176c3baeb911e43bec8e4c10d923c0b2509c20d514" - ], - "optionalKeys": [ - "+8023f92be4edae45dc2ff29ec13e496fc549a0e80c3a7b2181ace82074bf10db" - ], + "mandatoryKeys": ["+81d376038136b82c0a1390176c3baeb911e43bec8e4c10d923c0b2509c20d514"], + "optionalKeys": ["+8023f92be4edae45dc2ff29ec13e496fc549a0e80c3a7b2181ace82074bf10db"], "numberOfSignatures": 1 }, "signatures": [ @@ -16221,9 +15885,7 @@ "+6edac21fb75956560f5b99e928beaae22aee74453076688e649273bdc810fb34", "0b67c6b194f2153cfd629e9e44396eb9ab06f4cb0d9c8b391354de87c6acd584cb89a17f84211112d748488faccdab7a8f9c26ff75b8dcfd2bf86f01ef97f572" ], - "optionalKeys": [ - "+8bbd33058f3b84fc4eeaeb59f36baf7a9d668af2f4b6750ac43d99345ef845cc" - ], + "optionalKeys": ["+8bbd33058f3b84fc4eeaeb59f36baf7a9d668af2f4b6750ac43d99345ef845cc"], "numberOfSignatures": 2 }, "signatures": [ @@ -16365,9 +16027,7 @@ "senderPublicKey": "18b2b319ee2369a796ee2c5e16d38cbe443ef4977a0497a34aced3ec0bc92981", "nonce": "207", "params": { - "mandatoryKeys": [ - "+0b2996b6cf46e281fb65993905355e703952c8badd4c27567e09254ee8047820" - ], + "mandatoryKeys": ["+0b2996b6cf46e281fb65993905355e703952c8badd4c27567e09254ee8047820"], "optionalKeys": [ "+86e923656854b4287614246de71d667bfdc30be9f1a45a0b32f76981083f4837", "37d7de9d18d01e2e026abe062c14aa48e63f547b143f1c7bb70c1b6713bdd5e57a51e34aecdff011a4eb05c86febc92782fa10b1b61e7b9854e7eb2a6ac05397", @@ -16507,9 +16167,7 @@ "senderPublicKey": "0993ba846d06a383877d1628b7cc6261b58b016e8b8b1bd9a96c7047effc300b", "nonce": "906", "params": { - "mandatoryKeys": [ - "+0c8a78d52d0e34c77d65182bbc44d3978c1170a64161ad4216733a62ae05f87a" - ], + "mandatoryKeys": ["+0c8a78d52d0e34c77d65182bbc44d3978c1170a64161ad4216733a62ae05f87a"], "optionalKeys": [ "+b86a6f82bb6668af9d33c92b58e0ef6889b37a38834ca2075e1dc20716a69e25", "4f1e8fccbabc77361da2f9188f4bb2198c2616097f029cb98c8d95022bfea88069e794b8495e28ee5e3b7f5fa61fc95829684bf76fb12fd81f97946dc81f5bb4" @@ -16530,12 +16188,8 @@ "senderPublicKey": "8531a4d75ef4f084573db0342bc2e99812c93b65117ae553efad37f09476282e", "nonce": "485", "params": { - "mandatoryKeys": [ - "+cc17c4fb58c2df9bb3feeaee700f3316a69ce4bafb24db2400a519e68eca23db" - ], - "optionalKeys": [ - "+9f5e5505f46fffcb1b8a751049fa6fa4df5aaa7f075cb05be444c3ac36cb1ecb" - ], + "mandatoryKeys": ["+cc17c4fb58c2df9bb3feeaee700f3316a69ce4bafb24db2400a519e68eca23db"], + "optionalKeys": ["+9f5e5505f46fffcb1b8a751049fa6fa4df5aaa7f075cb05be444c3ac36cb1ecb"], "numberOfSignatures": 0 }, "signatures": [ @@ -16577,9 +16231,7 @@ "63b120f77378fe46a6c1ccf8264004d21ed53a241d5172cab1a919472529f4e01c3601a18517c0188a1b6d7b07d8b0ea39b63ba28fd3c8720adb054c69f9415b", "3a96d0825bb95d620ebc382d8e5805e09c53138f1a94db0a4b54bc2b4d683bfbd1deb5aa8f542f66515148224b8e529e55cf83b8e95b06368f66b3996bdf149c" ], - "optionalKeys": [ - "+126494040fe787a79179d90aeb3259be1cc55c3e35b9dae86785c6ebdc088c3c" - ], + "optionalKeys": ["+126494040fe787a79179d90aeb3259be1cc55c3e35b9dae86785c6ebdc088c3c"], "numberOfSignatures": 4 }, "signatures": [ @@ -16638,9 +16290,7 @@ "+6a2ead70936e5391cba530004ca4a51cbe7506f716b42d5f7ac275135455f553", "9b728e2c79ec69fa6840e2e0cb8c12a54cd34198efa663a517cca8a79f5fe639a5b24417ef897e31c13bdfc2e13e9b6a890b847fd5e5cde56d2b457fa51c16f6" ], - "optionalKeys": [ - "+a9168a23af1378b5f34055545988651b87a4603e52e860b2d79658780b5577bc" - ], + "optionalKeys": ["+a9168a23af1378b5f34055545988651b87a4603e52e860b2d79658780b5577bc"], "numberOfSignatures": 2 }, "signatures": [ @@ -16765,9 +16415,7 @@ "senderPublicKey": "2b775b6b3ae35565d7c33f3245e8f133b55cede798047aecdeb318ee2ebe361a", "nonce": "399", "params": { - "mandatoryKeys": [ - "+44f2e5427a99af740ae1461462e390db0c76f371d2f084ab4677486401f6ecd6" - ], + "mandatoryKeys": ["+44f2e5427a99af740ae1461462e390db0c76f371d2f084ab4677486401f6ecd6"], "optionalKeys": [ "+5553c95586871d63e16ce07de4e2bf85e2dc26ce2e86679140cb3d8f3ddcf294", "355b4c8b96ab8d29f408edce8171d6c4631d1574c518515ae7344429c7ee1a0c54a26f3e757f02f86a7399ed02eb58c933ee116889db62ef1a85153ea9d7b3ed", @@ -16943,9 +16591,7 @@ "964d2a634bb495599b0ea0f0c7577f07978eee3315eda6afc2aad099cf0899a87b3fdb9e817337f367d334db32064b2be1d4d5d8ad7ec0436754eee9b22fee69", "cb6b9943850e4ea4f9f7249ecba3096c93c960e4c3638acc67a6fc9e2a8e2680a5f84b629dab007049807338637e63fb44ac47361781f672834a5628d1056bf4" ], - "optionalKeys": [ - "+ee57cfc96a9a92a87401881d8ff4f95d89a12dc0e32869b1e98035022d1c188d" - ], + "optionalKeys": ["+ee57cfc96a9a92a87401881d8ff4f95d89a12dc0e32869b1e98035022d1c188d"], "numberOfSignatures": 4 }, "signatures": [ @@ -17121,9 +16767,7 @@ "senderPublicKey": "7bae56f7cfcb6df94e4050c63d2290ff3aa415329a69ca7b29962bbb5ba0fa31", "nonce": "240", "params": { - "mandatoryKeys": [ - "+e40150197320322b801eb517557a6ec95f5d40fa98b7426dac2adba931410280" - ], + "mandatoryKeys": ["+e40150197320322b801eb517557a6ec95f5d40fa98b7426dac2adba931410280"], "optionalKeys": [ "+ea27fdd9d3631a0896d92795cfd72511494b70b629339fdfc3bfe080251089cb", "703185c11e0f1b633993682509fbbabe72288021014666d9aa74403e4a08358deeabe49e77f4b0ec15dd93da1c28bf191b0387b229dd4ba4807401c346c03c3e", @@ -17626,9 +17270,7 @@ "senderPublicKey": "c8497cb7558fca510f936386f7f53caccf337d1baf78153443e635b288209f61", "nonce": "453", "params": { - "mandatoryKeys": [ - "+3e2709e4bfde7d7c762c1536a7328ab028cd975eed2833389902078b54de7568" - ], + "mandatoryKeys": ["+3e2709e4bfde7d7c762c1536a7328ab028cd975eed2833389902078b54de7568"], "optionalKeys": [ "+d770912e16a63efbde2014b59acda357bbf9b86c000334da5cb4432916f5430d", "64d4003171bc1cd24d2ef4f8c6505fb9d8cf72fa986384fe3d729b37cdf3b3b54a41b5dc4a59505690053056e91ac05d7628722f8b0d665b8bf7569f04487925", @@ -17804,12 +17446,8 @@ "senderPublicKey": "1ca1742d1614112457b2c25ed1333d4784db512d93a818e2464c828b88a4fd5a", "nonce": "885", "params": { - "mandatoryKeys": [ - "+5a6479cd7a1868d02aea603961ccdf8709a43f6856c3ac885a2b03f24eadd309" - ], - "optionalKeys": [ - "+d1aa0b452a14283d86e9f6e80c75d1d72f1d904ad3993b66182b5a81fefd2b86" - ], + "mandatoryKeys": ["+5a6479cd7a1868d02aea603961ccdf8709a43f6856c3ac885a2b03f24eadd309"], + "optionalKeys": ["+d1aa0b452a14283d86e9f6e80c75d1d72f1d904ad3993b66182b5a81fefd2b86"], "numberOfSignatures": 1 }, "signatures": [ @@ -17843,12 +17481,8 @@ "senderPublicKey": "ced461332689de33951c1df14fcdb55ae227fc067124ad56729336df51824dcd", "nonce": "149", "params": { - "mandatoryKeys": [ - "+5f4cc92410cdb18e37aefceaf74bd3f73bd4ca8d54c7909d92e8494bf5e759cc" - ], - "optionalKeys": [ - "+8638c5d729a97a2ac437d19d37456ff3e9f885f7c0b590331578b0eecd84582e" - ], + "mandatoryKeys": ["+5f4cc92410cdb18e37aefceaf74bd3f73bd4ca8d54c7909d92e8494bf5e759cc"], + "optionalKeys": ["+8638c5d729a97a2ac437d19d37456ff3e9f885f7c0b590331578b0eecd84582e"], "numberOfSignatures": 1 }, "signatures": [ @@ -18093,9 +17727,7 @@ "senderPublicKey": "d74ba1c6e7512b9b22ef4e786c6dbb2369c3f62f360c8e32a73164332492f9ea", "nonce": "784", "params": { - "mandatoryKeys": [ - "+47fee0be7e903404b3398a0b7d1ffd18e3d6849b1346921cd7dd05c1cc98dc4b" - ], + "mandatoryKeys": ["+47fee0be7e903404b3398a0b7d1ffd18e3d6849b1346921cd7dd05c1cc98dc4b"], "optionalKeys": [ "+e7444b4259b5e170c2d3442a3b6f664f310ef6862c39a227a3dd4bce0e75f79e", "816534ed21e44ec1fa327d6e11fc83eb28bda823d2b6f3b746f43a95ccbc20d325d48f5b5e184ac2389da0082c3ce7d379e5ce850f6d5b6a4716a7c8ce42cc33" @@ -18140,9 +17772,7 @@ "c6027a1dde57c171990d259b87b0c787c86095c6d3fc3d072faac719214b8d2035bcf6819c528d0d51cc803b1cd53650321812727fb97bc176d5834c604cb7d4", "ac1f9c5afd52eba55800a418b28ab246f83242bb404e5bdf52319cd8a56ed735982a3e7162183625746121e2a53c4bf273ab6371836a7105ad463e5938190f7b" ], - "optionalKeys": [ - "+2842cdf9829d2f7e601b99bc3ea541f3656f01eb898d4056eee8bbada7eff6f7" - ], + "optionalKeys": ["+2842cdf9829d2f7e601b99bc3ea541f3656f01eb898d4056eee8bbada7eff6f7"], "numberOfSignatures": 3 }, "signatures": [ @@ -18195,12 +17825,8 @@ "senderPublicKey": "04e57a4645689a88ac4a8fe132f0bc46a5920ef25db3b337f3dac3dfbc55e644", "nonce": "246", "params": { - "mandatoryKeys": [ - "+4f5cd96b2aca783e6614559aae15b75287dce745d8ca59901776b620b371415a" - ], - "optionalKeys": [ - "+f1a46b811802abbd41f8a466348b2412b68f8ed54da89647dcd7e3a17a6a9dc3" - ], + "mandatoryKeys": ["+4f5cd96b2aca783e6614559aae15b75287dce745d8ca59901776b620b371415a"], + "optionalKeys": ["+f1a46b811802abbd41f8a466348b2412b68f8ed54da89647dcd7e3a17a6a9dc3"], "numberOfSignatures": 1 }, "signatures": [ @@ -18311,9 +17937,7 @@ "aed9d0a0d994f0facd4529498a3891eaffcb3d794cf6f544f95d74986107699e1e2d80197dafa2e6444d9b6f0cc7a3884052090a4f02c110eb5f032d58edc71c", "ecd9ea83bff64c4c9742b4b4d4e5656ec3cda1350a1f792fef24afed718686e9e7086ebce05e4cf811f0159868913e652598e9c32939f467cacc377235f1d590" ], - "optionalKeys": [ - "+7faadaba281f82993c3c654fd183072292a47a0cea9fcfc64a3c707a43f4a4e4" - ], + "optionalKeys": ["+7faadaba281f82993c3c654fd183072292a47a0cea9fcfc64a3c707a43f4a4e4"], "numberOfSignatures": 4 }, "signatures": [ @@ -18420,9 +18044,7 @@ "01a85284fd3d23a31cb17e90650c2696af11b8f1033f90032531ae72c91957b320a563e964d853860177e1da386b61774a52553597d6138b73734d79c530223d", "c90a65eebbfee7957f485a242cfa408c15a889c6a1776b03e524620d76307fe8a83fbe52b81a9a6817a1a6562b797e24d5ac6da3875322a46a3296428a2fafa5" ], - "optionalKeys": [ - "+6a770bfa1e9b2daed7951865edeb768d3c9f712a8889ce318f81a2bbd4ae929b" - ], + "optionalKeys": ["+6a770bfa1e9b2daed7951865edeb768d3c9f712a8889ce318f81a2bbd4ae929b"], "numberOfSignatures": 4 }, "signatures": [ @@ -18439,12 +18061,8 @@ "senderPublicKey": "b11d8c2b3c698566b55cbfaa3652157758d7eb5eff41de930024908469681397", "nonce": "334", "params": { - "mandatoryKeys": [ - "+a015811f3a212609f40de87c66141e3d99cf1b0b8c6a738bd502a682b89c136c" - ], - "optionalKeys": [ - "+29eba86a5b9c8a7f70db4137c220389cb1f2180cf15930f467351fddd64a38c3" - ], + "mandatoryKeys": ["+a015811f3a212609f40de87c66141e3d99cf1b0b8c6a738bd502a682b89c136c"], + "optionalKeys": ["+29eba86a5b9c8a7f70db4137c220389cb1f2180cf15930f467351fddd64a38c3"], "numberOfSignatures": 1 }, "signatures": [ @@ -18581,9 +18199,7 @@ "+e90b9461a514f008f787731ee1334371652a5c25dfabe3968c03418cfc6685d4", "2066adad09d4e7ee11af325e6de080a0531cb92b3cc32b55af4f77f38212567d436b7e8db294750a2d8c40139a1b7363d8d674dc7d760c0c080aea828466c917" ], - "optionalKeys": [ - "+0486352ae170b64ea4062ae2dca212781e46043852cd1e2b5b0517b8032d1cc3" - ], + "optionalKeys": ["+0486352ae170b64ea4062ae2dca212781e46043852cd1e2b5b0517b8032d1cc3"], "numberOfSignatures": 2 }, "signatures": [ @@ -18676,9 +18292,7 @@ "+248140c4cb167cfa0e73c75ff029f393c8fa9d002891f8800c727ae778ab648f", "d634793379494907e369a5e9bd65b8cfc8f30567d6f60d859b606f7eca35c7676e1889249cf2eb5852711a90ad8d0027ea4a9800ebc1f9d470296dc37900d49a" ], - "optionalKeys": [ - "+e5ba9edf6496bc2b9efe0774e34fcef5ed1c83ea74ddcbcd8ed74d01d61f6e34" - ], + "optionalKeys": ["+e5ba9edf6496bc2b9efe0774e34fcef5ed1c83ea74ddcbcd8ed74d01d61f6e34"], "numberOfSignatures": 2 }, "signatures": [ @@ -18695,9 +18309,7 @@ "senderPublicKey": "45f4e747dba2052a3d17e0bd8fe6f23c301cbaa1b8ac6992763969fa15f130f3", "nonce": "415", "params": { - "mandatoryKeys": [ - "+0ff0bb8bbe348898e60717d2d671d26e3c8c3a2858a021d578f17c41a92e298b" - ], + "mandatoryKeys": ["+0ff0bb8bbe348898e60717d2d671d26e3c8c3a2858a021d578f17c41a92e298b"], "optionalKeys": [ "+882d2a1748d17000dc621774499e2d3a2f1c9336b3fb826303513046891c05bb", "8777d4e83441c006fd6259271714d8fe8035ec8206600a79da586627e5ef15440af31f5389b18b7085b67c92cad1685691e98b2cd839acc1324ae4563c512008", @@ -18789,9 +18401,7 @@ "senderPublicKey": "e2485ef2cb1948eca84f5b69e5b20197b169b2306c2c726394f776f556076014", "nonce": "754", "params": { - "mandatoryKeys": [ - "+1853d11ecd7cc9222d849fb03f28428949943efecd32443580bd3f166009fe6a" - ], + "mandatoryKeys": ["+1853d11ecd7cc9222d849fb03f28428949943efecd32443580bd3f166009fe6a"], "optionalKeys": [ "+2e6830da5eb18498c72d4770295b3db9c30d6e21ede5f2dd29078a97adaecd54", "f87fccfbd4608a88b188ec49673f78edda37c05680b4b162fd84c75b4f795a41f9149ae5d0c8efb580f50a7804178360888f5680756e2506a1cf738b8187d9f6", @@ -18855,9 +18465,7 @@ "054e5e85d0e14fda7fc43d4cede1250b3f207f1e3caaf4d2c85ea4ec8d8571173b1f73314cb6d3be43b5f40b4473641c1c0f2a6858abc69f9c9039ed9eb1d484", "9e5b6a76062cad0df4790c6c125ffd8fd387d64f9802d2f04ad1ab4aca5fb14af3a5e2e59ffc65b4fba56ee2b0104d3d6b5247436e143382e086a3f685442d94" ], - "optionalKeys": [ - "+ea65110218217ec44b0e68db69d418985dd8f3ac20d62033b72c4675eabb8b11" - ], + "optionalKeys": ["+ea65110218217ec44b0e68db69d418985dd8f3ac20d62033b72c4675eabb8b11"], "numberOfSignatures": 3 }, "signatures": [ @@ -18997,9 +18605,7 @@ "senderPublicKey": "dc7d752bed8916c05cca76808b1c4073c7d4deff5b476331cafda3a2adeea1a3", "nonce": "901", "params": { - "mandatoryKeys": [ - "+315e2782c7d82b02f27be6bdc7e1de20de7de7b774409e9e495d834f42a0b590" - ], + "mandatoryKeys": ["+315e2782c7d82b02f27be6bdc7e1de20de7de7b774409e9e495d834f42a0b590"], "optionalKeys": [ "+e1aa385c2307ab7c1cb801bf4f915f4f10307449e2e739b93f7cd345160f8334", "bec151d39d4e86e199b49643d54c55a67a24d9f0300d59cbe49337f8ecf03800f671e05b9f4129a9330d1e7a68f28b045fa277338675bc09061eaa6b5a54d2a0", @@ -19082,9 +18688,7 @@ "dd76ed0c19fb728b87d3781ccef040da598773d285082bcf4ba11348d7518c05896159e8a6823295e103e3df7d6e89a6f19d851f1c712670ae4e104162dbc736", "b9272dd3b28391797b879e7a005b7892829603484ee0da10e4af009b07290e020df8ff5004eaadbe6d7080fc8b989043af7fa0f9fcd7e4edae4be23bc7549d89" ], - "optionalKeys": [ - "+7e6a1374cb3fb1415af06e535b12c3b0a3bfa0690ec247776d710de6db049fbb" - ], + "optionalKeys": ["+7e6a1374cb3fb1415af06e535b12c3b0a3bfa0690ec247776d710de6db049fbb"], "numberOfSignatures": 3 }, "signatures": [ @@ -19126,9 +18730,7 @@ "c35cfc428542130874422e531fa23d98dd79c4db82be738b2dbdba13e121c3e76f79fa0b7d99f7b91af38f17b5376858e28e6a1d1a9020fa3fea757cdd03afdc", "595c027add1b7cb6034f450cc03624bb2fc81967a2b82539e16e12d2a462ba35ad984c4e385df6cd6d9247f96e457408a570743af036783807d986dc1d8dcb08" ], - "optionalKeys": [ - "+3be6f7d735e0e1c5fa71c74e72f7c8dad294f3bfeafd1286624156bde3f22d1d" - ], + "optionalKeys": ["+3be6f7d735e0e1c5fa71c74e72f7c8dad294f3bfeafd1286624156bde3f22d1d"], "numberOfSignatures": 4 }, "signatures": [ @@ -19294,9 +18896,7 @@ "senderPublicKey": "8a4e795780bc3192539776c5fab90071b703a6dac7f569c59c9e61e12dbbf38e", "nonce": "693", "params": { - "mandatoryKeys": [ - "+fd4632e7605153e14d5d5ee3bb909ffb4f9bbfb60cc02361224d074cc26d72ed" - ], + "mandatoryKeys": ["+fd4632e7605153e14d5d5ee3bb909ffb4f9bbfb60cc02361224d074cc26d72ed"], "optionalKeys": [ "+83c663f2e8e69e0b7ad8b8095b67b80f17f29b152eb45afde531ef648e122986", "68fa066b1e0cd78d88e24f85b877bbfbed96f342d002656a92ead1cf5d34f5cb7dc2d4c803cf00f8455d02da277c8fce42312fa0e39d7d0fc883b91e81f32a32", @@ -19418,9 +19018,7 @@ "senderPublicKey": "819c38a843fe32e4c196d77cf75e0dfeb5563bb99e1c457a5c6ae8f4e917ecbc", "nonce": "876", "params": { - "mandatoryKeys": [ - "+98c8e5cb26270f3928e4ca5ba5c65e20462a6cd314db4c2efa069100d1d21154" - ], + "mandatoryKeys": ["+98c8e5cb26270f3928e4ca5ba5c65e20462a6cd314db4c2efa069100d1d21154"], "optionalKeys": [ "+007eab913a9cd7c41bbbdc43173152e748a4c4ffe50e7ee23dc8b0ea169f684a", "6c775920d27a848d07a6595e427f418d94c59ff93fd8fe85339ada6f571644e1a46e21d5458a396054e8e21e477df4fb776bc3f903705811868970afcadcd493", @@ -19567,9 +19165,7 @@ "716d81a183d4400a2d03c9bd16da9df90fe28f856dadb631c85c6af021dc7eba15275767cec1630ea13f9e20bfa349b12384738ce3f240d761643eb738a5acfb", "a20afce69c1286d3074851775a57eff870170aea5079bd0eb3685c0a5b10452625acb8a71e40e9632fb121641e0dd7a5401207fd47f0550b611b47d98e2e7190" ], - "optionalKeys": [ - "+c3e722cf88a08573785a3dba6c474ea88258fdfecc0fbbf7f74a9798457aad19" - ], + "optionalKeys": ["+c3e722cf88a08573785a3dba6c474ea88258fdfecc0fbbf7f74a9798457aad19"], "numberOfSignatures": 4 }, "signatures": [ @@ -19613,9 +19209,7 @@ "senderPublicKey": "1c2675e16272195fdbfa19ff16af58766a66daf04a972e4b7dcc4c3fdd3d521e", "nonce": "139", "params": { - "mandatoryKeys": [ - "+d82f3dde5f06ca75975acb58275cba7db319a51785a509ea3a67af1993c54074" - ], + "mandatoryKeys": ["+d82f3dde5f06ca75975acb58275cba7db319a51785a509ea3a67af1993c54074"], "optionalKeys": [ "+4da6eb1495da93989c6fe8fdd8e4965c6956f658cd6e580af6927a72794a495f", "789066ea963d8543e0de33dc3da9fafba77712d5f32c89fe3c72863ea6772edcbb0b0affe3c2a8f74830a735f04c9a7e16e763149badffb369e532f634ad67eb" @@ -19958,9 +19552,7 @@ "senderPublicKey": "5ca49b91d9dc6395ef05b160786705a698c7181a4964939b3450b0215c1fc86b", "nonce": "232", "params": { - "mandatoryKeys": [ - "+e19b40971ecbf4304c958aa2fc048e028607dd523fa0814f71fb5cf6fbde13cc" - ], + "mandatoryKeys": ["+e19b40971ecbf4304c958aa2fc048e028607dd523fa0814f71fb5cf6fbde13cc"], "optionalKeys": [ "+3444676a225555f81feeda6a69c966f9e059e90dd2c222869448e233a0bd87d7", "32ae961b668e19ac4ab13bbd9cf0b7e67663923d5eb114490e9f69b677d7347bbd7268f893033bc4014e9b8f33e4ad9c377b1af647b9655881acd045420a4747", @@ -20169,9 +19761,7 @@ "senderPublicKey": "28ceea999dd0bd894a0aeafce169421c82915b48ff51e46529fb3739242e1a4e", "nonce": "271", "params": { - "mandatoryKeys": [ - "+3145b7d2f3c38a14ea96dd7ea17acf93ed91342f9431fe1264a629a09262331e" - ], + "mandatoryKeys": ["+3145b7d2f3c38a14ea96dd7ea17acf93ed91342f9431fe1264a629a09262331e"], "optionalKeys": [ "+763f4c74b787aef2847bfc612fc2f203624eb2b075c3959bd56f934208ba6278", "c135675a3f2453e10df82202195b8acb81113bde895173d275eda8f7a4bbd25da18c482109f0016eec5f7d024bf469a666849dfbad604ada2e19efe061fb9d14", @@ -20194,9 +19784,7 @@ "senderPublicKey": "ca87315acecd42ee29f7cd95940a7937acea2a0b695e2a8686d4433d4d4699f3", "nonce": "190", "params": { - "mandatoryKeys": [ - "+ea3cc9c0254fd7bfc67e2f24fc217e4bbc5f877f2bd91a29b2a247ea54983dc7" - ], + "mandatoryKeys": ["+ea3cc9c0254fd7bfc67e2f24fc217e4bbc5f877f2bd91a29b2a247ea54983dc7"], "optionalKeys": [ "+fc36dfe7879b7a45bbc6a166a2fa4486971ec6831df6bca9d44b4d99b36b2be6", "df338998db1dbbe46029de1d82bad6f3200474ab879c6542efe523ea9c09c1ce725e4bfd417c010febbcb2e45e10d0b34a105f517049559bd729cbe8e881b435", @@ -20302,12 +19890,8 @@ "senderPublicKey": "6d4f7dee69c581fb9f7061b8c7bd57f4fef79d4c51c56eb4fb67634615adfb44", "nonce": "25", "params": { - "mandatoryKeys": [ - "+dabe245bf36ef3c7ca0d0d535987d554e761f4893e4b35ca3b547e047da56fdb" - ], - "optionalKeys": [ - "+0bfd0113197aff6a472702ade89bb2ff61358c507ac4bfea5155f853dfcf1f15" - ], + "mandatoryKeys": ["+dabe245bf36ef3c7ca0d0d535987d554e761f4893e4b35ca3b547e047da56fdb"], + "optionalKeys": ["+0bfd0113197aff6a472702ade89bb2ff61358c507ac4bfea5155f853dfcf1f15"], "numberOfSignatures": 1 }, "signatures": [ @@ -20379,9 +19963,7 @@ "senderPublicKey": "495e0222001d7284ec4297cd1b9cf79a1af608038cab0d2a82dc2312c1f98722", "nonce": "596", "params": { - "mandatoryKeys": [ - "+e9bdecbca54dde68be14ae2eeed70e0bbc95c34cc9ae008255c15f223f936f6e" - ], + "mandatoryKeys": ["+e9bdecbca54dde68be14ae2eeed70e0bbc95c34cc9ae008255c15f223f936f6e"], "optionalKeys": [ "+710ba77a8d2cdff98844865ab6c45ef1eb1d041ea0e24e00f7becc02f96a7951", "951b2a468e54b99a0ce0c9474a166c349e37dd927f0709be1071589f790f6f68edf8e622b01db80681da3a1a1bff790112cfe09e27b7ddcf2343df4aca961424", @@ -20799,9 +20381,7 @@ "senderPublicKey": "eac2a575a700943f715fbbac461bbf91b87bc3437136e829f01819e2216faa22", "nonce": "624", "params": { - "mandatoryKeys": [ - "+063a51885855786363ca31832274b17958cfc96869906317a2959237bf703166" - ], + "mandatoryKeys": ["+063a51885855786363ca31832274b17958cfc96869906317a2959237bf703166"], "optionalKeys": [ "+f7c7999e1aa86c66d0a60bc8ff3335ee86b86a6f2e2434f571edd0292919a85b", "cf153f987d8fdfeee3acfe02d7e484900c27ba3acd9010f7dc523d73c8968f2b84fd8f293949dd1044c0aa7ac669633713ac6a2e14af826c7c8098c4b26491e2", @@ -21131,9 +20711,7 @@ "senderPublicKey": "47a5a1973f25d14ba2a56e774416eef5e62889e20534f607859674e35393deb5", "nonce": "996", "params": { - "mandatoryKeys": [ - "+cc7e96c3c39d0b5e32d01faa3082f92a1a38a17840ba9b057d255c57b9840506" - ], + "mandatoryKeys": ["+cc7e96c3c39d0b5e32d01faa3082f92a1a38a17840ba9b057d255c57b9840506"], "optionalKeys": [ "+364711028c6ff958afd74d88df53302002d3a861547c6177593db980b0de3b2b", "2fef7a06a970eebeeff0aa27b746cade4a37a4a431e7b58549338da5dac77f31d87da1f28495702c2a77cfd6e16785c72bf7e0f398e17cde52a34b2aceacccf1" @@ -21154,12 +20732,8 @@ "senderPublicKey": "4cc14bbe43000ba355d84f05fb38be0c20ef244c4e9041c5409cc35f9d78c531", "nonce": "671", "params": { - "mandatoryKeys": [ - "+4c7c941fc502097aa9aee1127e7f45ac97801ea4ba4288fd9ba151ae135d5437" - ], - "optionalKeys": [ - "+7a02846c3147075d93fdc808e779b9616d97a8750f030bc7d28dad416a866d1d" - ], + "mandatoryKeys": ["+4c7c941fc502097aa9aee1127e7f45ac97801ea4ba4288fd9ba151ae135d5437"], + "optionalKeys": ["+7a02846c3147075d93fdc808e779b9616d97a8750f030bc7d28dad416a866d1d"], "numberOfSignatures": 1 }, "signatures": [ @@ -21411,9 +20985,7 @@ "senderPublicKey": "82372948117a231556d036257ddc008b31817237459a6f5f6ccf03aae5652121", "nonce": "517", "params": { - "mandatoryKeys": [ - "+bd50d997991f90b904b5aff3fc76b4cedaf4ff0905595a093d1681adabef1a61" - ], + "mandatoryKeys": ["+bd50d997991f90b904b5aff3fc76b4cedaf4ff0905595a093d1681adabef1a61"], "optionalKeys": [ "+2684ea1641e36db572aa3269554a4116f4e5bb00d11acc817567ad81c931b483", "b411e64cb9c229ba42c6558122c27e675a4b0c7a4f9a2d3bf3779be09d3d89c4870c28b7237cbcede4903cef3d0e41796597d000cd321e5b92d0028adf298e62", @@ -21442,9 +21014,7 @@ "0509e8b24ea2bac3c017cefba1f928e1ef678c3007718eaa9dcf459df1d0495f0cd7aa56f4109bc426803fc2224296f99a1aecad95353b3e7707ae9f6bdf7107", "f6bb94fe47ca776e1858b3c561111dc25d81f1b445b74def248575b22472719d60cabb06091e473d9ac57082d7ef020a55679085c2668d8d78de76405ac8ae45" ], - "optionalKeys": [ - "+a2199fe8e970cfda3d47e59e86f0c69bc02fa606c91ac941b12a3b88b933bfca" - ], + "optionalKeys": ["+a2199fe8e970cfda3d47e59e86f0c69bc02fa606c91ac941b12a3b88b933bfca"], "numberOfSignatures": 4 }, "signatures": [ @@ -21551,9 +21121,7 @@ "42859b7a1ab01cfcb9cdee5faf2486044408538bc975198d9b300458303d2467e2a230da9e95ed4afcab6fdf50bd65ee0318d23d37c6bf38d32bb90094e6a0bc", "15ffecc2314f2b817464ceffa943e4a60110692a64a0795deaa322ded3f3e959895bcdbe510ab9d3d25621ff37f3bf856e33c4ca1cddfc00f0279c0d877a2a9f" ], - "optionalKeys": [ - "+a28d47fcf5720caa9b776f805d985bf48a07555bd9daa7ecc4d0099c9921af3d" - ], + "optionalKeys": ["+a28d47fcf5720caa9b776f805d985bf48a07555bd9daa7ecc4d0099c9921af3d"], "numberOfSignatures": 4 }, "signatures": [ @@ -21570,9 +21138,7 @@ "senderPublicKey": "26f84a54ac8d5b3eea8d46dfa38070be57a3d4bb9fb6935f3a02868224da0ec0", "nonce": "983", "params": { - "mandatoryKeys": [ - "+6da09826341778d0905a1d198dbd0da41de1611fb8b019c75ccc061ff7c6dbd9" - ], + "mandatoryKeys": ["+6da09826341778d0905a1d198dbd0da41de1611fb8b019c75ccc061ff7c6dbd9"], "optionalKeys": [ "+ba654df4125c9ca29b1b7e4bea417ba670feb147cb541025d345e2cf98c50670", "92a3581f52ce2cd5af5119f3e9e685de930626a6eda0aad777c41478309f966990960a4cb5ec5b6333fe3bd9bc3c62a353e626d186815a604fa66c820aa4d51c" @@ -21593,12 +21159,8 @@ "senderPublicKey": "508b22e363432a12224afb1fbbfbf0deb1a325f47045452e15aecddd3c37d85a", "nonce": "5", "params": { - "mandatoryKeys": [ - "+d1abeb5990c9ebfd64277c5e65089f318abe4808ef69eaaf6b3433739c586556" - ], - "optionalKeys": [ - "+97368359093bc3ba4db6e3f65b3404acf6fb058b4dad51383059a9ba4ea1452b" - ], + "mandatoryKeys": ["+d1abeb5990c9ebfd64277c5e65089f318abe4808ef69eaaf6b3433739c586556"], + "optionalKeys": ["+97368359093bc3ba4db6e3f65b3404acf6fb058b4dad51383059a9ba4ea1452b"], "numberOfSignatures": 0 }, "signatures": [ @@ -21697,9 +21259,7 @@ "senderPublicKey": "61ebd9577c08c20c25414137628e6372033d6b56fa99e8632b19bab9ce5e7a8c", "nonce": "191", "params": { - "mandatoryKeys": [ - "+3e18408cf0f4a6eac1a8d7e0f12d3c43a76d7aa34ff4fba1436a52c5ef988e28" - ], + "mandatoryKeys": ["+3e18408cf0f4a6eac1a8d7e0f12d3c43a76d7aa34ff4fba1436a52c5ef988e28"], "optionalKeys": [ "+871a2ca01d90590136b8d410b7cb5acaf91666848f1be91f78934d50603495a4", "bf7dfbb51e58037afa6c84f08660b6b03fcba03759026da46bae54c92c0bcc05085685e4211519490f02b02a9406ae03ddf7d5534ecf3e693ae1f277efd1627d", @@ -21744,9 +21304,7 @@ "25020f4c5d2f5b39f5da6ba9959125d0cd0f51b1ce990bfbec479c9f0f61b71557dc5b3f1577a0465d90bcb22eefb2dcc4f70b2a83a79cd7a89c3bf00aeaf9b2", "0e66487890bf86af28ab93060b427a962811c38c1a35fdfd45c719dbb527cb6a6cefa710a14bd2fd16c756e18ae4259f6fa6f386cfbd077b920232b675d67f97" ], - "optionalKeys": [ - "+947741917447115c11907257a48ee85f8aec76ea2a28ff005c8c9025a0bfedfa" - ], + "optionalKeys": ["+947741917447115c11907257a48ee85f8aec76ea2a28ff005c8c9025a0bfedfa"], "numberOfSignatures": 4 }, "signatures": [ @@ -21937,12 +21495,8 @@ "senderPublicKey": "1747587cd799a891d450061a61c10f2e4b20be1cf6fe0d2a3293c7ba3f443d87", "nonce": "268", "params": { - "mandatoryKeys": [ - "+76f578d82b911ead9ba83dfabdb6d1663a5e556c96cf5d9f056e725bd7be2890" - ], - "optionalKeys": [ - "+4d71086e9972a73d4e5ae32b99007fe26f8c5ea61891781877fcfbd6c8e02689" - ], + "mandatoryKeys": ["+76f578d82b911ead9ba83dfabdb6d1663a5e556c96cf5d9f056e725bd7be2890"], + "optionalKeys": ["+4d71086e9972a73d4e5ae32b99007fe26f8c5ea61891781877fcfbd6c8e02689"], "numberOfSignatures": 1 }, "signatures": [ @@ -22040,9 +21594,7 @@ "senderPublicKey": "a134acb00ca888c659c883e88a8f7432bbb444e2c1553d3b512f24905c76bfe5", "nonce": "589", "params": { - "mandatoryKeys": [ - "+996a7cdc4d886fec2935b73cf5753d1d1e07ff8a305549cdee7198c69edd0c49" - ], + "mandatoryKeys": ["+996a7cdc4d886fec2935b73cf5753d1d1e07ff8a305549cdee7198c69edd0c49"], "optionalKeys": [ "+4048ab767cef16962cfc73fc68175cd639f89ae1e2c5f751917902262447ef30", "1a60d5152fa898da6af73d69ab5877109e46dfe0bd8c644676380f75212ac56e04d31c481ffc19e5cd9615852e2a2d03b87c0d1443d34080e1d5d6f6b110bd4f", @@ -22237,9 +21789,7 @@ "f2a2fcd0845a81d2c554f991ade32cae54b6d760566ab3558d125bab71331ea89a9eca354899a296c0edec6bde792028ab2f7f4a1ba8e77f6fe381753e52d516", "73729d30d4543715da4e0e0d8d8f711d050e2905e2f70352397e7b924301431a76b3001298cbe0c79b1af39d55ed8376776442c8edd7e152496c2078abc84080" ], - "optionalKeys": [ - "+bbc194985f282f79d88d747aa5525104ee44e9a6b3971d59b3bfab1c77571d00" - ], + "optionalKeys": ["+bbc194985f282f79d88d747aa5525104ee44e9a6b3971d59b3bfab1c77571d00"], "numberOfSignatures": 3 }, "signatures": [ @@ -22297,9 +21847,7 @@ "22e4313627bffa2a2445113c292db991b9595e7a0af0522d68ec107c2e7f792c3da091ae6169d244531dc99a3793b109d1fc4f3aa409f5d1c76a9da57343a0ee", "81973e2451f6a7433637aefba6190d86cd49b896c49cf4ff18d571379555aab60361bbebcb3fc86bf7401e6aa0eb293292b83bad0e075dc4265fe6bfb7b9f2cd" ], - "optionalKeys": [ - "+623b103740982dfdb4b02a333c139a32981336b4490de07017df948096dc4c13" - ], + "optionalKeys": ["+623b103740982dfdb4b02a333c139a32981336b4490de07017df948096dc4c13"], "numberOfSignatures": 3 }, "signatures": [ @@ -22337,9 +21885,7 @@ "senderPublicKey": "be679baa3367a9d9c5d4943e1076737821c544217c79ec8aac0c88e55910c224", "nonce": "618", "params": { - "mandatoryKeys": [ - "+4c2b6926f8e9e20bbffb15ed272e9388526d16ae776c503431a1c86fd41a7844" - ], + "mandatoryKeys": ["+4c2b6926f8e9e20bbffb15ed272e9388526d16ae776c503431a1c86fd41a7844"], "optionalKeys": [ "+3612dad2286bca2a7bc2cc2cf682ab0cec1796d2125482ab20dc1119616b4ce8", "a7cdf062e9025328845fa971419ded446dbc5a7e5e0cba5db60847dc990b7eeae90ed7297073c0168841cbc0f26277139eea83c0d562d6c24a910723ec5a3e51" @@ -22427,9 +21973,7 @@ "05ba094d1d69680980f5da0931c0e549dde2a4896d291e84dcbb22884c38a6fea7fabc2527629610316c4f7065ce19b1a3a7496f91606489b5bb2ef582f0017b", "1f0e256b53a831af6e4f40e8af30bb6fc4871de26b09dc8faef9e81d16d69339984320eefe001a5453b62bc466ff80e12a0c2330abd920469299ac985524991c" ], - "optionalKeys": [ - "+5a7c4a1a4b343218e1c34b98e16f371b88e873f15584d00acf3a8163fb72efe9" - ], + "optionalKeys": ["+5a7c4a1a4b343218e1c34b98e16f371b88e873f15584d00acf3a8163fb72efe9"], "numberOfSignatures": 4 }, "signatures": [ @@ -22486,9 +22030,7 @@ "senderPublicKey": "3fb152feb04f7a11a93748be2da0712fa6bc4e00c865f9ab8d86893896ed67a7", "nonce": "719", "params": { - "mandatoryKeys": [ - "+6c2c79f31143113d9169208dfbfd102becaafd37de981d4d67e93351efdc5afa" - ], + "mandatoryKeys": ["+6c2c79f31143113d9169208dfbfd102becaafd37de981d4d67e93351efdc5afa"], "optionalKeys": [ "+8e43bd597ff040e59124466769f00323237125280dbdf0b986c12f601d33e5c5", "37f8d399ac93322223d21fb21eb20ca9376cac56b000d88e3497f15add772e163dd47eafb38f47cb75f12c098af6da49aae714b23e8ba9a5103673580ff5a14a", @@ -22607,9 +22149,7 @@ "+94f6c57e69dced04a671f4f9b866a2f5559fcc0564fbb5af40d277e7a8bb62dd", "5b45914ba1dd87a75e0dd009a75001d68c9edeea977e6096161b7c538d0d372e476bf24cfa054948299e8f8d3d80b6427fc6e8eeabe7c050765c25048dc54573" ], - "optionalKeys": [ - "+dca0eb8d96c6cc717f0f90e52184c7f1021535fd20386d28b6e5e19f08389f41" - ], + "optionalKeys": ["+dca0eb8d96c6cc717f0f90e52184c7f1021535fd20386d28b6e5e19f08389f41"], "numberOfSignatures": 2 }, "signatures": [ @@ -22847,9 +22387,7 @@ "+6eddbc2a6bcb7d159f192efda65b32bb6c7763d7e23951c2a971dc3f6b24da43", "44e801233d1e23d0338b3fc47d21cf5786386e0da81ac5df8b2ca73dcbca3a9769a24cd336abba6b3bb440c0490bdade122d30e1d8d6bde790527af330cfd580" ], - "optionalKeys": [ - "+94e49357aef101f6b52b4c2970779c221af811684d81f091642512222ba9f084" - ], + "optionalKeys": ["+94e49357aef101f6b52b4c2970779c221af811684d81f091642512222ba9f084"], "numberOfSignatures": 2 }, "signatures": [ @@ -23554,12 +23092,8 @@ "senderPublicKey": "710160121dea967a8695a1f8d21a73c3b9e73cc429e68b76097528b5efd92f5a", "nonce": "920", "params": { - "mandatoryKeys": [ - "+090d02bb18126dce72cd8da9d39a4058ede616240a2ddb2e898dc636bdd83661" - ], - "optionalKeys": [ - "+fc0c8fcca1eeacbe2ab8dd2c5f2e2647da1fad401ab1916365f61b186c8e3d22" - ], + "mandatoryKeys": ["+090d02bb18126dce72cd8da9d39a4058ede616240a2ddb2e898dc636bdd83661"], + "optionalKeys": ["+fc0c8fcca1eeacbe2ab8dd2c5f2e2647da1fad401ab1916365f61b186c8e3d22"], "numberOfSignatures": 1 }, "signatures": [ @@ -23700,9 +23234,7 @@ "senderPublicKey": "700a33059997af1e200a81935e252d79485f739816c42d24c632ba07d1622bed", "nonce": "490", "params": { - "mandatoryKeys": [ - "+ee39459fc0f6341a7dd587407b57fa0c245e1ceb4155a26c96d4184321d3c2c0" - ], + "mandatoryKeys": ["+ee39459fc0f6341a7dd587407b57fa0c245e1ceb4155a26c96d4184321d3c2c0"], "optionalKeys": [ "+faa997aaf27875500de378bf31fe38151f29b5b5918164681d5d8dc08a731004", "22349b77b3345eb019936db2d492d1ff0bbf02475f42719fca6709cf9468bc4bde0548ae8920266b4fb8cf73e2c88a94f7612eba5cb5b2d00d21b8445578165c" @@ -23846,9 +23378,7 @@ "457e85bdbf70c6084147dd09f541ffb733cda3c7d48c43d187c02761eaf92dafd5b1e63db4fed5c3c191e00e0d1644ab602c5e7e03896a6c9646fd61eb9495ae", "f8ecdc12282a76a739a4d29e4a4bd8024317f38df27b184205fd42f2d73dacbaed1e25d0d749eae8e29fc070bfde6ca32e135a04fc12a74482f85649c8e9f8dc" ], - "optionalKeys": [ - "+210807f2f740a3db3841cefa60ba7123d16a69ce2ac0bda29d0f72717642944d" - ], + "optionalKeys": ["+210807f2f740a3db3841cefa60ba7123d16a69ce2ac0bda29d0f72717642944d"], "numberOfSignatures": 4 }, "signatures": [ @@ -24038,9 +23568,7 @@ "senderPublicKey": "a273f4749fe66621d2b78cd889af8a45e610930e7b3a7ba9f45fadd0389e814e", "nonce": "896", "params": { - "mandatoryKeys": [ - "+600bb6bcab3fc4a1a692535e33334a24939116598fdd775ee54cb98c1402b4b2" - ], + "mandatoryKeys": ["+600bb6bcab3fc4a1a692535e33334a24939116598fdd775ee54cb98c1402b4b2"], "optionalKeys": [ "+e6b08d02cccb0952cffcff38c5634b1da1b535ba7c798fd14a610cb1a84da8ea", "d1f41eeb85b01e553ad9d835834acd2c522c60e1afd7cc67449f2b4ecf33a353418b5e658b92b9c93201240116c821accf55d433871e36fada866ecad81006d7", @@ -24104,9 +23632,7 @@ "+253a560df3e63dd6c8cac1d6f3e1849787e5141291282e27a338e42338f65f9a", "ce2dc5100b463580f884b6209f78a46963fb0546573a5349642a11d4b80349301b3ee8c16e660a65a173772062647c5bd3903b8ef300896c61756e53b2e45acc" ], - "optionalKeys": [ - "+95395418e2768bf270d3908a1e7ca667a3cbbfdb48ffd7a5b711f5cb5517e20c" - ], + "optionalKeys": ["+95395418e2768bf270d3908a1e7ca667a3cbbfdb48ffd7a5b711f5cb5517e20c"], "numberOfSignatures": 2 }, "signatures": [ @@ -24182,9 +23708,7 @@ "senderPublicKey": "dfa0ade910cd3068a76cf647264978ca44d2c9d869c0419fec6fd2a2ed22f4c3", "nonce": "405", "params": { - "mandatoryKeys": [ - "+ffdea3ed78d670569a07ff9f76dcc3957e2ee5a6242d62d451f40ae95cdb700b" - ], + "mandatoryKeys": ["+ffdea3ed78d670569a07ff9f76dcc3957e2ee5a6242d62d451f40ae95cdb700b"], "optionalKeys": [ "+83ffba527a923a754fc5fa83afe2ccbc13cf73111420c9eb5eb172662baa0506", "d2393b2a3572cc51a19f48228b2046e87c156f15b17109c834c9972ba3859b0d0a869049b63d00569315212bcde10676b98ff98b9e3ba53949c95d835536885e", @@ -24456,12 +23980,8 @@ "senderPublicKey": "b572a85b3d85f5891399b27e1cb06bb180131c3ddc146d12f2d5580018bd70fe", "nonce": "482", "params": { - "mandatoryKeys": [ - "+a96af9c447829e53c67eca16b26dc4c2cac8b3392c2db82f3a5cc401cdd373fa" - ], - "optionalKeys": [ - "+1dc211478d8cfb69ac65c9fb8e1bf2e74db9a0d0cdc4c499152d1dec02d9ea56" - ], + "mandatoryKeys": ["+a96af9c447829e53c67eca16b26dc4c2cac8b3392c2db82f3a5cc401cdd373fa"], + "optionalKeys": ["+1dc211478d8cfb69ac65c9fb8e1bf2e74db9a0d0cdc4c499152d1dec02d9ea56"], "numberOfSignatures": 1 }, "signatures": [ @@ -24702,12 +24222,8 @@ "senderPublicKey": "a3c7c1ff8670ce675e340618823d63f70bee8d103236f0bad5aec69b9b09a0c5", "nonce": "634", "params": { - "mandatoryKeys": [ - "+7bcfd9a2470932b4a1695dc8d95487cf41fea97822264b0375b933c5bf1cf743" - ], - "optionalKeys": [ - "+ba705159e49e007bc3df14ba4ea9baadf82567a113fe3dbf1b0c7f31a5a0aced" - ], + "mandatoryKeys": ["+7bcfd9a2470932b4a1695dc8d95487cf41fea97822264b0375b933c5bf1cf743"], + "optionalKeys": ["+ba705159e49e007bc3df14ba4ea9baadf82567a113fe3dbf1b0c7f31a5a0aced"], "numberOfSignatures": 1 }, "signatures": [ @@ -24825,9 +24341,7 @@ "82c46dd00e90cbe89eb72251799cb7f605dea08d9d11f93cd0e8330ae37620f2e9c5eb98ea44abde49b31005ea7ab9e661dce946629cff5a0ebe64655c833dc6", "f49069f348cadc4e06877013b4b1bdbff7a3a09289a7f24a4076e1b728780416b3189838dc4d1afb599872e858ce7859078181ab829415deb2dee656ca11b1ef" ], - "optionalKeys": [ - "+10b765f5510bf75c2457950c4ae0e633fcafc83b6bdf5f0ef76865fe44001315" - ], + "optionalKeys": ["+10b765f5510bf75c2457950c4ae0e633fcafc83b6bdf5f0ef76865fe44001315"], "numberOfSignatures": 4 }, "signatures": [ @@ -24863,9 +24377,7 @@ "senderPublicKey": "7e6d0245acbd624235eff3f62640dd66985dfd3edcade61586c033ce93756ab9", "nonce": "281", "params": { - "mandatoryKeys": [ - "+bf0d0d304287295e5fe1ac0ad3e446fd46c097841ee3848f27c8b5a2e4e7543b" - ], + "mandatoryKeys": ["+bf0d0d304287295e5fe1ac0ad3e446fd46c097841ee3848f27c8b5a2e4e7543b"], "optionalKeys": [ "+3335106bc36a366727f889cc5b263fb6fdf0cf991b10c542fde906c9cbb56e6e", "afea24f664acc3ca0ea1f2ed7d711bf453dac97e83c58a73215d9a3630279651eba60c2d813baea650e59cf3bf5f7840534922a1854d010a2b8975642ae1a517", @@ -25245,9 +24757,7 @@ "45ec37a6b6cfef7f9ee69296dec0bb6e4d09196cba463ec82fa7eb27f2b0a97038bf5bbe33f38923331715b30600f6e002e2f74c5fc35b951c86abf0a3f5ca30", "580fd1bc0cce205b092630da1d9a3946bdac89d74425e60132742ee42dee84cae1a668ff73ccae36a4569f353521475034adb5a390fd6ff3721639ef98a5914d" ], - "optionalKeys": [ - "+5d17c0c0834415c143028cd0e351a6b6ba455f2d01c204e9a7eaf626ecedb331" - ], + "optionalKeys": ["+5d17c0c0834415c143028cd0e351a6b6ba455f2d01c204e9a7eaf626ecedb331"], "numberOfSignatures": 3 }, "signatures": [ @@ -25302,9 +24812,7 @@ "senderPublicKey": "e700ff2f2dcd3c59932dd6ac1fcdee8cd1d0a8857711d6a1285c7e62bcf43e70", "nonce": "421", "params": { - "mandatoryKeys": [ - "+90172ab2a86d8147f01beb2d93ae076df292dad75f0346d513611114c92d8ff3" - ], + "mandatoryKeys": ["+90172ab2a86d8147f01beb2d93ae076df292dad75f0346d513611114c92d8ff3"], "optionalKeys": [ "+d844346cb5870f1aa64f86f30088cece78c02201c51d2ee4fb2fc298d5452c7b", "ffa7c646224643d24654bd6ca51167cdfc86e5b94240881837946f5983f6f0a0ca3ea696bf4f53d602d625ad539c4b47283f3081e1ab8e47f589794e64401cc5" @@ -25743,12 +25251,8 @@ "senderPublicKey": "0a7576eb7e2493748929663c89aaba7ebc4a5ac899648c7289cb86fdcef46a0f", "nonce": "64", "params": { - "mandatoryKeys": [ - "+f2eabf1462ab520ef9e5fbea89728d40d6c6e9af922407f2c97e69c5d8a1c36e" - ], - "optionalKeys": [ - "+f2cd1f94febde89f34291b64e10ca72cd3aae4a765b76d55828bcd6f39cef448" - ], + "mandatoryKeys": ["+f2eabf1462ab520ef9e5fbea89728d40d6c6e9af922407f2c97e69c5d8a1c36e"], + "optionalKeys": ["+f2cd1f94febde89f34291b64e10ca72cd3aae4a765b76d55828bcd6f39cef448"], "numberOfSignatures": 1 }, "signatures": [ @@ -25947,9 +25451,7 @@ "senderPublicKey": "89eb3a8f1f15958f509aa1af2baf74dadcc6015ebd6dc02b5b41e9ab00093dbc", "nonce": "977", "params": { - "mandatoryKeys": [ - "+29dd7add5c6cfc20e518740908f59eb3d8357d909eb55d228c6d73dadfd08b06" - ], + "mandatoryKeys": ["+29dd7add5c6cfc20e518740908f59eb3d8357d909eb55d228c6d73dadfd08b06"], "optionalKeys": [ "+fe64c508961f3ba65921d9f509c76b4258fea93861a5396be9033b42652e8e82", "b24d7f0077c44eeaed19a99518a16b681f0422a544195c811ca7ed555361c3371e5e854e18a59eb4bd6b136dbe6b885e91caedf4f5d002815d7ad1925ef17ac7", @@ -26042,9 +25544,7 @@ "senderPublicKey": "3618676170344331812da3a72c8729afb151eaac3380fb551f327a259735d3f9", "nonce": "221", "params": { - "mandatoryKeys": [ - "+ebf623ebd5798a9b8a4396e00efc2a60231ab9412ea3ed7052618069bf7e6ebc" - ], + "mandatoryKeys": ["+ebf623ebd5798a9b8a4396e00efc2a60231ab9412ea3ed7052618069bf7e6ebc"], "optionalKeys": [ "+87638c3fbfc77ec33129a64f9f4777fb31b10e7e8be9b877849e6c5a7e9dbf1b", "9650e3d8bdfea413b295e06a7cccb2a44254bec66aa446046fbb1ae4cb307425e0e1e1a45aa1bfd77b1702fabf1f9923322a494cd2fc5bb3909581d0cb5aa7b9", @@ -26067,12 +25567,8 @@ "senderPublicKey": "9f722b3c1c62525b5331875476706a2ebec4eff9a8d706a2997a903dabc46b73", "nonce": "184", "params": { - "mandatoryKeys": [ - "+c50b728e5d4919d03a26425c9189538a7005f3ddb874380c9bf259088c56d15a" - ], - "optionalKeys": [ - "+226d03683d242d723341ada8b14dadfe14af575ff2fb5ca589d3ccaab1f20082" - ], + "mandatoryKeys": ["+c50b728e5d4919d03a26425c9189538a7005f3ddb874380c9bf259088c56d15a"], + "optionalKeys": ["+226d03683d242d723341ada8b14dadfe14af575ff2fb5ca589d3ccaab1f20082"], "numberOfSignatures": 0 }, "signatures": [ @@ -26171,9 +25667,7 @@ "senderPublicKey": "04d6b63c6396230724f410b2a70699031bcd542adc84b60ab5ae2a8bff703acd", "nonce": "902", "params": { - "mandatoryKeys": [ - "+0becfbe12d9ac84f4700e77604f93a16084a5d7c2f5395df2135f6a0d6dab3f5" - ], + "mandatoryKeys": ["+0becfbe12d9ac84f4700e77604f93a16084a5d7c2f5395df2135f6a0d6dab3f5"], "optionalKeys": [ "+0cc82f6decc06d6a39327aa24c872a43803be8496cbab4eb597422cdd8a59929", "7224957302041431df493a5efb6eeb8a06569e86acc333066669341f0836b00dfdefde71f37a0b49b04d72fa1de4a7276d7b2e734391e02b6be1daf991bde3c4" @@ -26213,9 +25707,7 @@ "senderPublicKey": "48986211ae2aee9715700547a973e7ddb40f32724cdd743495f4fcae48b85a93", "nonce": "25", "params": { - "mandatoryKeys": [ - "+7f9788eb287c21f5b9f6b4cf332ce3d899bab452b7751cee18befb1289b89311" - ], + "mandatoryKeys": ["+7f9788eb287c21f5b9f6b4cf332ce3d899bab452b7751cee18befb1289b89311"], "optionalKeys": [ "+da5500c4af1bb1087f9c33fc9ed2298f5c34d14637f17e81db0abfaf0a10b1cf", "bec7f24df79a1b9de31107d822bf19a4841c2b5bc8d4d3992445ee96b30a6739dad37ff61df524acd192ab1cbb18fd264e766b81b1cf350b31588a1b2fa1c54f", @@ -26263,9 +25755,7 @@ "senderPublicKey": "61af1fe7a42537baacf014772fa82c28eb91eeb7f46a00bd5488ae5ccfd739f2", "nonce": "816", "params": { - "mandatoryKeys": [ - "+76e5e0b12717de26e9bcd90c03c048183797c25e4896dd7ef89b4ebf12fa6b10" - ], + "mandatoryKeys": ["+76e5e0b12717de26e9bcd90c03c048183797c25e4896dd7ef89b4ebf12fa6b10"], "optionalKeys": [ "+c0f03da0446591bfbbc406fb275582911f4f004a9531b057fc168be8acd425a5", "02391b38a76ba4f9c136404a89d4e4aba21305b00c585d72cf13d85caf9a367e7eb5eb44c1e816e609effeebe38a5411c1d9c24e85786f0b97c53d7ee14b6f86", @@ -26383,9 +25873,7 @@ "9e826d0ed8c388516e82ed3e4b9d7ed0f30577d0bebfea7a7f701733917aa35a7523e0714fd293b076dd7b9ab2a869a6e28e80185ae5b5ea4e9cf1f8ed470c4b", "30e0b2bca8efb5b2d50bb5e1c0109e1cee1d8aa9703bd5653931b86c8a4c55965cd052f703d2ddd38000456970693b7d6a0b0f2669aef2fdf71a634a75bc4e32" ], - "optionalKeys": [ - "+74681d94a1d6eef1aaf92d0e4aa0a95c772316aefd29af878f4920c55dd610db" - ], + "optionalKeys": ["+74681d94a1d6eef1aaf92d0e4aa0a95c772316aefd29af878f4920c55dd610db"], "numberOfSignatures": 3 }, "signatures": [ @@ -26407,9 +25895,7 @@ "30c84439d592b82845685ddb824d0310d6f54d11811ea5b0cffec7a6e9ca2770c37100d897f9b0cea72539f25ae8d782679f713f4cbc69b2b4ada073dcdf4998", "51b71cb318029bbc4eadee80096bf0690553e7b776ea34f6be42cbc3cbdcfa6b7300943f8104e57a20e3377853f5267cddd43cc9d818079a0c84e89f6a6ecdd7" ], - "optionalKeys": [ - "+b59e5040ae0a6d919be515b7eff9948c7ab18df5403ed8d6f10e47c5cefc272f" - ], + "optionalKeys": ["+b59e5040ae0a6d919be515b7eff9948c7ab18df5403ed8d6f10e47c5cefc272f"], "numberOfSignatures": 3 }, "signatures": [ @@ -26757,12 +26243,8 @@ "senderPublicKey": "2c95a7b1a22c00a25ed676371a43b675c819b423a79ed7e6172f1d749a5aefab", "nonce": "831", "params": { - "mandatoryKeys": [ - "+01a2d38b99658d1c8320ed84f9fdd0703379b1bd0854ea9b056f52405a145838" - ], - "optionalKeys": [ - "+e15cdc67116ccf21f9299cc0d1ca09a0079ad26a6223a2af012b7f933d5cf487" - ], + "mandatoryKeys": ["+01a2d38b99658d1c8320ed84f9fdd0703379b1bd0854ea9b056f52405a145838"], + "optionalKeys": ["+e15cdc67116ccf21f9299cc0d1ca09a0079ad26a6223a2af012b7f933d5cf487"], "numberOfSignatures": 1 }, "signatures": [ @@ -26840,9 +26322,7 @@ "d91724aed4001bef4cdb8210198977f984cc560a2343ff4410473b1e07f8dabfcc7ed8e86c0525376186e1f352b4f137fc8f562bc6397ba2c4ff355b5cdee7d9", "43dae780a4f09abdbd32f7aa2253d2ad551917855449060bf76d8e2b0f24913d64a211ca505f4ea2fe4d9169f6b4ddaae7535537493c640b3a05e84eb355db53" ], - "optionalKeys": [ - "+517196d87c6e6f5eaec8732a123247c478a7a86692a979249b6833e1acbfb70b" - ], + "optionalKeys": ["+517196d87c6e6f5eaec8732a123247c478a7a86692a979249b6833e1acbfb70b"], "numberOfSignatures": 4 }, "signatures": [ @@ -26903,12 +26383,8 @@ "senderPublicKey": "600cf5a2fb35577410711fb0a8935d13ff350dfa2f6e156222f418c50287cf52", "nonce": "849", "params": { - "mandatoryKeys": [ - "+08d9d306bd27b83134cec6ef08e71a4876554a75c61f9d8029b1c0958b867ba3" - ], - "optionalKeys": [ - "+f87e20b6c99bb8b0cf8b6aff3f2a70bf1e7da4808953fd9c40fd7d58951ca12c" - ], + "mandatoryKeys": ["+08d9d306bd27b83134cec6ef08e71a4876554a75c61f9d8029b1c0958b867ba3"], + "optionalKeys": ["+f87e20b6c99bb8b0cf8b6aff3f2a70bf1e7da4808953fd9c40fd7d58951ca12c"], "numberOfSignatures": 0 }, "signatures": [ @@ -26978,9 +26454,7 @@ "senderPublicKey": "52f87bf85c7757d88ae1c2935d1605bb2e05b794259a1bcea550d1ec4b76d4aa", "nonce": "812", "params": { - "mandatoryKeys": [ - "+32b172283b7ef3e0194e82f1d97a12d1ebbb9980fe0ea2f8d89fcc1d21252122" - ], + "mandatoryKeys": ["+32b172283b7ef3e0194e82f1d97a12d1ebbb9980fe0ea2f8d89fcc1d21252122"], "optionalKeys": [ "+4080999ec36f182c8d6a6f134623d3684ed04e7f2008b772f3b96b976900d4bf", "8584c53c28abd847e2796de13c0ca3c0e6e3083950ca7650ccc2b9309df5613f43f1dfc127ea80a500dcb52fcbfdbc60afe38d8c8f9a4dbc53c804294a095088", @@ -27143,9 +26617,7 @@ "senderPublicKey": "e9244a4b97879a2a6e15f06112f6f7777ffed9533e635c35466e61d9af544680", "nonce": "615", "params": { - "mandatoryKeys": [ - "+a75b61967084c1827d0bce07cf441cea2d02be17cdf224c33c39a19c49a6d8cd" - ], + "mandatoryKeys": ["+a75b61967084c1827d0bce07cf441cea2d02be17cdf224c33c39a19c49a6d8cd"], "optionalKeys": [ "+6cf6ac443ddddbd21674b909feea93edb39e21df0dabe7c2c0c0d635b29e24f0", "278f8f5f5e7046c2f4f2ae658d2f6cab0d11713771998528ccf8e8bfc6fa30fc676cca22f377750a8d137e00983ce01fc16e5b4bf55033f006f142f56aa861f8" @@ -27249,9 +26721,7 @@ "senderPublicKey": "a72467e3d25e4aeec96ed07906bcb21d8419fbbf726359667cfefe95af964d2a", "nonce": "570", "params": { - "mandatoryKeys": [ - "+fc23a3087c912ed59dc24ccf873c71e4badfc78ef9ae2b7d78eabd3d88e09b1e" - ], + "mandatoryKeys": ["+fc23a3087c912ed59dc24ccf873c71e4badfc78ef9ae2b7d78eabd3d88e09b1e"], "optionalKeys": [ "+23f3cf03cc154f1fbd8d0b5501d36b5fa3f8eca927bf0a1fdf0adc175ceba656", "5348485ff2cd7d6cdada0e89b2945d2131dce1a693cd4bb05c44acef6807dd2038c11e036de509a7c492747ac69ee540b836f326faea2e8fdf0291e937d70337", @@ -27359,9 +26829,7 @@ "e9c32c9f368e420efce2bc1000713278b9d4c1ca36eb4bc6fcb5f35eeced0f81c31b99be69db90451f6fb6ca04c7c60b75d579ae942618aab4794909acaf5694", "dd91841905ac015d0522c043e6e5ba1b17afb5d4057466e735b87eda1912efa3635efb1f8e12f7f1d6f5c4f8cce900d2447e6c846d9bd028d6e572b15e53954e" ], - "optionalKeys": [ - "+6337b599c7ac642d85d8afd3e25f1f6e08db61bdccaeb30143701ef2085e46a5" - ], + "optionalKeys": ["+6337b599c7ac642d85d8afd3e25f1f6e08db61bdccaeb30143701ef2085e46a5"], "numberOfSignatures": 4 }, "signatures": [ @@ -27433,12 +26901,8 @@ "senderPublicKey": "13fec3ed84eb858308fbedc73c66719a662074166d1abaa7a54475ab68c3559f", "nonce": "486", "params": { - "mandatoryKeys": [ - "+78de0874a97a68f8b9e3cf7d3b361beb5532f88397db4b54765f5e3ac7bd4372" - ], - "optionalKeys": [ - "+d71a727b78bf6278c38364d005e44ddfed88c91707af82243013a9e9521a2b41" - ], + "mandatoryKeys": ["+78de0874a97a68f8b9e3cf7d3b361beb5532f88397db4b54765f5e3ac7bd4372"], + "optionalKeys": ["+d71a727b78bf6278c38364d005e44ddfed88c91707af82243013a9e9521a2b41"], "numberOfSignatures": 1 }, "signatures": [ @@ -27472,9 +26936,7 @@ "senderPublicKey": "abd894fa74fedc5189e5df99b833f5aefaa86e22111fd98bc79902ee90531cef", "nonce": "501", "params": { - "mandatoryKeys": [ - "+e710c24d16fa0cbc8d76cf153b73cf38149f095a69fefb116fe8346ccad1c0ee" - ], + "mandatoryKeys": ["+e710c24d16fa0cbc8d76cf153b73cf38149f095a69fefb116fe8346ccad1c0ee"], "optionalKeys": [ "+90fca63070ded6181730be6ee05f07b3a4411cb180f1e752699c958918d488fe", "3aab2c2e886000cd60b2881295eaaf1fccec2f0bc2d16109f0f19d70da09ceeae46b309f38c53497de1e9699c2347ae6aad77b1d291f73b7a5634408428205b0", @@ -27591,9 +27053,7 @@ "cbd9616dffe653eaed0a6797df3411c5d9f58fdb3f9abf2ea0541dba2e23bf318f4e60ec99bbc8845d112ebe715e86ad6b3b72a4069242b229ff0ac3fc9a791e", "4abd5d32d83c3e0405e70c045f883f1cf06d560534ebaba8ffbe7f67456a33a325ca5c7bde309d5ff7515af233ed350de037297fcf17851c0843bfdaf1d83530" ], - "optionalKeys": [ - "+120331d91e8f7a12da2d2208179187b06da3473254178aa303a4dd42e0ce9d49" - ], + "optionalKeys": ["+120331d91e8f7a12da2d2208179187b06da3473254178aa303a4dd42e0ce9d49"], "numberOfSignatures": 3 }, "signatures": [ @@ -27615,9 +27075,7 @@ "c33d81d34b0ffc04e2d924b4652da915f5c3cf0ae85f0d637bbe4c8792e026d1dbfe8c344d39d89d5b898eca666e86c880927d4220bec485316c87eaaed55afe", "2d70ef680585b857f1dc27f865b5fc754bc73dca282b92804b475835b02d569cc2f400e4cc0404da8eab3d57659daa85287ea5d72deb5c46d559a86a78a2a134" ], - "optionalKeys": [ - "+49bed365a98e7decc1f6efaf796fc4d7a8c199266eaff3aeffa5a9c436be45c8" - ], + "optionalKeys": ["+49bed365a98e7decc1f6efaf796fc4d7a8c199266eaff3aeffa5a9c436be45c8"], "numberOfSignatures": 3 }, "signatures": [ @@ -27744,9 +27202,7 @@ "senderPublicKey": "8b5873bb1cea1fec9c04b6eead8f25aa651324f1abe10fcdc02336afe7dff65a", "nonce": "533", "params": { - "mandatoryKeys": [ - "+4ffe1943e1e4fad5aa78961e34a3a80d2af2af667d5a326564acc1b294bcf547" - ], + "mandatoryKeys": ["+4ffe1943e1e4fad5aa78961e34a3a80d2af2af667d5a326564acc1b294bcf547"], "optionalKeys": [ "+337093202a616e241b19300d7c5b45b970b236f7243f2870602187c5818bad87", "1bd928e4a01942e2514122c0503b680b1019d2d57908c1c87064547269e62f1289bf32e103f34e3ba65d4ce471df68eb05cfe5448a964c46bee5a998403c97d3" @@ -27877,9 +27333,7 @@ "senderPublicKey": "b13e740b1b1f213a64b51517054d9fbca5e4f485b6844ff2098e7b40867ce82a", "nonce": "917", "params": { - "mandatoryKeys": [ - "+e2e89982a76eccf377960373fb8235630c28ef9e76b2cdc014d046e4f905edaf" - ], + "mandatoryKeys": ["+e2e89982a76eccf377960373fb8235630c28ef9e76b2cdc014d046e4f905edaf"], "optionalKeys": [ "+92abf7d851f58dca3085bbda7cf650b2d07a86d08bc93aa9d22d45c8a12ad19a", "0e3eca53ab671fcd3b9d38118378b79d4b946e7b527585a9ea6b7fb51af53c0688a03ded7fe4cff61ba7ac77681c0c0b747a9f32b922d4a1f3d0d3c91ebd2bfd", @@ -27905,9 +27359,7 @@ "+707c22494c3f409ca0151b2553ff1b31a445181e5bcf8814634fdf457e7e2844", "ddf8321399e775c8a5913f64d05821664818a9adff47a5e19e1fede9685514e105ab258420949d1fbcb0791632c5ded81ac902d7708b5942cb07e36b2ce65d07" ], - "optionalKeys": [ - "+19f198e25b494940eb6edd6057c8b287e3efd306fbbe470954080d029986b4cb" - ], + "optionalKeys": ["+19f198e25b494940eb6edd6057c8b287e3efd306fbbe470954080d029986b4cb"], "numberOfSignatures": 2 }, "signatures": [ @@ -27968,9 +27420,7 @@ "+ae9b92666ebd8e53e3cc11c34dcef3edd811f8c50418e6f5455423265ba82bf9", "196aa5edfba5fe184ef5726e9230ef38a0ec4ca129d50951193a78ce5fe99a7ce4d1fb695f6303f664cd509f1074fd2fbc746cd2888e4110392b76162705e15d" ], - "optionalKeys": [ - "+baa05541b96aedae53acd70e24e6aa42cca8dd5703674d2ed9358cbf92886db3" - ], + "optionalKeys": ["+baa05541b96aedae53acd70e24e6aa42cca8dd5703674d2ed9358cbf92886db3"], "numberOfSignatures": 2 }, "signatures": [ @@ -28227,9 +27677,7 @@ "senderPublicKey": "1813854e02fb66744e27e731f2c77250ce5f8c26762389a6378c790d2b4cb90a", "nonce": "149", "params": { - "mandatoryKeys": [ - "+28d3172848b51cd970e9a873d05a92eb38d3b46bebd3777305dc9fc032ade936" - ], + "mandatoryKeys": ["+28d3172848b51cd970e9a873d05a92eb38d3b46bebd3777305dc9fc032ade936"], "optionalKeys": [ "+8b06221aeb35d54f095732a11cd79acf014095086d01edc31a093efa5e7d1066", "ebdbc74eb6c86566c5e9b780b0936c4f04bb360d47894a85268a7b50bc53c8f2d140c469f94aedb82b8591923a5cb7d26a57104a38e6c86b6d910f379f82b10f", @@ -28256,9 +27704,7 @@ "+bc35fd4247e199ebdddb069de5f52fcacb0c3311fcf8e6893b3736525de85637", "7a33002c35ba0c8773ee518c344eff4c89e15e92ada53ba974d7f1fc0e1e4c7dc9edced3ca4b5d02e9a6c55297a75d524a4260c6457409981d6d769e66fbdba6" ], - "optionalKeys": [ - "+8090de23d2e098bc02d21c8755ca591c599ed17efed89166009f6d38be138fe4" - ], + "optionalKeys": ["+8090de23d2e098bc02d21c8755ca591c599ed17efed89166009f6d38be138fe4"], "numberOfSignatures": 2 }, "signatures": [ @@ -28541,9 +27987,7 @@ "senderPublicKey": "01d17a491f9218982063e6f0cb141130ab5b61ac655da3995be338bca4537e1a", "nonce": "148", "params": { - "mandatoryKeys": [ - "+8bc3bffe5f63180458680ed4a6bac1e87013de93d708eee65f6445b7fa93fc90" - ], + "mandatoryKeys": ["+8bc3bffe5f63180458680ed4a6bac1e87013de93d708eee65f6445b7fa93fc90"], "optionalKeys": [ "+c77d54b86ea1d49bdf4330d2d61b6f87a977f70019546d4f3cb5f7c60095d610", "501912469613897a342309df1118b919bd40b376d7863771111ee43e69744cdd9fdfc8ab412c54776ff64126d9486ae2d61697cc26678c9bbf4953455bab0d5c", @@ -28626,9 +28070,7 @@ "+bb694a25ae9e7bb3f40599ffd00fe3881010d6398a4f9ed3177d7cd69b732620", "5288830a986407f6ee277431f59bfa493d8ceb34da1d96ecd87db3e1a8c2cd95c1e1f0d07cc300b13e1a16a9000c5f2861ca3aeb75e2f0ea521ea177729e1d2b" ], - "optionalKeys": [ - "+2cf3c582b953a571058d5bac33b61cdc0fd4a32947b8c723d802e2285b99e99f" - ], + "optionalKeys": ["+2cf3c582b953a571058d5bac33b61cdc0fd4a32947b8c723d802e2285b99e99f"], "numberOfSignatures": 2 }, "signatures": [ @@ -28690,9 +28132,7 @@ "1e37a4c11ecfeb52126f49e0109391cb69e42fea37c5bf1100af476bf7a6d54dba16ed31d0078be82abfc36ba63b345d0e319023a609c20e9a2393ae5d9ff962", "316cc2d44bbc5134e7c895b29e4a1938f713db3129d3ab1bb76633288bb19f3d0567690f3f511d64e56d2d98aa99fbe07471d09bebf637f86b7535b758937876" ], - "optionalKeys": [ - "+663c3c73f5e463ad1ae45d5f2b315d042c90e827eee686912385c4c3a20f9eef" - ], + "optionalKeys": ["+663c3c73f5e463ad1ae45d5f2b315d042c90e827eee686912385c4c3a20f9eef"], "numberOfSignatures": 3 }, "signatures": [ @@ -28750,9 +28190,7 @@ "51fe1bb4a7000ac0b58b48cca6b9a1f7febf28ef02fed01950113db0d4f16c941cc698308b65a20ff3af9b9f50dee54212aa79dd4ada36160445abb4011f8b4f", "3a44dd929e5d92dab97e3b6253973f67cecd8224954790153dbdb11111820804c0c0d7e0b87710a0e1da7e799534b16feb975360d9022fb18fa550f11b7de390" ], - "optionalKeys": [ - "+43a8614b287f1c67b614d53cea8372812c039c2e155d5e8123caf85810775525" - ], + "optionalKeys": ["+43a8614b287f1c67b614d53cea8372812c039c2e155d5e8123caf85810775525"], "numberOfSignatures": 3 }, "signatures": [ @@ -28769,12 +28207,8 @@ "senderPublicKey": "3a1e79b9af3a3b668ae995c0ae6b31b617c9df3d986adf9dec5944e24a71fc84", "nonce": "463", "params": { - "mandatoryKeys": [ - "+a2f6953c68b64b34ddd69f4fcb1cf83f13852f12e99bd5184ad4dd28a7b29832" - ], - "optionalKeys": [ - "+5798f82040754ef8ad84d37c4e241511e32eed03ad0be62044a93b9497354d7d" - ], + "mandatoryKeys": ["+a2f6953c68b64b34ddd69f4fcb1cf83f13852f12e99bd5184ad4dd28a7b29832"], + "optionalKeys": ["+5798f82040754ef8ad84d37c4e241511e32eed03ad0be62044a93b9497354d7d"], "numberOfSignatures": 0 }, "signatures": [ @@ -28908,9 +28342,7 @@ "senderPublicKey": "0b16b42ef314439249d140a918ea09410efc16a600e073a7681625fed908f61d", "nonce": "501", "params": { - "mandatoryKeys": [ - "+820603a6b219ca7b509c34912f06cf6e1af360484abbe59cecdc44a980192ada" - ], + "mandatoryKeys": ["+820603a6b219ca7b509c34912f06cf6e1af360484abbe59cecdc44a980192ada"], "optionalKeys": [ "+575482470f008f1de7012debb8e850f57377a1b71b69bafda752394f034f83cd", "42ef3a7dcd75f66edd9358dde6e84a302cbe05c737aa636a947ec82860a49a3b4fd719f28bda45ab442eb11c4b2bbee21670fba901b9801212bb40c19b8e6b4e", @@ -29049,9 +28481,7 @@ "senderPublicKey": "91698552da141ec0ba9cda3c83b95c2320416f9ff83cfbc99c55db6c376bb8de", "nonce": "265", "params": { - "mandatoryKeys": [ - "+61bbb44a0af4f5781ee37271c2288953d9d02943c5da7d75ca50c3f0add9cd00" - ], + "mandatoryKeys": ["+61bbb44a0af4f5781ee37271c2288953d9d02943c5da7d75ca50c3f0add9cd00"], "optionalKeys": [ "+b9a1adc117f1dae4e08864eece6ba7053dc0deca034d2c314a1f64d1062af77a", "0d76a7a8987333c138713900f9a78585f00a4f16d7d5efd728480b3759d6e49758971f6356d01548dfc8a13f2fb35dabd8fb809c8bde4c21aaf2fbcecb672b10", @@ -29203,9 +28633,7 @@ "0fdc9707db657064353388866a85a491abe326723d236aee1aa78fd8797bc20fcf884c1f3e1aeb922a4c2be01f67c2dc7a680da67b9f0ef7612cff17c414f416", "c8210d5242b93c93a09ca52d83537a4326876182523e763abe24f455a4b9b7942ceecb414cb42971afcf6280d859a2a7e55add2208461bbbf4fe99e1a7ff4748" ], - "optionalKeys": [ - "+1b32a7e556e3932bd4e06b3157a28b1df1ee9b91f439924db18dfd0bbad517a7" - ], + "optionalKeys": ["+1b32a7e556e3932bd4e06b3157a28b1df1ee9b91f439924db18dfd0bbad517a7"], "numberOfSignatures": 3 }, "signatures": [ @@ -29243,12 +28671,8 @@ "senderPublicKey": "964b67807932ad35ca4f6a68c47487f75c39bc5578564f7bf963b728332b8d7b", "nonce": "34", "params": { - "mandatoryKeys": [ - "+5ab58279617a4efb23bd8cd3a611c91e6f3672651b584fd816a8d1a701d4e9ff" - ], - "optionalKeys": [ - "+60903f3dc9c306a3608e797de3c7974a6943e26d670304a46e15672d8e5ffe1b" - ], + "mandatoryKeys": ["+5ab58279617a4efb23bd8cd3a611c91e6f3672651b584fd816a8d1a701d4e9ff"], + "optionalKeys": ["+60903f3dc9c306a3608e797de3c7974a6943e26d670304a46e15672d8e5ffe1b"], "numberOfSignatures": 0 }, "signatures": [ @@ -29393,9 +28817,7 @@ "senderPublicKey": "c64892bb89d5922958580cc50444a391c2cb398a4f3c11855d16079eb78cddd1", "nonce": "627", "params": { - "mandatoryKeys": [ - "+ed0cf3758ae25430140d6ef03b3a804a9b3897e612ff32a071f5a40b5d20d991" - ], + "mandatoryKeys": ["+ed0cf3758ae25430140d6ef03b3a804a9b3897e612ff32a071f5a40b5d20d991"], "optionalKeys": [ "+aac729df4395c32c3a00b3326b97fc4216d826e7d6c2208af8c1f7fe05a8e75f", "42c77185457f2d6d9db0f6b8589f3075f5f3dcf85b70d71f8447e885aecd179007839b5c5621cca670df9f8392c645e2f328f73570ce03ce45faccd8cd578d12" @@ -29513,9 +28935,7 @@ "397d5c04ca1d3d7635bd182bf78e30e050a0c63b903b87b55de5f4faf1a950e59db8664e8c76318f52ec53e58892e837a3f2f7dc6ba26a70f187b7067027491c", "43a311782fa9f8605966635a6a61bd3da7e541eeb6f9c728c2f34ecf9f005409a3262c29305483540170848e62957a999fa27595090bc49717cddf6a9b114f6e" ], - "optionalKeys": [ - "+9692fd09394f739bbeec7d42b1b01ae0c6c32b0973444491483b521c6ed19806" - ], + "optionalKeys": ["+9692fd09394f739bbeec7d42b1b01ae0c6c32b0973444491483b521c6ed19806"], "numberOfSignatures": 4 }, "signatures": [ @@ -29620,9 +29040,7 @@ "7e6a1bfcbe5a695e286c4c2dc75e26e3996c12f313da60c06d5c7f40d008a2d708ed680f754a6dd53fbc49df4ecdd11b3a4c2e62c16a5787d974125635b6ddfc", "080a15e9161d794cb7bac0f6f76b513cbbad3df92b948861635abe821d09603d03f1d5790450501229a0ac88821f6181dae7b4468bde476ede40c25f1dbacbf9" ], - "optionalKeys": [ - "+841156ac296f06a161b6babdb6eebb2809a9a41be43cf8090401a3302c6f1ed1" - ], + "optionalKeys": ["+841156ac296f06a161b6babdb6eebb2809a9a41be43cf8090401a3302c6f1ed1"], "numberOfSignatures": 4 }, "signatures": [ @@ -29810,9 +29228,7 @@ "senderPublicKey": "5c4aea54fbbd89be90b8f26901f1a99bcc43f4f2d300ad6a24c3642d002a50fb", "nonce": "33", "params": { - "mandatoryKeys": [ - "+3605ffd1ac44fdba9af17bbcfc37adb624d3a7152fb8f6cf5a672a0c1f5780b4" - ], + "mandatoryKeys": ["+3605ffd1ac44fdba9af17bbcfc37adb624d3a7152fb8f6cf5a672a0c1f5780b4"], "optionalKeys": [ "+7ff565cb7f263a14aa61ad53b70c4f242557acf8cd996dd9133ac62c0634c9b4", "c9e436a05209ba433b135ebea9185b6fdffe820e31cb76a70468627347fd8de4d14d5a78db25314eddd7b0dafc49a16562bbb52de23a870b9104704246f94dbc", @@ -29851,9 +29267,7 @@ "senderPublicKey": "3af1b0b6eaf17740542c09ec761b3b481473337cc402ce5ef068a22fe2f30ba4", "nonce": "182", "params": { - "mandatoryKeys": [ - "+5c622a9d4e3de1dcba6d00f53ac3a98376d8736e4e9a6b3f583cfddab3f30b51" - ], + "mandatoryKeys": ["+5c622a9d4e3de1dcba6d00f53ac3a98376d8736e4e9a6b3f583cfddab3f30b51"], "optionalKeys": [ "+10fe909c06dfb48b924d654443393375314192d33e00600448da9a896566f2b4", "c788f8331e005d3cb693de6e20872216304a3c5e99e2f13e80935d31d3b76e60f49d7e910a6b96e390e2a5dcfe7aadddfb0d1aed884849306511ba7391fd9b23", @@ -30123,12 +29537,8 @@ "senderPublicKey": "6e98259dc816158907c80a0aae5f93761d3bd89bc42a24aff513d37b79e2923d", "nonce": "77", "params": { - "mandatoryKeys": [ - "+cb499b4841520629352518254997f9a930c58d4859bc51d654f007b0f0780222" - ], - "optionalKeys": [ - "+dafd1b87607ef9b1a69513639208c18f8a6ad3739eca889d130185c5751081d7" - ], + "mandatoryKeys": ["+cb499b4841520629352518254997f9a930c58d4859bc51d654f007b0f0780222"], + "optionalKeys": ["+dafd1b87607ef9b1a69513639208c18f8a6ad3739eca889d130185c5751081d7"], "numberOfSignatures": 1 }, "signatures": [ @@ -30183,9 +29593,7 @@ "senderPublicKey": "828538f21f98ee42b9247f52fc54207c2b26df318379e3db1e9929ac0a6c5cf7", "nonce": "104", "params": { - "mandatoryKeys": [ - "+5662cf770ee409e122b035b81f7aa8106222e88ac7a1434a6fba96a625764b39" - ], + "mandatoryKeys": ["+5662cf770ee409e122b035b81f7aa8106222e88ac7a1434a6fba96a625764b39"], "optionalKeys": [ "+27e406f3b6b0d249ccf0db47bbc266605770814cd7bd34a9598402b90394379b", "069c67af9c33c139fcbe79bae5333bfde2224feebc7acae8ba1dbaee51698c378ebe00a25c25fc316e2683cd299f9631107e54d178ca8ba2353054edf9d1f642", @@ -30624,9 +30032,7 @@ "22005c0112cd30bb657ef927ed16338abfcd51ad9bef493b8cdeb3ee78feb04d76db19385831818ed31910c19a91a41689b57f99f0b8502778cfae0b77bbf2db", "6226d7979295e859f0c58a50172d838840da8ccb6d8f2219bbaa080499e6b5764b97b8535fbff837f5d839fe85b3faf3baf338bcfc647779cef188bc7c895818" ], - "optionalKeys": [ - "+510d16988fc36ce8826e5090ee36cf09a511e37738c276bebf0a4755b903ddcc" - ], + "optionalKeys": ["+510d16988fc36ce8826e5090ee36cf09a511e37738c276bebf0a4755b903ddcc"], "numberOfSignatures": 3 }, "signatures": [ @@ -30683,9 +30089,7 @@ "8f2cabb43df468970ab909a8855d669da394bb6050f2f775952ef5771c97c88984d1c90ef85ddaca3a2d87bb2641bbb8af97430f009058a5f2201710b0ac6cb6", "7c2ffa470014465708ffb4821e8097f316de8c96d2ab4d47dd28bcf3fe3dc7bb10175f1b72a49e9baa02609172ee1b545ea7cc59c539d0f9f802c61dc51f7702" ], - "optionalKeys": [ - "+d9fa2d8fc9f8d9eef4af2078de8714bff5204d4199b78b7ceaddfa76d834c9c1" - ], + "optionalKeys": ["+d9fa2d8fc9f8d9eef4af2078de8714bff5204d4199b78b7ceaddfa76d834c9c1"], "numberOfSignatures": 4 }, "signatures": [ @@ -30702,9 +30106,7 @@ "senderPublicKey": "60d0296c0d1fcd6908e145a9727f958d1ccb76df118596bd5503b26ed7acd916", "nonce": "287", "params": { - "mandatoryKeys": [ - "+9e31f317915912ae964cce3beb6e5e52e93eefab6212fb664f1a71c55e99eb88" - ], + "mandatoryKeys": ["+9e31f317915912ae964cce3beb6e5e52e93eefab6212fb664f1a71c55e99eb88"], "optionalKeys": [ "+52cba31acd5b04b539824c9e6f5a73f95af63b28e8fd13a88b6b8f44bdbdfc26", "6d5467f8d72e6ce341ef63416032d8b8b12a1faf4ef8a2b5c55b45c84dddcc095d7002f2c613fa0917482d944fd045fbf6ede8e91259a2c0ffa1366c0a40fd09" @@ -30769,9 +30171,7 @@ "6a79172414f77ffd1018f7cc93354fe45626f0bdc1e92fea16fde76c4b19fb212e4e5fe07f4437951c19236ad52864ee52ef259a070d7a142b107e71d1570850", "83c222c719cb9d7ed9c16307049ce753816b13d58cb1478b54913ae8c9d402c2e7a9c8f032f21147041a8dcc182b658786e29bce68c396bff02eff35c1813099" ], - "optionalKeys": [ - "+6760ba4c2b00dcd691b168b801de74e06af10a8abcbf71aec073db421e92e3af" - ], + "optionalKeys": ["+6760ba4c2b00dcd691b168b801de74e06af10a8abcbf71aec073db421e92e3af"], "numberOfSignatures": 4 }, "signatures": [ @@ -30944,9 +30344,7 @@ "senderPublicKey": "5702c4c0b23b8b2b64d1566a1e6fe6669780ce8ae01db22019b1aa9229517635", "nonce": "687", "params": { - "mandatoryKeys": [ - "+6ae5b7f3a24a8f12dff57c99e0b44291bafd3028b523bfeba75ec222ffd47dde" - ], + "mandatoryKeys": ["+6ae5b7f3a24a8f12dff57c99e0b44291bafd3028b523bfeba75ec222ffd47dde"], "optionalKeys": [ "+76d0d5a2e5081cbb2c876bdbd8571ffc3ead8cf13e7280e16124a55f75ccce17", "70d8ff9e0f809846705af17eb26057d58caf9e17e9fbf44725dac4ef0c9bde0858fe06be9c5ba523e52483670d8788a5b32c549c2cd980df0106c498beecf8e0" @@ -30967,12 +30365,8 @@ "senderPublicKey": "ccebfaff42622be0ea0ea61967f45fbcdabf3c48f81f534856cc05d67e2ef7c6", "nonce": "80", "params": { - "mandatoryKeys": [ - "+b323895df785438d0a6f0d9dc8adb4f1a24679fd35635a58198d90e3585f1855" - ], - "optionalKeys": [ - "+a64291b4f953872b5503a623318df4abe6c30d1cd851b9f65e4bef97314f7f74" - ], + "mandatoryKeys": ["+b323895df785438d0a6f0d9dc8adb4f1a24679fd35635a58198d90e3585f1855"], + "optionalKeys": ["+a64291b4f953872b5503a623318df4abe6c30d1cd851b9f65e4bef97314f7f74"], "numberOfSignatures": 0 }, "signatures": [ @@ -30993,9 +30387,7 @@ "+e7491176821afeb1cd6c75910139e7dcc19783e8f789c4cdbd38ceb6618f5091", "3498641e7d3676ba4c6354f2baad646992d44aaf2ef3f6555cf102a6ea127815db2cb84e4cfe4e8461a10392d275e8b54b728b8b3dc213ee6e6277c5c2a48dff" ], - "optionalKeys": [ - "+ccacc3947368156c6a478b5cda4822a69f1e6826d8939a6c550b212c6001477f" - ], + "optionalKeys": ["+ccacc3947368156c6a478b5cda4822a69f1e6826d8939a6c550b212c6001477f"], "numberOfSignatures": 2 }, "signatures": [ @@ -31157,9 +30549,7 @@ "43cdbe74a27d5ca7fd6ccbb40fe3c57f57f31f3e1aecfd020161dc99c21febfb54c474dc6cba980a95958ae84a4ffe1c920ccaf7a5a937ec65a190537841047c", "1271d188233c5b56e7e6a0bf99fd12214c69cddb477fbd8c65d167cdc5deefa8ee514f4376d2a8197026910b4b1b3e2a4e6459f51f2812fd3a3fbdb52057ab8b" ], - "optionalKeys": [ - "+b6445c9e12b0b01d0f143a003b852dc8119061b80b0d167e89cdfdcbd1399e0a" - ], + "optionalKeys": ["+b6445c9e12b0b01d0f143a003b852dc8119061b80b0d167e89cdfdcbd1399e0a"], "numberOfSignatures": 4 }, "signatures": [ @@ -31239,9 +30629,7 @@ "fc8fb1a6df6303471609af6069014f2b29c5bd65178b940d03745314b8dd23c2879ac4cf077fd2ca5e072e6f23239fc3d48e33603938a7c229754dcbd3f3e5c9", "0fcf3ee00a478d926b4bd183395102c56eb0e9598118f8b5a2357fc897b90f311a4285aa279eb78582dfa2f8df4cf5bc553e369069f46f6071b0d189e6cd5596" ], - "optionalKeys": [ - "+0b482e2d6c2d50840239e2090454941ea367e3cb01104842bae6c8d1085f411c" - ], + "optionalKeys": ["+0b482e2d6c2d50840239e2090454941ea367e3cb01104842bae6c8d1085f411c"], "numberOfSignatures": 4 }, "signatures": [ @@ -31340,12 +30728,8 @@ "senderPublicKey": "b067b5857a917b21f2d268e265603639e8aac3867cd2c013cae2f0f9bb6be2c4", "nonce": "477", "params": { - "mandatoryKeys": [ - "+81cb5e6d53eb637ef672663d003a346db87f22a94f330286a3bbed9d15f8f066" - ], - "optionalKeys": [ - "+42b6ea8f45a061360118fd0a46ed5cd4d9f56a860ba05e57dc908a7df5b8a841" - ], + "mandatoryKeys": ["+81cb5e6d53eb637ef672663d003a346db87f22a94f330286a3bbed9d15f8f066"], + "optionalKeys": ["+42b6ea8f45a061360118fd0a46ed5cd4d9f56a860ba05e57dc908a7df5b8a841"], "numberOfSignatures": 0 }, "signatures": [ @@ -31658,9 +31042,7 @@ "51738ae82ef34dab3c43db109c095bbe054ed0d1dd2ee34cab6c2c4b8c67d5261848beb4fc06f3c9a5ebe178983623924d963a7a579e503611f11b032e62faf4", "b114a9252d599bc69e3c6767f599980e6cf5ae11ea6041f4ef09fa770e8cf4637dc1f2caf740514be17dc89a9ab06de5a91655c856522afa4b9e3389abd37117" ], - "optionalKeys": [ - "+e16038099db1e4bcc3c8497adbf76f22e75a7927fd9f3094d95e2147da2f7026" - ], + "optionalKeys": ["+e16038099db1e4bcc3c8497adbf76f22e75a7927fd9f3094d95e2147da2f7026"], "numberOfSignatures": 3 }, "signatures": [ @@ -32172,12 +31554,8 @@ "senderPublicKey": "fe2053ef1180fb19609a8a5b4061306ce170008bda91a811b0af23dd2c347276", "nonce": "332", "params": { - "mandatoryKeys": [ - "+e61be053d9a98af1aaf36f9c356ea9765a4e32d168d4bda2f2464f95ed4fc1b9" - ], - "optionalKeys": [ - "+66d34cbdc34cf01f58fec34c41e8281f56e73c4b186a9b2dd2691d0d097e4d1f" - ], + "mandatoryKeys": ["+e61be053d9a98af1aaf36f9c356ea9765a4e32d168d4bda2f2464f95ed4fc1b9"], + "optionalKeys": ["+66d34cbdc34cf01f58fec34c41e8281f56e73c4b186a9b2dd2691d0d097e4d1f"], "numberOfSignatures": 0 }, "signatures": [ @@ -32256,9 +31634,7 @@ "senderPublicKey": "510967c085f94065f429362fde770a853354ed4c07b8bd576ee23586dc8c006b", "nonce": "803", "params": { - "mandatoryKeys": [ - "+d2bf5d13600a2da8115a12a91c4d7d6e0229d8b3ec28c0c62a9b95b8058499b0" - ], + "mandatoryKeys": ["+d2bf5d13600a2da8115a12a91c4d7d6e0229d8b3ec28c0c62a9b95b8058499b0"], "optionalKeys": [ "+91e054d9e73288c6a91a7c131ccb9c6f7495ad304e10a6bb1470e6daa3873810", "5b5293282eff5a5eff94792e52e86777d38d122951c95c3825d74e8dd8062deca3538dd8a29621d6dad2c51212196bcb2367c805c32c7bec1c9e5e0f36063ab7", @@ -32516,9 +31892,7 @@ "senderPublicKey": "3a013cbbc205a48d64451794efa453305f085c15d0d36ee5470eebffe324357a", "nonce": "152", "params": { - "mandatoryKeys": [ - "+72f9441d1e85718313bc64d6b36ebe511898698f57dd8ce553ea96b1f81d502b" - ], + "mandatoryKeys": ["+72f9441d1e85718313bc64d6b36ebe511898698f57dd8ce553ea96b1f81d502b"], "optionalKeys": [ "+d300e72c2b7cadb088234d834ab34e3aa429918cb37430fb2382efa27651ce79", "dcd57fda93ac1d71dbd670019332d0166005970da447888728db2dcea28420e0d063b87909967e3be7ab4f7e8ffd7da8631ec083223b51513c9d74cbbb911588", @@ -32564,9 +31938,7 @@ "8b1b43dd3831a20f86637525648eab5a075531a3ff8322df67c81e5c9a4b8cb5534f2262be1ae9674eba38d8adabf89d79ecf9c94d63be549ed69841a745e6ca", "162b51a81a490222fcefc95765957b21ac9d3ba2cef9bc51f361db62920256f52a4079502236716f06538bc18bc24a2288129734f878b045a6974a64bb1ccbaf" ], - "optionalKeys": [ - "+18f8011123695a9fcb63f27296d314b267d226c307927b08460ec4ec65a96da6" - ], + "optionalKeys": ["+18f8011123695a9fcb63f27296d314b267d226c307927b08460ec4ec65a96da6"], "numberOfSignatures": 4 }, "signatures": [ @@ -32824,12 +32196,8 @@ "senderPublicKey": "08aefd722936eebf376af8b6f7f954d10b6c0ad1cd3d1ad009429d678afd34ad", "nonce": "866", "params": { - "mandatoryKeys": [ - "+8c43d5b7446d8b978c06319466defefe4602424cebbee37dd56e05ef780daa4e" - ], - "optionalKeys": [ - "+07dcd6762141deb8d22758c4f2682e9007995e71bb8acdae69e2e67518090eda" - ], + "mandatoryKeys": ["+8c43d5b7446d8b978c06319466defefe4602424cebbee37dd56e05ef780daa4e"], + "optionalKeys": ["+07dcd6762141deb8d22758c4f2682e9007995e71bb8acdae69e2e67518090eda"], "numberOfSignatures": 1 }, "signatures": [ @@ -33138,12 +32506,8 @@ "senderPublicKey": "f376684ef6fadca839897291fa58d7a226cd6195e2a8e657691e154531084b2b", "nonce": "984", "params": { - "mandatoryKeys": [ - "+6480d6759c6de89d1e843dfe89582d12eefc6428714e51fa2ba25199f2626c0d" - ], - "optionalKeys": [ - "+8114e7149700b75376daf270dd480036f8b7488d8fcb3b84e53a614838ecbc10" - ], + "mandatoryKeys": ["+6480d6759c6de89d1e843dfe89582d12eefc6428714e51fa2ba25199f2626c0d"], + "optionalKeys": ["+8114e7149700b75376daf270dd480036f8b7488d8fcb3b84e53a614838ecbc10"], "numberOfSignatures": 1 }, "signatures": [ @@ -33339,9 +32703,7 @@ "098e8300d8bc3da47468f3a5b98367a2c2b07a018254356697749ae8056e2e1fbc949a2c9089edbf1b02a801cdcd8284a3ddd8ee4f4faed365f2b87de20ac6d9", "63dc8f848b20e8a963ed4ad799ab7a8a98310de85aa268f4439d6b658a415b26837cbcdca53adf5aee683c5301afe956f9b43b9ce91aa8315b15a581d0bfcda9" ], - "optionalKeys": [ - "+5eddf9473fede4749b07c60af2041235b215643f7f646c7f4c44d195f116d634" - ], + "optionalKeys": ["+5eddf9473fede4749b07c60af2041235b215643f7f646c7f4c44d195f116d634"], "numberOfSignatures": 4 }, "signatures": [ @@ -33599,9 +32961,7 @@ "+dd59d0f004c542abbdfe1df4be8714378a6833b8eec3eaa7ccbcc38bf1f6a8cb", "dc81209e223099245c3598710c13e44066aec7f09fe0c66385d01b849c7462c65336a7badb5154380df5faf9434de3e5a5d020dce887743f341a79442f2c5436" ], - "optionalKeys": [ - "+b180ed26101ed5c470a1d79b84c1f1a3b5d28c35ea91d0d708e65c1af5c04e24" - ], + "optionalKeys": ["+b180ed26101ed5c470a1d79b84c1f1a3b5d28c35ea91d0d708e65c1af5c04e24"], "numberOfSignatures": 2 }, "signatures": [ @@ -33704,9 +33064,7 @@ "+aad71a36c182f8a9bd8d2f768de84232c7ac16027981bfad72b992a265747f51", "aaf9bd0b4799ebe0cdce2e768e29bfa3bbb9cc1ae769ecb7fcccef0d3f348b8fd2e7f7f5fe26f9e1e4487979a42c304369c1ff9f8078f8b443d4c86227ac64ee" ], - "optionalKeys": [ - "+dd638c03ae71bb2ff09277cc6159322cafd4348bc52fbf8e4a516a3292601037" - ], + "optionalKeys": ["+dd638c03ae71bb2ff09277cc6159322cafd4348bc52fbf8e4a516a3292601037"], "numberOfSignatures": 2 }, "signatures": [ @@ -33803,9 +33161,7 @@ "+e2fa7cd1d8ff26b722074eda99d5ed25c5cd13cdcc37c9db0e5920c54946a789", "ac3f6a84f41dfe0cec4ffa492c6880702e39ff2aabf34ce53b3b47a072e24860f8980764f6d6013ce973e087ec15826471f5c87a603a87b3021e268ce0078f11" ], - "optionalKeys": [ - "+37a9e72aecabfd33d82e6568fd615fc5c205a95f99c4d1094940169f2b4b166c" - ], + "optionalKeys": ["+37a9e72aecabfd33d82e6568fd615fc5c205a95f99c4d1094940169f2b4b166c"], "numberOfSignatures": 2 }, "signatures": [ @@ -34089,9 +33445,7 @@ "d8133f1ad21bd901bc4f3ee265958f183a0455cd74e194fdf03e669d1e00852ab04eab56bf6e871eaa7b8794f43f65fc6eead1de0effc702cfcd92ca689bdcbb", "b15d0b83c2a6add8c20ba6b9982912794b0f8e8c7adfbc383b5876e4e65ed13a58800a7e576279c975ffa0b670e543ed5a168023bb2a9a238a036b4063594f4a" ], - "optionalKeys": [ - "+72b12f0a7c114252ec7a0fb008f4811528658f771eeff44d4c6183485376e931" - ], + "optionalKeys": ["+72b12f0a7c114252ec7a0fb008f4811528658f771eeff44d4c6183485376e931"], "numberOfSignatures": 4 }, "signatures": [ @@ -34133,9 +33487,7 @@ "+88b4b0ba80b047a538a7ecc72fc26a1f3e490ee8752a55b0ada53359ea5283e6", "bbffab0e47a0cada5f8860d27eab2644c2e5c21b9f1250aafd8b3e6955a1d427ff16f30432adcdb4bcbcc4a6a734b0f2f5cc609daeac9e701bdac7cf3d812e8f" ], - "optionalKeys": [ - "+b5caea1a64fa749d6d89699ae85a63809b1b178445c3a33db09eb13951a33c98" - ], + "optionalKeys": ["+b5caea1a64fa749d6d89699ae85a63809b1b178445c3a33db09eb13951a33c98"], "numberOfSignatures": 2 }, "signatures": [ @@ -34152,9 +33504,7 @@ "senderPublicKey": "d540a8800cd2add03cb33602e98a7de7e415897c77fa2960c3e0182ee0b66a4a", "nonce": "731", "params": { - "mandatoryKeys": [ - "+f27674d2d0572877c739f0a310a6fae0ed6ca0d33f057c88c1d2ebfc1cba4453" - ], + "mandatoryKeys": ["+f27674d2d0572877c739f0a310a6fae0ed6ca0d33f057c88c1d2ebfc1cba4453"], "optionalKeys": [ "+97cc1d839712e1bd8a6743dea107890ecbcec049e83fca7f87eb7737cb802a9d", "a0a65b5bd81b6249fd0cef17e59cd09a11ff1d943d0a08ade3876769bf6283a315232df2d86c46fcf925ca6b87659f38856cd03d20c74adc0f1a7a79bfcb5751", @@ -34276,9 +33626,7 @@ "f71a7239d63bb578d246be1d3ffe84363ede3dd2ac110391102a1fe6799ba25bd67c7750a85e53a84381aec711462aeec785d78339ad109a7a20ce16eefe8e3d", "16c5b4f1f77f0aeb0c32bea5f253c0c462c91ba2014fc2a2791889ea2d4eb274e2e7fb73b9f327a3a6c3ff197480cddafbbf03a17188e8ac0f19f853f7031541" ], - "optionalKeys": [ - "+0efd3b2552ee0b35a54d2cd062e7bb11129c5a0b550efb4cfc54b1b009c2f665" - ], + "optionalKeys": ["+0efd3b2552ee0b35a54d2cd062e7bb11129c5a0b550efb4cfc54b1b009c2f665"], "numberOfSignatures": 3 }, "signatures": [ @@ -34382,9 +33730,7 @@ "3196a488c512eb826024e6ad3ae5d1d53fc1654b04932108a06ef2684270d4a9695abdf6fa20f8be652a92bbaa6875121214758c7d7dd1a088ba3db29fed7f6d", "b96959ce4ce1e01e2ee6c84e76ba6005ae71ddc7d90e3666b0d415fa59a41d77581b7d38b8067d64c08fbaf07fba7bef1870c4615188c75b04c04a43106a456a" ], - "optionalKeys": [ - "+7a705fc20ce6f020eba5f463d847378e82518ff0235f1bfbaef15ad8ad30e242" - ], + "optionalKeys": ["+7a705fc20ce6f020eba5f463d847378e82518ff0235f1bfbaef15ad8ad30e242"], "numberOfSignatures": 4 }, "signatures": [ @@ -35006,12 +34352,8 @@ "senderPublicKey": "bd52a6cac0a2a4d2a7f9198d0105b6d60c54dc170f96bf517c85c9401b786cd5", "nonce": "673", "params": { - "mandatoryKeys": [ - "+c1711690f53ad214bcbad95c9a55c7a7bec151df763173bf4dab6158c14d2947" - ], - "optionalKeys": [ - "+31bb7c3362f6f538d097504f07245264f8fd6f5850fddf325f9c3238739289e7" - ], + "mandatoryKeys": ["+c1711690f53ad214bcbad95c9a55c7a7bec151df763173bf4dab6158c14d2947"], + "optionalKeys": ["+31bb7c3362f6f538d097504f07245264f8fd6f5850fddf325f9c3238739289e7"], "numberOfSignatures": 1 }, "signatures": [ @@ -35337,9 +34679,7 @@ "senderPublicKey": "3fe07e22225202c9b0b3edebe0912806b7678e3028c9235c74a1936fa88bf95d", "nonce": "512", "params": { - "mandatoryKeys": [ - "+626362af5dad21850c14e0029d7ed92fbe9de0a255f6184652a8cc1bcefcc543" - ], + "mandatoryKeys": ["+626362af5dad21850c14e0029d7ed92fbe9de0a255f6184652a8cc1bcefcc543"], "optionalKeys": [ "+cf44b19719f4d6467c56d6c8bebbe0488f776abc788e518177be45e103ad2c94", "0c754b89c22e47efd8f18c8a0b7580886440574d5ba3fdb1b7cc06ae46734e27f9ea9dd38a376d01c60fc45abb7719936374fd09b7bd4e88fc8ff9e69e16d437" @@ -35406,9 +34746,7 @@ "+aed5952bdc2a3bcbb4d067d37c7b6684e6a52fdf119cc0937a1177a399b79b1d", "163004a0d21b078fc81a2170e84625706ce6cbc55fa85e515de2fdc62ac1ad7d52ea27b00b27d9a44fec77a032be0ed6c5e40b75e31963092d052989ea632c9a" ], - "optionalKeys": [ - "+5d86f2cc58ce3ac90076b3c3b1dd49e6e44c43b22150d6be6180228861d285cc" - ], + "optionalKeys": ["+5d86f2cc58ce3ac90076b3c3b1dd49e6e44c43b22150d6be6180228861d285cc"], "numberOfSignatures": 2 }, "signatures": [ @@ -35463,9 +34801,7 @@ "senderPublicKey": "d07e201bc140ccabd031b3af0dcfd7b427e3dd423e70b90c0dfaa37702d17b15", "nonce": "603", "params": { - "mandatoryKeys": [ - "+6b077f9d1b94cc23375f18cbd828e569abc94af7cd314ab3f793e0b834630f6c" - ], + "mandatoryKeys": ["+6b077f9d1b94cc23375f18cbd828e569abc94af7cd314ab3f793e0b834630f6c"], "optionalKeys": [ "+d08eb14088d4a1c677e874fef8bd6dedef9eb796aa4e27106bb6b4bee1809102", "cacf3c3024c020d2e9ab9ee1eb756f12b5869606fe868b3690060e64c89dc577c3a3ef79be522914f8c2d263aa7e8bc328204d9d6fb5cba84081eb8bf57cf91a" @@ -35490,9 +34826,7 @@ "+b86697e1e6a5995ce7e0a307de0360d3cf80b954fe424cffc75ea33ac1b9a703", "fa7306e215a6175eb41592c26130d8dd410bfc479a0b0699a6f92b426ba3a30d6ae897f60b83db91daa2aefb42b2a56fa95ad30b635d36552b505dc513df9b10" ], - "optionalKeys": [ - "+fe8070be88c55cddc014c7e854604e5e0f5e30486da581c6157ce1f880fb71ff" - ], + "optionalKeys": ["+fe8070be88c55cddc014c7e854604e5e0f5e30486da581c6157ce1f880fb71ff"], "numberOfSignatures": 2 }, "signatures": [ @@ -35530,12 +34864,8 @@ "senderPublicKey": "3968f87cd03ede845117161c4378b8cb3e5a8aef93107fe070fb1a05062cbaf5", "nonce": "52", "params": { - "mandatoryKeys": [ - "+3ac3f062c85ed83b02ed41a4dfbaf9021d2a8e9af1b6379f55d93d049b17a2c9" - ], - "optionalKeys": [ - "+a6a223c68177990790d67892abbc03704ce4a50a4acc2a0eb9ea23d827c3753d" - ], + "mandatoryKeys": ["+3ac3f062c85ed83b02ed41a4dfbaf9021d2a8e9af1b6379f55d93d049b17a2c9"], + "optionalKeys": ["+a6a223c68177990790d67892abbc03704ce4a50a4acc2a0eb9ea23d827c3753d"], "numberOfSignatures": 0 }, "signatures": [ @@ -35573,9 +34903,7 @@ "senderPublicKey": "fa3023e00ccf5f584a15a50826873dd7936a5872b84e189ebbcf6c6fe8d3d652", "nonce": "274", "params": { - "mandatoryKeys": [ - "+3c9281df4ce0588204849529a804dfef330be8673243afa1931b870b19de1e6a" - ], + "mandatoryKeys": ["+3c9281df4ce0588204849529a804dfef330be8673243afa1931b870b19de1e6a"], "optionalKeys": [ "+47813545970a117cbf9526cbaa577929e6888bb5e7d11a1d89806b1dcd08d446", "0f666eb333ca6cff74f8fe685edce8db44df89f2295affa17926d66f9fe0a30c28b81dac006cca0be5e5cf1639a14ce4b3197ca99d1fc083eee0e2a31bbdccb8", @@ -35656,9 +34984,7 @@ "senderPublicKey": "c0502845d4e6fe94a84af936bb8e3aabee35b47a284a1bb551b2b6da07bf62a3", "nonce": "409", "params": { - "mandatoryKeys": [ - "+ae3fce98bf77065729621ce9a4dfca83e4b0114f310d02616440948454617e0c" - ], + "mandatoryKeys": ["+ae3fce98bf77065729621ce9a4dfca83e4b0114f310d02616440948454617e0c"], "optionalKeys": [ "+306311ea601609b138a40b35a89f8dd862928a6ace331d6bdd244088764ee0f8", "76f69146b5754194738c5d6655096c16ee3e23701cba4186ce771084d2a4ecfc45845eca391c0e58e620aad055ccd372fa5e9baac3db326a26b12225595b4cdc", @@ -35794,9 +35120,7 @@ "0d1c7935e7aef71de03b8a32d24250313033a10cff70b0949e231c6aef55e47e816752fb75f6d011efd174b113b9566d2e4b87649e96c8efda630b480c186672", "54b6070ef03375ed658833daa599a2538590075630d92b443f8a0b33eb6162bfb5121389872c8d0835c750ddc606232ab7e2b3dbb0afb248d1551970ea2da1f8" ], - "optionalKeys": [ - "+e6372732a25361c7a022ee33cf6f2013bb351d58b11e3ae2ab46875ac43f4c86" - ], + "optionalKeys": ["+e6372732a25361c7a022ee33cf6f2013bb351d58b11e3ae2ab46875ac43f4c86"], "numberOfSignatures": 3 }, "signatures": [ @@ -35894,9 +35218,7 @@ "920ff9faafc55db99ce598e3e0bc1bcf7ce15f541b3bff2c85a7f9e463302be13ae50755b26fce1a8888f2e7c749ef07022d847c41733a53082bb61651c04ae8", "f62078b54359277ebc7a33a44da5937432146a0dc110898344041b2784bbf4f94ff516f0a9eb5ec9c271d7f0eb52fc51426b62d7fdcdeaa12fe81c6b175f01c0" ], - "optionalKeys": [ - "+a2d6aae289e5a724a7be4c76a1e8b1c57aa4ca15018b6fb0c4eb637fde83fddb" - ], + "optionalKeys": ["+a2d6aae289e5a724a7be4c76a1e8b1c57aa4ca15018b6fb0c4eb637fde83fddb"], "numberOfSignatures": 3 }, "signatures": [ @@ -36076,9 +35398,7 @@ "senderPublicKey": "56f5eb3bc3972dcc75cb1d552b7dce069c1e6fe401d2a43d9f7eb87dce91a3f9", "nonce": "857", "params": { - "mandatoryKeys": [ - "+c5806a85940687cbc39bbfb69fc58dab1a5e6163e3b8f0e46b22812cb0e067a7" - ], + "mandatoryKeys": ["+c5806a85940687cbc39bbfb69fc58dab1a5e6163e3b8f0e46b22812cb0e067a7"], "optionalKeys": [ "+d66c411abc5ba00447912d1cd6b27c9292fcce4ed6307188433c5bacdca1c892", "9ff9790b64cd7eedf440b19982d3e6d0c6db33683e6c6457dfaa83fb94a02411a674cd94b3de6612a001eb66927415be7c497c465541bc393e161fdd0870001e", @@ -36300,9 +35620,7 @@ "senderPublicKey": "24590f1770d485c83a75f61092ac5bc6a1b48faefa1132cac0cdc7234ead01fd", "nonce": "840", "params": { - "mandatoryKeys": [ - "+2b44afe0d3614c37d062e72ec2f64d89ca7d4842c0cdb6baf83865487824fd4d" - ], + "mandatoryKeys": ["+2b44afe0d3614c37d062e72ec2f64d89ca7d4842c0cdb6baf83865487824fd4d"], "optionalKeys": [ "+52c6cec53ce46d2d41bdc706d1828ae37bb1fe4974ea9479652cc40ce06db452", "bbcc75aa9ea398da968e9f33c9aad2c863b895ed6bf20a3530726ae732f126e4496a63af4a6c86c4715dd100c6f1536e3d64d0f56f6f551b0eaba45818406380", @@ -36362,9 +35680,7 @@ "+8708cad872a483b7293c1ab0336e625115a9d5a1ca00171f7468eed900b6dd60", "320fc92e22ab989d8a5d91e5d2e54af54f5fad4b2dc46c935eab9bc192007ea20b1e7b5a5b91e9a3413fa8462d7094566d5391e661564829430402f6d4e4bedd" ], - "optionalKeys": [ - "+755b48fa3f88b8131735a97b615fc0166fce6c6efd03afbe56c891b37f626a7e" - ], + "optionalKeys": ["+755b48fa3f88b8131735a97b615fc0166fce6c6efd03afbe56c891b37f626a7e"], "numberOfSignatures": 2 }, "signatures": [ @@ -36453,9 +35769,7 @@ "senderPublicKey": "1c2c15e821125aa554d552489c63d018dcf7f7edf51b6dffdf11370dbfba0919", "nonce": "230", "params": { - "mandatoryKeys": [ - "+b86070dbf0bbcceaca7a5e8df08c063fef47883c48c79937f8d2b26c847f1772" - ], + "mandatoryKeys": ["+b86070dbf0bbcceaca7a5e8df08c063fef47883c48c79937f8d2b26c847f1772"], "optionalKeys": [ "+179ac119672c24bd0858ffc14d99a155e32e5dcb1e60275979661eeb073ca0cf", "bab2c68068b55bc366c33de5f2716a35013d2c2d07fc65a96f1221e53400520ffb71cb6f9c8a7fd80691f3a1a8f114fdcd9fd17ce10869906ee80921f2302dd7" @@ -36481,9 +35795,7 @@ "3e72a304af0ca43056476caee49efeb1314560488e87de69da4c531a346bca248605058448ee0455eeddc94fdf6708a95ab1362607fde19e565021324836d489", "5faba915e73b0593a9e52407a2413b09d9a4e6147aa744858edb8fc6e2cc319376633081d4fd930346e2eba263a3ba984306cacb181f6d3d5cab1231b4d18d54" ], - "optionalKeys": [ - "+01b5b241133d918f906688f254d295c49dbe36486c95d559406d332430c2a735" - ], + "optionalKeys": ["+01b5b241133d918f906688f254d295c49dbe36486c95d559406d332430c2a735"], "numberOfSignatures": 3 }, "signatures": [ @@ -36632,9 +35944,7 @@ "cb1d506909c507d6cbed365c63febb6eb7c2d2e4b2ac262e754a192ab744bb8decfc63b1d692f0776f27453adaa1063062fca33e811c28e3b377f4340b9a287a", "dd512bba295ed1c11a87cbc52d00397e9e49bcf0ac07f1a1cd729fa4f9b5147dab069414a4b519704cf18388124160d63be035e5fddb8851ea9cb0b02c653070" ], - "optionalKeys": [ - "+c7e8f2656fb23fc1c8d821b3e67a7829b23bfa07ed193558cc3b6b75204ee9a5" - ], + "optionalKeys": ["+c7e8f2656fb23fc1c8d821b3e67a7829b23bfa07ed193558cc3b6b75204ee9a5"], "numberOfSignatures": 3 }, "signatures": [ @@ -36761,9 +36071,7 @@ "3f6a4747ed0f8dd773e66f93fcb15c363e91e384fbc50161447833f4152e38ba68679c446fcff7d748bd67d39b5a5c61705032cacc4b1fa6b8b08cfadcf936dd", "1af29e788dd472519077a4fde28999e9fabded5cb68b7fb7a8cbd76001465b84fa4f3c636a9109e9179270bd2340a3430531f2e685d0a8bdba590bd3f68f181c" ], - "optionalKeys": [ - "+144651a4929d1b6245424d5dd0eb0209b6a0cda1a9b8c80c52f379e025f82aa7" - ], + "optionalKeys": ["+144651a4929d1b6245424d5dd0eb0209b6a0cda1a9b8c80c52f379e025f82aa7"], "numberOfSignatures": 4 }, "signatures": [ @@ -36941,12 +36249,8 @@ "senderPublicKey": "4dc6e570d8852a6aff6b557d0f69ed4f30d766226c4e65237c1a4aa150cc76a1", "nonce": "694", "params": { - "mandatoryKeys": [ - "+fe456290d7828913f4a367b46cbc69c89323a90998a4d00a90c23d206705f1d8" - ], - "optionalKeys": [ - "+72f974baa672a7055706165eee43c13beccd084dc39d3b283b6b0be18e38175f" - ], + "mandatoryKeys": ["+fe456290d7828913f4a367b46cbc69c89323a90998a4d00a90c23d206705f1d8"], + "optionalKeys": ["+72f974baa672a7055706165eee43c13beccd084dc39d3b283b6b0be18e38175f"], "numberOfSignatures": 0 }, "signatures": [ @@ -37171,12 +36475,8 @@ "senderPublicKey": "e59b4a197c4c9f86aea1f14caf099c0b6508e61849272a8b7632773e23e9f4a9", "nonce": "406", "params": { - "mandatoryKeys": [ - "+aab2f94202033d7d29304c7155f22af751e3a3180fccd4f657dc14213b49c310" - ], - "optionalKeys": [ - "+d78648fe9da14182ee1257817309ee596d199eb944ec2182808eb19166b9db74" - ], + "mandatoryKeys": ["+aab2f94202033d7d29304c7155f22af751e3a3180fccd4f657dc14213b49c310"], + "optionalKeys": ["+d78648fe9da14182ee1257817309ee596d199eb944ec2182808eb19166b9db74"], "numberOfSignatures": 1 }, "signatures": [ @@ -37749,9 +37049,7 @@ "1d6621536d75041717595fd9b9b39a7b22f97c7eedb5c276f5f807c794f82c11a2961aa0fbe43b5c7e0a93d3d589dd99824d8894d954a09845c6931a30434ee3", "6ff39d854d55248fd09094575b854ebbeca00bbafef3798c9a07defe553b748f484e1320b6565410ea1655567dd43bd3fe7e28b459846e8e3ffdebe3655ee3e2" ], - "optionalKeys": [ - "+11e2312afbdd3703e1f92ea452f7f19c1ca3f1d5a3280698af3c4bce59b4adcf" - ], + "optionalKeys": ["+11e2312afbdd3703e1f92ea452f7f19c1ca3f1d5a3280698af3c4bce59b4adcf"], "numberOfSignatures": 4 }, "signatures": [ @@ -37768,9 +37066,7 @@ "senderPublicKey": "20e4f44f971521d7eb8e9abfc9986aaab908863383d4d6710c81ca577d1bca5b", "nonce": "775", "params": { - "mandatoryKeys": [ - "+3a9f0145f2c813a2cc307905714d0e4d3ba739b2c376cc0563dfb3503390541b" - ], + "mandatoryKeys": ["+3a9f0145f2c813a2cc307905714d0e4d3ba739b2c376cc0563dfb3503390541b"], "optionalKeys": [ "+00440aef87497281ac2d1063e426eb41efbc49c5aaa89980a7c83a5ae9e00c0d", "59d78ca875ac614e999934683ec8bd1957381c543947460d434e4aaadb9c8bfb2bc267e11fa8bf56eb796e4f44fb687b7e49030bb9d7238514643ca2c1b83345", @@ -37797,9 +37093,7 @@ "da83c398ff76c0a37b54fb13d88cca8c08c6fa037ffabf0ce39eb93cdbe071ef6f9bc4382a52909810b91b1d3528fa1b3d56f58a00c7676656e8774eaf941408", "c95220f5cefcab30d7c0fe5b6946b43f319fd9abf90b95072a889a98cd1dd459c8f1a7287ba4bf6198a70be2a744f70f611df0446ef9518d0b9689a499c54981" ], - "optionalKeys": [ - "+3ef1a60f0da8748f18bb3391abe2f230e54b5d23c2771406ef34417db975faaf" - ], + "optionalKeys": ["+3ef1a60f0da8748f18bb3391abe2f230e54b5d23c2771406ef34417db975faaf"], "numberOfSignatures": 3 }, "signatures": [ @@ -38099,9 +37393,7 @@ "231fd0cd5fa51c0892af02eb638d0d44d36ce1ad6ff051f91c6e1d5bbcaf9a8cef679034688fd4c3d7017de2cc02faf645445bbd32e022b8242e35031f338f23", "c8550275132020ae445eb5e972bc215153aa9ef344a9de240336fe2d4ba3f3a3434f54104e23a148e377fce07cf9c002b0aeb3b1261fec5cdafe1a33bafa3c9f" ], - "optionalKeys": [ - "+c4924c7432a5cfdf4f51d49c7208045aecc934c9e85306303259fc589b30ca7a" - ], + "optionalKeys": ["+c4924c7432a5cfdf4f51d49c7208045aecc934c9e85306303259fc589b30ca7a"], "numberOfSignatures": 4 }, "signatures": [ @@ -38123,9 +37415,7 @@ "63b4d0840c5b4f991ebcdbbd7ffa623cf4698a759dfc7a0915decc5e6255de9247257e24de54071aba32160715849c8e811cc8ed2683a9a058964d9980a4dddb", "06cf66ef149bd0fd8e098ce5aca57f7ca62ed2602edc113ca67a2e11cebdbfbaf4475a39c79d619d43beca57ed6b0d62d04c1f3dca98fc999cbf42258fa53d56" ], - "optionalKeys": [ - "+81c868e8e3e448cef8e1412afe234354fb01beb2f1b40a62b3270f1c659c03f8" - ], + "optionalKeys": ["+81c868e8e3e448cef8e1412afe234354fb01beb2f1b40a62b3270f1c659c03f8"], "numberOfSignatures": 3 }, "signatures": [ @@ -38413,9 +37703,7 @@ "senderPublicKey": "4f89914c250ddb03ef81ac05d9976ad2f6bebea2e595bce4a23f6a398807a1c3", "nonce": "287", "params": { - "mandatoryKeys": [ - "+78c76b27add7c1d1771afc4f28f14605d44b1946f7d6a6c096b99a931092c506" - ], + "mandatoryKeys": ["+78c76b27add7c1d1771afc4f28f14605d44b1946f7d6a6c096b99a931092c506"], "optionalKeys": [ "+e266a82ceb0b428c18e8ae466d2d7b17f33b363bceeadc93483ddfc3a2a647c3", "ccd4752d4f5a3f7808df5da02f9fdfdfd9656e077080889d79e53912769af13ef1118bd772e37837334990a85317359b21a02b113416606db4c19a25d5fcbae1" @@ -38486,9 +37774,7 @@ "f8fdb07441754df1c3e9cd96c121b81d295acdcbb988c12ff3e301b1ea94a0d0b58d5026e3d83cca35a983df140a14aa049ee151c1f9b53e6fb73520650f689e", "305ba7d25d02c3b450380264ee5df106bf9de622f9cca9327547fcede0e75de70850171ca5e89be08a84df2536ad4f4c02304a0e84a8c8958d4323268b1042fe" ], - "optionalKeys": [ - "+73fe5f95c73615c19faf2fecefd10e5062569f69530c824ea01bcf8f0e4e3872" - ], + "optionalKeys": ["+73fe5f95c73615c19faf2fecefd10e5062569f69530c824ea01bcf8f0e4e3872"], "numberOfSignatures": 4 }, "signatures": [ @@ -38548,9 +37834,7 @@ "4429d707a8bf0a498d62842a0aee838be412f4bbad89717961b9057a680259bad76bb763b2368551ff02119490c117b338d31b022fc0fbe129a2a237fd04626c", "71b9fcb92e56b6007b7d9d629e82260cd6dd36b46d70d3b01ad7a5620ac3b4b2f0091e713335b099965a48f743592c66cefcb3b7fbfc7142c1aa4caffa74c2e7" ], - "optionalKeys": [ - "+93bc10315a1b770329e1580dde201af31c5ae0586642d273bd1ef542a27e3903" - ], + "optionalKeys": ["+93bc10315a1b770329e1580dde201af31c5ae0586642d273bd1ef542a27e3903"], "numberOfSignatures": 3 }, "signatures": [ @@ -38652,9 +37936,7 @@ "bbde7ee90aba860a9efa6b09fef9110783219469bc1309fc0ad6489e0027eb426aa69826129be08c40597a9e5d98976688ee987dbb89053e400d2d1d95916c8b", "76df5cb1f8e3af9e31b65010a67c2fe29c56a9e3fe892cef16a9850efd1f83e6d3ae3e5339ef389c5774c1e778cb29f4769f32026de83dc72025bfdfe93080e5" ], - "optionalKeys": [ - "+43c07646c603bdc780711e68d8c1baa7b046b4149eb62ed5f7da3649bfc34fb7" - ], + "optionalKeys": ["+43c07646c603bdc780711e68d8c1baa7b046b4149eb62ed5f7da3649bfc34fb7"], "numberOfSignatures": 3 }, "signatures": [ @@ -38731,12 +38013,8 @@ "senderPublicKey": "d386e142a1287e3ce2d0d7da214ae103710e113e1cad2994fda73398faa365cf", "nonce": "49", "params": { - "mandatoryKeys": [ - "+040d1715b1889679205ee529e188195d4e0c5d4005bbd5ecfd05e5042bff5db6" - ], - "optionalKeys": [ - "+98d184ba6567d47a5ee268003d8f1f34560fd76e28704eab116db5da13ada9e4" - ], + "mandatoryKeys": ["+040d1715b1889679205ee529e188195d4e0c5d4005bbd5ecfd05e5042bff5db6"], + "optionalKeys": ["+98d184ba6567d47a5ee268003d8f1f34560fd76e28704eab116db5da13ada9e4"], "numberOfSignatures": 1 }, "signatures": [ @@ -38791,9 +38069,7 @@ "senderPublicKey": "3b80d0a9436d2b2cfc75ca5ece7d22571912ea08c3007a35c01f9f579f28ad05", "nonce": "992", "params": { - "mandatoryKeys": [ - "+f7ca91a55aaa0d3f18f861d11e028a4097a04ea13214d5455c6ac0bbb240a854" - ], + "mandatoryKeys": ["+f7ca91a55aaa0d3f18f861d11e028a4097a04ea13214d5455c6ac0bbb240a854"], "optionalKeys": [ "+a5308c6649e2c297e58fd09ef24e6135143a6835f11fe98ddcb46026beb4017f", "cb1662dfa8030583c57b815758e94d072c83fc14f837c9c9abb604fbc1f9b23b3d3d1c672e66309f8b0fa40a3b8c0d37c039d9d833f359a722e493dc1e29078d", @@ -38929,9 +38205,7 @@ "2ac65cb219af7565954a4c8b77a65bbcb47605075501810dca9d4659e02c03829381413c40ea16b1e7eca53dc5f4a3cefd0de6cd55c5b3a48f30433b3f073b3c", "01ee1f9cc89d877b97ec26c624787c339ff1f0a6d08d98abd2629ddd43a011c32826381ca3c2adf81047565eff0f8856c47ff9fd66c6bea7ed2417545e533381" ], - "optionalKeys": [ - "+d42b1342dcce8cfa4885297453fb6918b38e2f8cb70ce3a118d5de7d1b93d992" - ], + "optionalKeys": ["+d42b1342dcce8cfa4885297453fb6918b38e2f8cb70ce3a118d5de7d1b93d992"], "numberOfSignatures": 3 }, "signatures": [ @@ -38967,12 +38241,8 @@ "senderPublicKey": "189d1a123b75b1f0801a596f76753310b53c3217b05773b7526cae0136eb15a1", "nonce": "987", "params": { - "mandatoryKeys": [ - "+379348b9fab6f7f8346a1791fcfb6c1816b14fc6e2796de22dcff22390422b8a" - ], - "optionalKeys": [ - "+d5268f091968052fda829a02366734241796a8a4e8038b6c583567b79a967a4d" - ], + "mandatoryKeys": ["+379348b9fab6f7f8346a1791fcfb6c1816b14fc6e2796de22dcff22390422b8a"], + "optionalKeys": ["+d5268f091968052fda829a02366734241796a8a4e8038b6c583567b79a967a4d"], "numberOfSignatures": 0 }, "signatures": [ @@ -39036,9 +38306,7 @@ "senderPublicKey": "11c3d6f8af089742a9289b29fc77531c47e960577d392c4e0f819d4e923efbbd", "nonce": "773", "params": { - "mandatoryKeys": [ - "+6e82db9784d03317c689b3bb94e6dc84d352072645566ea03b4ba81cbabf97d0" - ], + "mandatoryKeys": ["+6e82db9784d03317c689b3bb94e6dc84d352072645566ea03b4ba81cbabf97d0"], "optionalKeys": [ "+0dfbed5024c75383efd739e93adf5f46ac408ca7ca227a9dcdd3183ca2e92d4d", "0f88f03467b0c2fbd720f78f079ee253c3f029b6b92333ec28e403f56374939fdc39bcd280cceb06120f0dd07d70744372e3b76638adf40e855e6e690b6fefb1", @@ -39209,9 +38477,7 @@ "96e5675e5fa50af7591abb3d52d11aafa89767723a8426021c59f48a576e737f93df86ebbaa71cc8688bcece4c0dcd62a193386dd83545c5a045cb245819f71b", "d7b56f3a762d33828a1a29c7ea03863909d57f584578ec7c829409544f6edf9fbdf858d3ac6a408218ef69b1b930d21e3b2ee18319d4c498acaeecf8e5e76c6a" ], - "optionalKeys": [ - "+8293e9ec5bfbf28770ad081674848aa371b91591b53c49a32b61a542c36b7c60" - ], + "optionalKeys": ["+8293e9ec5bfbf28770ad081674848aa371b91591b53c49a32b61a542c36b7c60"], "numberOfSignatures": 4 }, "signatures": [ @@ -39228,12 +38494,8 @@ "senderPublicKey": "3837a9dcb84c62711fa74de9558ceb5a6b8be55030a7c3c54ebe08c4a5f3b258", "nonce": "420", "params": { - "mandatoryKeys": [ - "+f91fc08430866fe1bbffa3b1ec4bbf60a6a80acb039c1fe5b1c0632d2b55fa5a" - ], - "optionalKeys": [ - "+2acba1c136e7a790eb1c4d4f4b78fb2d942de0a60246b85fea0f2255c4ce9082" - ], + "mandatoryKeys": ["+f91fc08430866fe1bbffa3b1ec4bbf60a6a80acb039c1fe5b1c0632d2b55fa5a"], + "optionalKeys": ["+2acba1c136e7a790eb1c4d4f4b78fb2d942de0a60246b85fea0f2255c4ce9082"], "numberOfSignatures": 0 }, "signatures": [ @@ -39346,9 +38608,7 @@ "6c6337d679c57f98524f27e68efde5900e644eff5f2e07caed419227e2cd768d30044a1afdb52b085138263fcbf275ef7c1d9586eeedea2d4d6304fedc5722bf", "dfe5aa81fa71f94a2470c639e5c556a1481d310f8cd53d7cae7357a3eb52c3ca18441d2feca25c1804d0d44e847d14e0f7ffedb20dec960959ea91a1918f6b72" ], - "optionalKeys": [ - "+2eaf75d0e1c9d6696e34e1ec24d251612f82039342c6eb3e3bea48a89faf4ef5" - ], + "optionalKeys": ["+2eaf75d0e1c9d6696e34e1ec24d251612f82039342c6eb3e3bea48a89faf4ef5"], "numberOfSignatures": 3 }, "signatures": [ @@ -39384,12 +38644,8 @@ "senderPublicKey": "d31ef0ccaa1579665f84e8fdf815984ec81b3c6b08351a5c04cd6f3101e814db", "nonce": "975", "params": { - "mandatoryKeys": [ - "+1d7fed8f4a3fcce9c2e19a97b08019cce707c071bac8e3aa8e2c5ae758e9b0b7" - ], - "optionalKeys": [ - "+b3c7d6364b35ecee805c13e10407d06b5f63f3470671c328bacaa8581b4a796d" - ], + "mandatoryKeys": ["+1d7fed8f4a3fcce9c2e19a97b08019cce707c071bac8e3aa8e2c5ae758e9b0b7"], + "optionalKeys": ["+b3c7d6364b35ecee805c13e10407d06b5f63f3470671c328bacaa8581b4a796d"], "numberOfSignatures": 1 }, "signatures": [ @@ -39411,9 +38667,7 @@ "3da2575638af14a0f28fd1e26621df380df4e4844b389b20551f4fde6dbe684643a56c14ac50ed36756550bf8c921ed45b9c401c754fd7fe084b132c4ccc5121", "bc50c4b94c008c73abd8ad12eb5e0313d14cb993a966846e1fede1a325ca1353122538a39c0178057e4ee539d561789553711f3dfc9fc3052471112269942ec7" ], - "optionalKeys": [ - "+68321b4cee90f862ae0f980a5521e146dadb31721917e63719a11f8140f9a34d" - ], + "optionalKeys": ["+68321b4cee90f862ae0f980a5521e146dadb31721917e63719a11f8140f9a34d"], "numberOfSignatures": 3 }, "signatures": [ @@ -39752,9 +39006,7 @@ "+e22d190865c213a770d2a514b55e3d8428f0c76a6f582bd76cb49ad72bfe1c8c", "c59b62f17f1376f23453a09a92c2e6367dbf2e116a24a01c5cad2ed81cbbdc189553d8002427c575d06ea24458249c5b8140dc5bcb14a554591f1637df85b993" ], - "optionalKeys": [ - "+589698c864fbf5b094ee1c73aca1b221eae9d988a8040ce0a8b0773454b4de17" - ], + "optionalKeys": ["+589698c864fbf5b094ee1c73aca1b221eae9d988a8040ce0a8b0773454b4de17"], "numberOfSignatures": 2 }, "signatures": [ @@ -39909,12 +39161,8 @@ "senderPublicKey": "89e4c69a107cacabf3f20ee3d29c87a73dbfaf0d625eaf9c870df67155803722", "nonce": "824", "params": { - "mandatoryKeys": [ - "+ea1018127762fb3e29b7214f43ca3876aef6e6b82db21cf03c1cb4f18953a667" - ], - "optionalKeys": [ - "+281098a1a1abfad48a44c6770c72dc1b59d9a74b6f6cdcf4b0521f734e7d9db5" - ], + "mandatoryKeys": ["+ea1018127762fb3e29b7214f43ca3876aef6e6b82db21cf03c1cb4f18953a667"], + "optionalKeys": ["+281098a1a1abfad48a44c6770c72dc1b59d9a74b6f6cdcf4b0521f734e7d9db5"], "numberOfSignatures": 1 }, "signatures": [ @@ -39956,9 +39204,7 @@ "bcb824cb210d72059ca60522d1d0c191722e76e0e9bc45833c0e329e1d9deaf31ace2cccb06e35f5a87cb1a06cc36a10b1384c1b6093cb83439ceced0135478e", "78bf47c01a7633669796c5c85f5af4e4dc274e44f5a3bac9b0def4819b7194dfe075436d099aa22c4b2dbcf95f0982b9e3e91f576f26f594f084f3629fa35978" ], - "optionalKeys": [ - "+8770be5e7a79ee032cf72eaeda956ec61cea725375fba05f704ea70415bef253" - ], + "optionalKeys": ["+8770be5e7a79ee032cf72eaeda956ec61cea725375fba05f704ea70415bef253"], "numberOfSignatures": 4 }, "signatures": [ @@ -39994,12 +39240,8 @@ "senderPublicKey": "bc2d4e56d0269f0b0f348509fa2b442957f57994991e4b7a4c2b4fe5222e09af", "nonce": "617", "params": { - "mandatoryKeys": [ - "+f9b10d565bde80e45f4a3ae897c2500eebd33f53a7456fd3e9daf49b474c11bf" - ], - "optionalKeys": [ - "+1ec48bdba78243a66fec5eff49efea730aa171d6eb3ec0bb87d7abe442e90e69" - ], + "mandatoryKeys": ["+f9b10d565bde80e45f4a3ae897c2500eebd33f53a7456fd3e9daf49b474c11bf"], + "optionalKeys": ["+1ec48bdba78243a66fec5eff49efea730aa171d6eb3ec0bb87d7abe442e90e69"], "numberOfSignatures": 0 }, "signatures": [ @@ -40022,9 +39264,7 @@ "67492307fbdea925e083e8c15ab06363e289662958e299076876c4d65b4353a3b689be55d718d84f970d3caa04fb9f5c5912c2b5cb109bebf8c080df112de15e", "8c31cffa9abeb1b8fae149b3428f83eaaf84e4ca201147e267fa3e74d60ee1654346b3bfb05372b0f4b58250ca206b981754da413352d04956ecb05d2dc1f068" ], - "optionalKeys": [ - "+c45effc72cd5811a92f5f01a67ee0e1028b5c384aaaf7dae434c8ee2de5729a8" - ], + "optionalKeys": ["+c45effc72cd5811a92f5f01a67ee0e1028b5c384aaaf7dae434c8ee2de5729a8"], "numberOfSignatures": 4 }, "signatures": [ @@ -40186,9 +39426,7 @@ "57cd103f3a9735ee4897280f6a3a05fb03187b353d71d5317df5efbcc05e60a431fe2efc559432b5e748b63fa3f769e201e737b7ef7d4ebad3dcd3d973372608", "f1428a5fbd6cc9b14ce0ec6ff58f8eaff92e276b3c1a4f57e08efbbca2d0d0e79f8c53bda5d336cdbbe43aefc728fe4bc2d57e609256ac6779dcb7bb7ee23d89" ], - "optionalKeys": [ - "+5f3e58c907df12ad3c04434d8d1215383fbfb3a32f0390025b810cddb8128e1b" - ], + "optionalKeys": ["+5f3e58c907df12ad3c04434d8d1215383fbfb3a32f0390025b810cddb8128e1b"], "numberOfSignatures": 3 }, "signatures": [ @@ -40321,9 +39559,7 @@ "+6413144ab57c2d47532cb54358558601b031a4afa53590915930c7f937665e6f", "c7085f08c35e8024f0197bd388f33b8f04385ef0e0520af847aeb4cc0ba413cede276dbc73335b7aed2c7405fc7fb8e4619c0b42ac68cd4aee7f21ac306a3445" ], - "optionalKeys": [ - "+7e477a0a90e3438d055744894927e9b45bb071072406506a4be135854b9670a7" - ], + "optionalKeys": ["+7e477a0a90e3438d055744894927e9b45bb071072406506a4be135854b9670a7"], "numberOfSignatures": 2 }, "signatures": [ @@ -40519,9 +39755,7 @@ "senderPublicKey": "161d159ced5737d0107f9792db37a74bc0d70450dea52ffbd995adc2bd33ad76", "nonce": "134", "params": { - "mandatoryKeys": [ - "+118c689017691034184c99df11aa6a43b866b979f881afeabddf1d2609b4b27f" - ], + "mandatoryKeys": ["+118c689017691034184c99df11aa6a43b866b979f881afeabddf1d2609b4b27f"], "optionalKeys": [ "+718b2c3737f33809945422bee1b12baaa6d5c1d8201ff98993449d1bd61abfd5", "d960c46e3da11f538981fab81c5fccfbadcfed3b9a4e070dccc45007c57a3081267f3523fa7d9969450fde26ca24f28bf3250d249565d839f560cb42a4c11f2c", @@ -40639,12 +39873,8 @@ "senderPublicKey": "9ca2cde4dcc9ab6c1e1a435ef4356ec96f931781ea582c149a4dcf95499cf618", "nonce": "518", "params": { - "mandatoryKeys": [ - "+ff4d96f19a124f382f02e7e35ba32e9e10c46118a8e1aa3838e11f10a3a6e2c1" - ], - "optionalKeys": [ - "+144c4ea9686601de7b4d80ff4f2e3dba44f79e5b048ac32661cc8b80936bc9d3" - ], + "mandatoryKeys": ["+ff4d96f19a124f382f02e7e35ba32e9e10c46118a8e1aa3838e11f10a3a6e2c1"], + "optionalKeys": ["+144c4ea9686601de7b4d80ff4f2e3dba44f79e5b048ac32661cc8b80936bc9d3"], "numberOfSignatures": 1 }, "signatures": [ @@ -40843,9 +40073,7 @@ "+81bec4467544312149c282128845fb3de9a9db2658027f24063434c8e23a2ab0", "f73038d59c57351c15fc40d916e32ac6cdc6974492914df5e4f717d57e58f757d6068fde35ad56a68f943c1c0d523a7929892448aa25368a426f5c7a47c28cf3" ], - "optionalKeys": [ - "+e32d22a776f7fb01474ad28eddd100a0b04858488e0e1846876353985e779692" - ], + "optionalKeys": ["+e32d22a776f7fb01474ad28eddd100a0b04858488e0e1846876353985e779692"], "numberOfSignatures": 2 }, "signatures": [ @@ -40862,9 +40090,7 @@ "senderPublicKey": "f821cce7860c282485515f602168ad638e1d2eb563806293ab71b292e667bc2f", "nonce": "166", "params": { - "mandatoryKeys": [ - "+1da9d60de0e933857e7889113b846c1a6ec7d1782615f7169da21e21c5907d93" - ], + "mandatoryKeys": ["+1da9d60de0e933857e7889113b846c1a6ec7d1782615f7169da21e21c5907d93"], "optionalKeys": [ "+0b7b559bb0763502f6463ee341572da8eb7dba0c58ce6b68ec26962dc461f768", "465b54acfdd927241b159afbd48ca4a6e4aa3287a63525acf6cf8d241d7770a34e60af4898b6be4f09bdb510943fecd4793ee62e72bc7e404218d7c2cf9baa6b", @@ -40890,9 +40116,7 @@ "+3ddc0c0ce9ceea20c8527e7205a14c6db61f9530a32aadcc7ef215043a7f62dc", "5b3839976f83ff67dfcac1c5cd2bf1cc58c94ee8ceecae3306a8968ee010f2c004b18bc631489c2774e3b1b885161c0d3a2de937570f97f982abebc61c1914f6" ], - "optionalKeys": [ - "+b3d6ffa3af465a4c69936e4e6528689fb2aeb551e01a5b8b30756200261e5e5e" - ], + "optionalKeys": ["+b3d6ffa3af465a4c69936e4e6528689fb2aeb551e01a5b8b30756200261e5e5e"], "numberOfSignatures": 2 }, "signatures": [ @@ -41296,9 +40520,7 @@ "senderPublicKey": "33c041eb1ec24fb8923af3a11acdd151d861c69cf35218af416d18d53ac63894", "nonce": "79", "params": { - "mandatoryKeys": [ - "+8d6a0506f5a12a5112826bf6baadbb9d13ff19a1ad0974fbb3e47314610bc95a" - ], + "mandatoryKeys": ["+8d6a0506f5a12a5112826bf6baadbb9d13ff19a1ad0974fbb3e47314610bc95a"], "optionalKeys": [ "+e4db14bb4cc8869b28e1548f1e9635a84bfb9f243eaecc1f35cfc4f74dfd1386", "d020237db08ca26131b9ebc142e9a92d0be3ade07e91bfbea6c1bc8f6ec17d4816495304ac16ad12c8dccaeca02d7bda8b12f9cec8491ea4289ca2c7d7ed5dc3", @@ -41357,12 +40579,8 @@ "senderPublicKey": "99c53da8db48e5396609b1ae7e42262f9772fc8dcd4284fa3e9ba58c6a771199", "nonce": "880", "params": { - "mandatoryKeys": [ - "+9ab5910030d6661fa82330125db858eb27177e0650bd12ef770fe591d879407f" - ], - "optionalKeys": [ - "+b2949a161ff5fbcaee4ff4d961fdcb4c02f25b5f7e2d3a48c07ba3e6d705d6f6" - ], + "mandatoryKeys": ["+9ab5910030d6661fa82330125db858eb27177e0650bd12ef770fe591d879407f"], + "optionalKeys": ["+b2949a161ff5fbcaee4ff4d961fdcb4c02f25b5f7e2d3a48c07ba3e6d705d6f6"], "numberOfSignatures": 0 }, "signatures": [ @@ -41586,9 +40804,7 @@ "senderPublicKey": "3621d4e50efd93ce067cc459b66b1e4e1b4cbfb46b8efe589f31a59a5b52100f", "nonce": "42", "params": { - "mandatoryKeys": [ - "+b1e7b4e69d03887b1972940cec5dc91be3d06814914fc600fa2e0bed1dc2b081" - ], + "mandatoryKeys": ["+b1e7b4e69d03887b1972940cec5dc91be3d06814914fc600fa2e0bed1dc2b081"], "optionalKeys": [ "+da58b51d31760c2f610b7e39f662972d64a1e6e36ae028dfd5b1d425d591800a", "edb30a3f87ece9af106379dc31e3c13ddeea019001a6cd5e42f21a49409ce29dc051e9c64eab88b3773dc3a00244b3bce6b29ca2cf0c4dbce3845da9670ba5f3", @@ -41795,9 +41011,7 @@ "+ba3563d9d518a2148b4328c230ba73179ee41a30e513451048370c388a808efd", "9177a6f190daaf7a9c64f70f422b57041018f6f33593c086db8ff718a8a5e1432fa64d63be3dbc1d847122a00a2f76001c555517050499ab81648a431727f34d" ], - "optionalKeys": [ - "+56519941f18a54353cc6f1a1eb84453bc786512bf3ba5c9b4c0394f01229f01d" - ], + "optionalKeys": ["+56519941f18a54353cc6f1a1eb84453bc786512bf3ba5c9b4c0394f01229f01d"], "numberOfSignatures": 2 }, "signatures": [ @@ -42078,12 +41292,8 @@ "senderPublicKey": "1c5b1642a14374376a915bb532ea2a317550aac4fe7fba4ddd80d926e07e62fc", "nonce": "263", "params": { - "mandatoryKeys": [ - "+c0b3243058d80012ec087fcc668b1eb6eab50c532d779b631ae2985ab6dc1cce" - ], - "optionalKeys": [ - "+ca91a3dbcc97c7cd2a49e1adaccfcb2d7e3cc41aebe5349d359077e716fb1db7" - ], + "mandatoryKeys": ["+c0b3243058d80012ec087fcc668b1eb6eab50c532d779b631ae2985ab6dc1cce"], + "optionalKeys": ["+ca91a3dbcc97c7cd2a49e1adaccfcb2d7e3cc41aebe5349d359077e716fb1db7"], "numberOfSignatures": 1 }, "signatures": [ @@ -42117,9 +41327,7 @@ "senderPublicKey": "fea96e2b96d256dc088e49f891d3753e5111b28102d6fd95c2557a4dbc2f93d2", "nonce": "416", "params": { - "mandatoryKeys": [ - "+26edfcdbb98ba7e9e0ecbaa3f22cfea49b9c2601591c00dc6d355a09bfe77553" - ], + "mandatoryKeys": ["+26edfcdbb98ba7e9e0ecbaa3f22cfea49b9c2601591c00dc6d355a09bfe77553"], "optionalKeys": [ "+314f8ed24d3f0da096a826840c8cdede8e09a8bf8f6b6374309adde39c678868", "23d0e0840da594288dddb86379cb97b8ddcd1779ea4056046d8333195750585fd3d1e2ab6fb53dfa20767692c4a39300813d3541a312e12b452c12b6921b0bcc", @@ -42200,9 +41408,7 @@ "senderPublicKey": "d58b39bb386645c8ee59f5009c5132cd5ddbbac223cc44dc187978c21c1b60a1", "nonce": "312", "params": { - "mandatoryKeys": [ - "+9c5bdd412a7ca2252b4bf962376f8e5d601ac8869454f1b89b49c0a9537bd594" - ], + "mandatoryKeys": ["+9c5bdd412a7ca2252b4bf962376f8e5d601ac8869454f1b89b49c0a9537bd594"], "optionalKeys": [ "+38203198991ceaee8e0f2f9af287341d1935eb2df1f756d64e2dc8af6dd11e88", "3d4c44df52bc83b01c4c32d065817dce2a39d1cd345caf08bce0756ddb12409cf92df37188bf6f978d41dbf4d7e99362d0b5d111a8416fedf220998c7c53d0d8" @@ -42339,9 +41545,7 @@ "+07155b6e73fb1f424f5604c4b05f8767c4d8c67c0fded81dc743a9b1bbc02d2a", "91b7e7c479d898f45b26101c2b718b09a8fd772cccaf9066f6a4cf7a57c57577d71683a5308876c10a7f44a7f61cb0c7e0389f8b100e77649668d85f351ece9c" ], - "optionalKeys": [ - "+13675301f95cc91f57752e5dc4e7be524fcf058463172eb92a3d3357868f46ec" - ], + "optionalKeys": ["+13675301f95cc91f57752e5dc4e7be524fcf058463172eb92a3d3357868f46ec"], "numberOfSignatures": 2 }, "signatures": [ @@ -42518,12 +41722,8 @@ "senderPublicKey": "166ec525bf03b4020bfa81bfcb0dbaa942e7237f93e7f6d3cbb8e9abf082c968", "nonce": "799", "params": { - "mandatoryKeys": [ - "+9d7ba4a2fb5f461a82230f42072b9a958df0ba6625c15ba558fc84bfdd2da8db" - ], - "optionalKeys": [ - "+5beda3410dfb1f3ea4c9fcbd6f8e8ad6861f3e2ecd15385337e3bca92fcb85b2" - ], + "mandatoryKeys": ["+9d7ba4a2fb5f461a82230f42072b9a958df0ba6625c15ba558fc84bfdd2da8db"], + "optionalKeys": ["+5beda3410dfb1f3ea4c9fcbd6f8e8ad6861f3e2ecd15385337e3bca92fcb85b2"], "numberOfSignatures": 1 }, "signatures": [ @@ -42579,9 +41779,7 @@ "c88f2b905bfbf90c68e923477676dbab6ddfbe7de1b986520f8908a0f394905d13e443410bdb3c31a697bea24aa0165f534e5236ecae4dc54c476c8dca4abd07", "0d76f03e4cf610cc8fd1af64684d44138503c9b7e5852fa5fb914382323d3930e981b80f7dc0cc010c272ac0b8474ab7d7f2b7bdc87d1f314d14cfc41ffcedd8" ], - "optionalKeys": [ - "+5a3228d0125fb4663d7df7716b6489ca66068a94a207cf42703e615a6da1197f" - ], + "optionalKeys": ["+5a3228d0125fb4663d7df7716b6489ca66068a94a207cf42703e615a6da1197f"], "numberOfSignatures": 3 }, "signatures": [ @@ -42615,9 +41813,7 @@ "senderPublicKey": "933d2ae44eed6e012c894dc54dea5b79c18db6c3aef4b902c46a2cfe11ced2ef", "nonce": "98", "params": { - "mandatoryKeys": [ - "+3d4052a51ff482561b0ee274220362aafb128dcdfb9b49dacd89c8acee0da67c" - ], + "mandatoryKeys": ["+3d4052a51ff482561b0ee274220362aafb128dcdfb9b49dacd89c8acee0da67c"], "optionalKeys": [ "+8e908551b7107259f594fae8a825aac5df0e599e90b9003fbdea906803e2e1f1", "09c364b0684db28377a1734db250dcc007b86d07fb292b0c73567e77329a9c0bb8e64c439b82fd1ffb4ef7170825df456b5ad28f0518578a2344a10b35ba0519", @@ -42717,9 +41913,7 @@ "senderPublicKey": "3af8f51d4198951af31c614cd3603650890ce9e1064b5cb353d685c4efd729d5", "nonce": "52", "params": { - "mandatoryKeys": [ - "+f8c233a61bfac792148998caecd6c6deca2fb3d831beb050e726e8ef0a45a981" - ], + "mandatoryKeys": ["+f8c233a61bfac792148998caecd6c6deca2fb3d831beb050e726e8ef0a45a981"], "optionalKeys": [ "+5a527fe0b9110b2440c6273c44c3193ca7f734bee1786823261e2337d072dc2d", "c04034f3cd87838d04eed3b591157ae3edd6f00aa0809d2bff0993b0108dc4a90c2a8c80da439484cebea21e91c6da7e2dc1752ead5cb8b530ad82869f9f4c3f", @@ -42742,9 +41936,7 @@ "senderPublicKey": "26050b3fdefc1eec9e3d378ff3549dc60fcc83ded35c81678f5a5ddd9ecb82dc", "nonce": "570", "params": { - "mandatoryKeys": [ - "+f9d9458cb5d2898652adf1d1725252e06fe349f21f429fc7172743f5e7609497" - ], + "mandatoryKeys": ["+f9d9458cb5d2898652adf1d1725252e06fe349f21f429fc7172743f5e7609497"], "optionalKeys": [ "+7f0819e28175485f8629736dc80783e05035d0eea0f3fcfdd70870129a29438c", "82a56685392b9796608a4e1e89338f8b01a1a996f00918ab3f7c8568e95b905a1ae4ea52e7da428f13234250626e877482996a6f3e246b44986b5ed185c7ff4c", @@ -42772,9 +41964,7 @@ "ecef25820458a578a958b5c8d1d8f4a7763610867bd7e42043ee61ac2995b01b71999a96cdaaae43b6e4fdb0caeee9deb8f6a662a437f462c154f64ed7f90949", "64f0a0bb6cea06a4cf6ba5329e0f577faef0a5e7c6274726c50b488816dfcdf18c217aeba46df621881bcfd81eeb886d840e7a82305a45f38fb64aba2bff7dad" ], - "optionalKeys": [ - "+fffef3713c195069b21ccb557bbb5f5ce20f298cb411e94aeb2ccce1041b11e4" - ], + "optionalKeys": ["+fffef3713c195069b21ccb557bbb5f5ce20f298cb411e94aeb2ccce1041b11e4"], "numberOfSignatures": 4 }, "signatures": [ @@ -43012,12 +42202,8 @@ "senderPublicKey": "d3cb42939191eb808b65690f97872574e4d0258894b7ad851dd2e4170dcf8ad7", "nonce": "78", "params": { - "mandatoryKeys": [ - "+cc95dcd45926817d27c28ce9424db319c8af1b7503fdb2cb804cfe251ba40850" - ], - "optionalKeys": [ - "+ee650c504156ba2ec136affcc42a171c4caaa7050f4888e1605284c43038dbe1" - ], + "mandatoryKeys": ["+cc95dcd45926817d27c28ce9424db319c8af1b7503fdb2cb804cfe251ba40850"], + "optionalKeys": ["+ee650c504156ba2ec136affcc42a171c4caaa7050f4888e1605284c43038dbe1"], "numberOfSignatures": 1 }, "signatures": [ @@ -43057,9 +42243,7 @@ "b986c84f2fea67862f0e69ec12658405d4899d1ab68da7b1051f3bb3f03f03f4fc125ffed98fa249ed3710e7c68aa54596bd2a4899d94cf34ab283d6aa8079ee", "750ebcdea801022daa1e45d10ffa42b78c125f2da1384df80873c5a2abf5af8dc61d0b795017034080a826aa2f5733b96d14124db4d9ebe82eb664fa85da41ca" ], - "optionalKeys": [ - "+695bc58b9f13328036141421d6043de2c481803234fc4927d6923f196a7bd833" - ], + "optionalKeys": ["+695bc58b9f13328036141421d6043de2c481803234fc4927d6923f196a7bd833"], "numberOfSignatures": 4 }, "signatures": [ @@ -43133,12 +42317,8 @@ "senderPublicKey": "57862712290476745b4e9932be5cd73a8bcf827883984690b8e916092b678f74", "nonce": "847", "params": { - "mandatoryKeys": [ - "+8d567c3cccd3bb3bf285caf7f232bdc56731375b85662016052ae710ce0dee3d" - ], - "optionalKeys": [ - "+a7f0b995cc3174d3ccccdea7b214e5a48fc4917c5b683a44e4f58777f10fe1e3" - ], + "mandatoryKeys": ["+8d567c3cccd3bb3bf285caf7f232bdc56731375b85662016052ae710ce0dee3d"], + "optionalKeys": ["+a7f0b995cc3174d3ccccdea7b214e5a48fc4917c5b683a44e4f58777f10fe1e3"], "numberOfSignatures": 0 }, "signatures": [ @@ -43195,9 +42375,7 @@ "senderPublicKey": "7afa04ee298929a4fcf6b46f6ca224c35a08e675b9f446c9f280b0acc8351518", "nonce": "121", "params": { - "mandatoryKeys": [ - "+e7557eed0c10713667e5ce8afcaab3181cd8f03adbe0cb5490bccff06d7c5472" - ], + "mandatoryKeys": ["+e7557eed0c10713667e5ce8afcaab3181cd8f03adbe0cb5490bccff06d7c5472"], "optionalKeys": [ "+4db5a57361e66eba860e99837d18bc34f595afd59e4dbe4ec39b4b8e0ff74524", "faf7303d9709ead8ac49c83d1355d2625b055f6670944e2311dbeaed1e3678bf707ca4c4d3e733856a7f9cd8bb68620981161886d75b2a1d2b48fae181f5e19b", @@ -43578,9 +42756,7 @@ "senderPublicKey": "a1a3b082c026c63fb4c5447f34e89f2041253003dd5ebf5211182fb208f485df", "nonce": "502", "params": { - "mandatoryKeys": [ - "+e403784d6afb474e4b77b31d2dc6812e7b8e96428324e0331b46a2eca2ca0dc5" - ], + "mandatoryKeys": ["+e403784d6afb474e4b77b31d2dc6812e7b8e96428324e0331b46a2eca2ca0dc5"], "optionalKeys": [ "+71a0e373eaed9b1b2b46f31f87fd9df2b73c465becc0c6ecdc7dd3c23016f7c2", "d23c9c719115fa493039f5a09b2566d8a064c93f938b2319b7de96090a435b3ee908277aa82eecd1c04a0320de985a92a3535c6005d538ea5e58a13301b13195" @@ -43790,9 +42966,7 @@ "f652b49341e60e3ba463b8f86d666603236b4c88e49a2577084992343d44d853dced6a4ee7495b7ead0e5e7cf8ac9a4cbb9a80187927563d082d9fecd711454b", "a05d04c58b89597858638ed7e8e9d78a4ef9713ff8570683789aacab3a78dca742bbc10b2af0db1adfef7bb3d7ce97933d17e1bae8089f8377d243c5921085ad" ], - "optionalKeys": [ - "+dd3adfab220463598c87c0ac911b2a687d8c096dcf9447d2ead6293eea9e51ed" - ], + "optionalKeys": ["+dd3adfab220463598c87c0ac911b2a687d8c096dcf9447d2ead6293eea9e51ed"], "numberOfSignatures": 4 }, "signatures": [ @@ -43883,12 +43057,8 @@ "senderPublicKey": "d9cdaa8fe6aabb32ef6dc187e85bac278b59ba95591b15e6288e74e4ad67f985", "nonce": "762", "params": { - "mandatoryKeys": [ - "+9cb5289e30a37a8b8472ce8557e9078305420a3fe6782ed0ce95389d4be08a1d" - ], - "optionalKeys": [ - "+35a5df4c9773d1addcfe00abf81f8db5eaa1aec3169c905f7c21e0c54a7e877c" - ], + "mandatoryKeys": ["+9cb5289e30a37a8b8472ce8557e9078305420a3fe6782ed0ce95389d4be08a1d"], + "optionalKeys": ["+35a5df4c9773d1addcfe00abf81f8db5eaa1aec3169c905f7c21e0c54a7e877c"], "numberOfSignatures": 0 }, "signatures": [ @@ -44108,9 +43278,7 @@ "+571b7d81fe38003786e4387367366b506f7f6c2cced9765f4ed5bb8534a260fe", "5e87ca816b120d27009f12d01adc26d3a0f0436bc36bb30e4d149cd7528f29e5999e98280f297609132a417e2530d2c5209d3fe82d675222c1e0c42577994160" ], - "optionalKeys": [ - "+487e4e8e3a04b22e11d1a352fe46034f8468d9969a58a26abdeae103b2edd787" - ], + "optionalKeys": ["+487e4e8e3a04b22e11d1a352fe46034f8468d9969a58a26abdeae103b2edd787"], "numberOfSignatures": 2 }, "signatures": [ @@ -44186,12 +43354,8 @@ "senderPublicKey": "ead4e69e31b7a4621d3a97a4d58bde72f7f5d5031feffe232b35bd22e52d8658", "nonce": "584", "params": { - "mandatoryKeys": [ - "+27c33a82496a14d164b7b4c1dfc29e3f64fd3299972724e5d20a688de75f925e" - ], - "optionalKeys": [ - "+460c28536b5f669279a591edcf7bb5a7999475d87f2d703f25ba5b93db72bdca" - ], + "mandatoryKeys": ["+27c33a82496a14d164b7b4c1dfc29e3f64fd3299972724e5d20a688de75f925e"], + "optionalKeys": ["+460c28536b5f669279a591edcf7bb5a7999475d87f2d703f25ba5b93db72bdca"], "numberOfSignatures": 1 }, "signatures": [ @@ -44325,12 +43489,8 @@ "senderPublicKey": "7dfe5d9886dba7c95e4c6acb5279e84085a0754e212bdbcc66a1a486f6795403", "nonce": "32", "params": { - "mandatoryKeys": [ - "+91de4dc325373c3a0cccbbbce009f268afce13162eefaed792137f87d81b32a2" - ], - "optionalKeys": [ - "+f023dc7acc479c6989a832d22d201214bff9f01f4994a9f32ecbb6f30cec0893" - ], + "mandatoryKeys": ["+91de4dc325373c3a0cccbbbce009f268afce13162eefaed792137f87d81b32a2"], + "optionalKeys": ["+f023dc7acc479c6989a832d22d201214bff9f01f4994a9f32ecbb6f30cec0893"], "numberOfSignatures": 0 }, "signatures": [ @@ -44431,9 +43591,7 @@ "senderPublicKey": "3b85ea6b973b89b775fbf128af8c2964b5c77449995ff265436292e7aef5b279", "nonce": "937", "params": { - "mandatoryKeys": [ - "+178f5debaf4ed8c43ab30f8ae205391257ffdc66ad192953f10d7657dedc2f97" - ], + "mandatoryKeys": ["+178f5debaf4ed8c43ab30f8ae205391257ffdc66ad192953f10d7657dedc2f97"], "optionalKeys": [ "+567a3b6807d30876e4602cded685350092a9128db2f40fd0e552c03a2f751aee", "06e35c7ae1237d3e32abfd596364cb708494c558cca146b544dd6987f558f2107d6869e6c697e94ddc8691d5bf1c5e7ed221cd7a900ce6b3cec058638d5be6e8", @@ -44587,9 +43745,7 @@ "senderPublicKey": "473cdf83099bcc4987f37dc3b88a20be61f77380b9f6d913bb9bf6d05ab90a00", "nonce": "594", "params": { - "mandatoryKeys": [ - "+48f614b5289bbbfd3581441f09e1200879a29763035a978164ae627b06dcb2cd" - ], + "mandatoryKeys": ["+48f614b5289bbbfd3581441f09e1200879a29763035a978164ae627b06dcb2cd"], "optionalKeys": [ "+0d13e9b0c1fd0daf1519a5eb8672c2eb66699d96a1f675f0b55b504adff9996f", "a6b4a113cfb84a0b57baff1c07fb64586f3c444b553d82741b081bd03b235f41bd2802b36397f712fbe5b3b9eb0ba27b6348c638f859b2f640e2f66a136200aa", @@ -44761,9 +43917,7 @@ "+093386b6d1931e9fec68337fead442ba7bf278ec4d361f817257a10369dbdfb6", "54e623cd05348f00cfe5bb2fa7ec7451925f3322fe6aa13112ec5108995aaae24e90d8a8055022799fc3db5c37f78603e9d3b93eb837987016a0b48d9b2e1f2e" ], - "optionalKeys": [ - "+3b0d619e1a47cff946206e67af88611814afca158b6f8538c547669ff0d6a75b" - ], + "optionalKeys": ["+3b0d619e1a47cff946206e67af88611814afca158b6f8538c547669ff0d6a75b"], "numberOfSignatures": 2 }, "signatures": [ @@ -44786,9 +43940,7 @@ "e9fca58ebfacfcba54f6f94ab969207a11f8a6f6e8187539809e8b5f7f59817105a69ceab805713041242de3d6f548f42a595bcfe0fcc5e3b45569a6f66d7578", "194849b6a3508c80c5dc2ceb2429eba13bb21d0ba7ebe1a1c0afab634e6a7d048696be6f398bdbf213db2f5a314f7187370b783696a481c6ec94eb5bed29677a" ], - "optionalKeys": [ - "+c157b254492a900f9d125d07a82b73d123e9501c5e2d766e4374a1e2f20d390b" - ], + "optionalKeys": ["+c157b254492a900f9d125d07a82b73d123e9501c5e2d766e4374a1e2f20d390b"], "numberOfSignatures": 4 }, "signatures": [ @@ -44963,9 +44115,7 @@ "senderPublicKey": "bf63d51a0a8e40b02248392d4b99af6f1e3553ed73e52caec4007a1b7182d700", "nonce": "15", "params": { - "mandatoryKeys": [ - "+9a1491573f6ac441e1775f8088ee3ef01ee9b93e899df8c2cb545e67591e2343" - ], + "mandatoryKeys": ["+9a1491573f6ac441e1775f8088ee3ef01ee9b93e899df8c2cb545e67591e2343"], "optionalKeys": [ "+f041ab025edce4971e2e4f7f20c146272ad3be382213bedda8047b5618079380", "09873662db18d9be232828110da09e94b157df1c14436833d7452e61638a186e6391c5603822ac2ab662c367f3dad1e7f7b3fa9e03008df1831c806c4800571e", @@ -45120,9 +44270,7 @@ "271166d33956dfb727d9ae24fa6267c0df4a23b26a250d160b9d89a14ef38d31528c4b95aa294e87f983470a9af5937e1b3f43bcba97f97ce6f997ca9d949d4d", "e7601032d2d1cefa2a4d3c6c07ac46938cb7fe18f87bfb4df6e17c0845a94bccda25336d5a2ca209c5d1878996ee9b05f339e5952c82385ec398244b5daf79b4" ], - "optionalKeys": [ - "+695aca9a6337d50db7681cfd69b256d42ec1d4e629a836c82122d4f5c2dcc6ce" - ], + "optionalKeys": ["+695aca9a6337d50db7681cfd69b256d42ec1d4e629a836c82122d4f5c2dcc6ce"], "numberOfSignatures": 4 }, "signatures": [ @@ -45325,12 +44473,8 @@ "senderPublicKey": "f5b8cc06c9e78ca3ed60cafd1d6064a454d4335ddb156764e5d291497199eb8f", "nonce": "233", "params": { - "mandatoryKeys": [ - "+001a49825d3683e973479cf7ed41d040b05b76e5b4cd2146d047537497556227" - ], - "optionalKeys": [ - "+7511d16728acbe844dd045efaa68871856e614fdead221da8f7f502da8351b1e" - ], + "mandatoryKeys": ["+001a49825d3683e973479cf7ed41d040b05b76e5b4cd2146d047537497556227"], + "optionalKeys": ["+7511d16728acbe844dd045efaa68871856e614fdead221da8f7f502da8351b1e"], "numberOfSignatures": 1 }, "signatures": [ @@ -45448,9 +44592,7 @@ "+9eb4f1dadd2556d157721d0a00cfb29e73a7413e08b6d657a28f4177440877fb", "e9d335e7135ee19a784f160c5bc9d3c00eefa9aa1aa2f16e0d9c1723b6d77f1b71cbf9f418f4cd4da7f6f34edf2f957f6274a1ee93c91bfb78092bac2febe109" ], - "optionalKeys": [ - "+c61516a7526e09ce9a9c6f4518b3cd8a69f5494f6f7d4a57aeb33d7e6076137d" - ], + "optionalKeys": ["+c61516a7526e09ce9a9c6f4518b3cd8a69f5494f6f7d4a57aeb33d7e6076137d"], "numberOfSignatures": 2 }, "signatures": [ @@ -45524,12 +44666,8 @@ "senderPublicKey": "8da442880f08a63fdf841a738dbf5ff3c8e5e178998e98d6d6481a2822fbe672", "nonce": "976", "params": { - "mandatoryKeys": [ - "+035de6d7b09b2b28ecfeef161be888f05046370d9290bb440a76192a03a5219b" - ], - "optionalKeys": [ - "+78e0c2f25ed678fab09161a844e207111bb4feb5964a6e1c6428ee9e1ba41309" - ], + "mandatoryKeys": ["+035de6d7b09b2b28ecfeef161be888f05046370d9290bb440a76192a03a5219b"], + "optionalKeys": ["+78e0c2f25ed678fab09161a844e207111bb4feb5964a6e1c6428ee9e1ba41309"], "numberOfSignatures": 1 }, "signatures": [ @@ -45550,9 +44688,7 @@ "+0319664da150de0dec8cad569c806894458c16ef7214ee844f360a0606029344", "b17da6eac4093848d89ada933d86aa21fc628ee3c849540a83e9b9ca69d8c96cd9d21e6829dfe54836864715a0669fb59ebadb0fefec0ad60fd9f517356db490" ], - "optionalKeys": [ - "+bfac58f3ec67849b5c896fbc0878e004ecb8403afd12ae75e6b5d64a0e90d874" - ], + "optionalKeys": ["+bfac58f3ec67849b5c896fbc0878e004ecb8403afd12ae75e6b5d64a0e90d874"], "numberOfSignatures": 2 }, "signatures": [ @@ -45569,12 +44705,8 @@ "senderPublicKey": "a5d1153e920dca61d696c99ee448717bd800041db4332f94972dd2da8f64bfa3", "nonce": "933", "params": { - "mandatoryKeys": [ - "+c59a2d5119307b524224a7b0458ab7890f612fe5df2cd5d39bb1271e185b65a9" - ], - "optionalKeys": [ - "+d355e9648d167c4b613659bf2d283999395ca9394ddfb53db390de97d384adef" - ], + "mandatoryKeys": ["+c59a2d5119307b524224a7b0458ab7890f612fe5df2cd5d39bb1271e185b65a9"], + "optionalKeys": ["+d355e9648d167c4b613659bf2d283999395ca9394ddfb53db390de97d384adef"], "numberOfSignatures": 1 }, "signatures": [ @@ -45650,9 +44782,7 @@ "senderPublicKey": "93bee694e88324ce6fc5d070a5b022c6b25413afdfc8b08aa24c5ef2efbe9331", "nonce": "372", "params": { - "mandatoryKeys": [ - "+ed19483bcb4c1179734bd77b05c73dc9b5360cb52b3c09080e7f2d199a6e28a3" - ], + "mandatoryKeys": ["+ed19483bcb4c1179734bd77b05c73dc9b5360cb52b3c09080e7f2d199a6e28a3"], "optionalKeys": [ "+5a550c1fc83f543d60d893abb11ec462db98eeaa5e69e1e5f472a80856dcc37d", "2fac635113bd23b4c95f0b12e38d91a3971103b6fb8c2637364dc70ad4bc379c70f1c20b932941506c2e5f9a164f19698fff9fb377a8330b7bf3d9a05d9d0bf0", @@ -45675,9 +44805,7 @@ "senderPublicKey": "89457c011ce267636133fa0081b5f7d308976f660645b1a3c329ef007ae4707a", "nonce": "848", "params": { - "mandatoryKeys": [ - "+a5ba159c370119178f66602bb4aea7e59ec16b198f0b83ab5c01c3ed7d203766" - ], + "mandatoryKeys": ["+a5ba159c370119178f66602bb4aea7e59ec16b198f0b83ab5c01c3ed7d203766"], "optionalKeys": [ "+5cc09ae6d826783e0fbcd0df9a1ac3c1ac92e2f26d239110b9d6933c85c5366c", "9694a4132c1fa0c802b5f67317fde38c16e0de1c3d8ba3a2f5176b498c62015373183b84f5ae6c44336e308c8cbf9bcd428869f9abdd988eccca89fc4002d1d7", @@ -45773,12 +44901,8 @@ "senderPublicKey": "039cfe2ba401d3aafd97f31116b8b71fa5e3182c4ec95d28506cb2d16a6bd4ee", "nonce": "44", "params": { - "mandatoryKeys": [ - "+c477d5d226c499d77b7309bc4e36a31b5078c8445b33b71815e6dfecfc9350c7" - ], - "optionalKeys": [ - "+234192815639435ed663d3ee52c4bf79bb113b4ccb4c665884a7545451ebefe6" - ], + "mandatoryKeys": ["+c477d5d226c499d77b7309bc4e36a31b5078c8445b33b71815e6dfecfc9350c7"], + "optionalKeys": ["+234192815639435ed663d3ee52c4bf79bb113b4ccb4c665884a7545451ebefe6"], "numberOfSignatures": 0 }, "signatures": [ @@ -45812,9 +44936,7 @@ "senderPublicKey": "fe85019b02c31c8ff260216fa42a2d0f2d21686bdcfab3454b326a714bb3a9e8", "nonce": "990", "params": { - "mandatoryKeys": [ - "+f0f866d5a1f10fdb0720e95378d3d4d0b386a8dc56f3b269686222c628843ef1" - ], + "mandatoryKeys": ["+f0f866d5a1f10fdb0720e95378d3d4d0b386a8dc56f3b269686222c628843ef1"], "optionalKeys": [ "+b00607b5add8dcb76f7b587c410122943e8d47fbb88d9848a00797854c81c5ac", "c874866ea7f2f2b595e4079ef3de2072fc1967f8b7e3e77256bd1dc7bc938cb435a336702656f608593754e55ab130e9812e8bc3f7ee786e631da75762627dd6", @@ -46015,12 +45137,8 @@ "senderPublicKey": "c95d59d300d85ae93dcfdf14800788a54b90c0d4893b870d6046f24620d202de", "nonce": "854", "params": { - "mandatoryKeys": [ - "+215d018820c35ecd560e8397af9830637816b4058246b551ebd4bcfb3a1065ac" - ], - "optionalKeys": [ - "+09a297f28a13a56a47217e5c6c41cee811c695c473d082fd4ecf46531d09a621" - ], + "mandatoryKeys": ["+215d018820c35ecd560e8397af9830637816b4058246b551ebd4bcfb3a1065ac"], + "optionalKeys": ["+09a297f28a13a56a47217e5c6c41cee811c695c473d082fd4ecf46531d09a621"], "numberOfSignatures": 1 }, "signatures": [ @@ -46161,9 +45279,7 @@ "c49c2bf3cb6d740486e0a1a0169ab51c99c8b4d56c79e9550ed60efff6cb7878f3a6122297f232e1972e0131c2ffdccf3d2a0b634d679cfaadd89196b7e2002a", "a36bf735adccf4c6c28a6654cfdbecff384f99256ff7c78b063a9dcbb07a5ebeb298d3030f5a2f0a69ae3242b1e0421f58f56afd27d8a3d81c35125eca8c4643" ], - "optionalKeys": [ - "+4d6699b90e1720df247ad94eb6a57aeb946e2fbf750fc11f561ad2d89eb027f3" - ], + "optionalKeys": ["+4d6699b90e1720df247ad94eb6a57aeb946e2fbf750fc11f561ad2d89eb027f3"], "numberOfSignatures": 4 }, "signatures": [ @@ -46203,9 +45319,7 @@ "b9cc16a58d3d2f9abab75b163a64eebbb805097a43ef028f44c6e6baaa5aacca31967b1c149fb8b683926987b42dd72286b15b79de0a83a34d4917f70ecbe3c4", "4d0c1d7d35aed1be11fa683de53ba5870b84242f919458fd3ca5284c127568fc40d76091884a549bc7a46df036d19f312450c210bd30ac7d1639378a855880d7" ], - "optionalKeys": [ - "+110d33f741f4dbb217385b0572a6d2087039417ef10594fca311a923fc1d3a26" - ], + "optionalKeys": ["+110d33f741f4dbb217385b0572a6d2087039417ef10594fca311a923fc1d3a26"], "numberOfSignatures": 4 }, "signatures": [ @@ -46437,9 +45551,7 @@ "senderPublicKey": "c85dd27678f924752e13969ed8837cff3accdfdfd3f7d50dc8871c39717889a2", "nonce": "199", "params": { - "mandatoryKeys": [ - "+dc6d59064dba8e04e4fc984ee8128d56f9ec3e9dd2c009f524b7394c63f49c53" - ], + "mandatoryKeys": ["+dc6d59064dba8e04e4fc984ee8128d56f9ec3e9dd2c009f524b7394c63f49c53"], "optionalKeys": [ "+2ba2cd1670832ad0a79bde3220bdfb99b87590b179ddb4a9c1e2163a730587ec", "23f3ea2470cd25bc136e4d8557de37ee245e9c57244515320cc786a5cacfee31ad3bc459e036d77b323f3634e747770c69a8cc23b1f8737e0f8c70b24ee25ef0" @@ -46513,9 +45625,7 @@ "senderPublicKey": "96f4a8ef64d7ce1ec3465631912881f1b81ccc06d6d8030351e5f36327b54f66", "nonce": "665", "params": { - "mandatoryKeys": [ - "+1bb44ded732bbdbcc84e255ec548638102e3eeb26dc1e6c692a9e75ef42e00a0" - ], + "mandatoryKeys": ["+1bb44ded732bbdbcc84e255ec548638102e3eeb26dc1e6c692a9e75ef42e00a0"], "optionalKeys": [ "+ddb1f2cd2acaf890a96a30e199abac1e8c03029aa20a0d2f7a155a056f09d3ff", "f644b5709d39458e1a52cdb716bad057703a71a019c944d36d82f9d79653aba2f775355c087c5f583f3023df5c0f463c29c4fff1c003e05dd2b0d115723c527f", @@ -46563,9 +45673,7 @@ "3d55deb822b885174295c92b6280899acf610dac382d16b7eb4c1cb63239a55a8bd0d4bfdc77dfe9555390b6232c6f376b6dd900b34c3bd7a55dae4e85d8e1cc", "c0dfb740a86eaabb9f9707492923b6517cc48a2967c0980197159ecc0561586e79d92ab01d452938cb42f9ec15ce13e33218803af5c0170bc705cb8685df2b38" ], - "optionalKeys": [ - "+23514e85817fe1791c4e536cf44d0a4e25f8fed1276b5980276fd958ce358814" - ], + "optionalKeys": ["+23514e85817fe1791c4e536cf44d0a4e25f8fed1276b5980276fd958ce358814"], "numberOfSignatures": 3 }, "signatures": [ @@ -46582,9 +45690,7 @@ "senderPublicKey": "bc04422a44f7e0d23e648edbcb85b0c34cf6abcb847bdbe191d3fa5f7996a743", "nonce": "607", "params": { - "mandatoryKeys": [ - "+58dfb3a9b24f1bfff55d9ced6ac5df2c22609cfa18f28a2f8524b76ef8e95d12" - ], + "mandatoryKeys": ["+58dfb3a9b24f1bfff55d9ced6ac5df2c22609cfa18f28a2f8524b76ef8e95d12"], "optionalKeys": [ "+98ec75318c0668af412b663db55a570fb5c37fdeb54f831f04d43ddee833e242", "d8f70fccd733c3471977a5b5405a6aeedf445e75659711a582245bb34d8cbdd4ce79260a40416796a925de094363a759f10fdca62e440a0c223dc10b3a394aa5" @@ -46605,9 +45711,7 @@ "senderPublicKey": "752e9d9ae5db049a0aff8693502140f00a0048101e032c1013c4c84699e1b7e4", "nonce": "844", "params": { - "mandatoryKeys": [ - "+14e788063496f75af5721a68fe4e23af2cfefef6d1e9b6595cd2fd6cf260ab4f" - ], + "mandatoryKeys": ["+14e788063496f75af5721a68fe4e23af2cfefef6d1e9b6595cd2fd6cf260ab4f"], "optionalKeys": [ "+e1269f4d5dc4e98be949c010e75331267372485c39c489f3283ab67bd8b1e0ce", "0f85034f1ee2481df01ce9e11fe089887439c294d8a28cdb97b80559a44aec5cfca064d8c0c215c534325739076ecd5452c01dbb3645cc5db706de217108e3c3" @@ -46850,9 +45954,7 @@ "235a779ebcd8ec911fb790eac0cebe7b1a96eac1effd84845aa65764609597975a4e5752df87c0c6b7641afe49968830a364e279645f170a81b478cccf2b7be9", "645d99b86fbe7aba3a04d5560597068be2d27c82d9f2a90b56eaa4d3e0ff8afd7485088342122d6c36cf46bfc23e3d2de0578bada2210af825277ddcc86620d0" ], - "optionalKeys": [ - "+8d448467523fc78fcc648fc27193e2caa83387580f9a36baa42f409e81276513" - ], + "optionalKeys": ["+8d448467523fc78fcc648fc27193e2caa83387580f9a36baa42f409e81276513"], "numberOfSignatures": 4 }, "signatures": [ @@ -46886,12 +45988,8 @@ "senderPublicKey": "0c62e344b5cd4987c441c3c5ab7cc0d576727a63bfa58887ba6e0f3d08aff83c", "nonce": "901", "params": { - "mandatoryKeys": [ - "+232ec66869473714eb96a7fcb3733bbb33e855ded395e332efe114f3dd11b83b" - ], - "optionalKeys": [ - "+528417d405a473452d95435c0c373e79e18d99e1af58a173f9d97b69a2276bff" - ], + "mandatoryKeys": ["+232ec66869473714eb96a7fcb3733bbb33e855ded395e332efe114f3dd11b83b"], + "optionalKeys": ["+528417d405a473452d95435c0c373e79e18d99e1af58a173f9d97b69a2276bff"], "numberOfSignatures": 1 }, "signatures": [ @@ -46912,9 +46010,7 @@ "+e982b317c988c90172f0820fdf9e39d63e259d34e91d2c1f1820b6a2ef911996", "0b89d6005e7580a5271e7a94ad05a9ce16287f024e2959d67e40ddee375e21f84cb4cfde2a03c6231b956060bcea26c23ab167bb8fc362598142ecfb16abf8e1" ], - "optionalKeys": [ - "+7a7f4be17cdee06485f3932eda194c4965a71d6949ceff5f1bc8fa073ad7a6f3" - ], + "optionalKeys": ["+7a7f4be17cdee06485f3932eda194c4965a71d6949ceff5f1bc8fa073ad7a6f3"], "numberOfSignatures": 2 }, "signatures": [ @@ -46975,9 +46071,7 @@ "798026ee67189278f7e78b4aba8c200ff0427489a443c18c0e966fce1cafaebe279ef25f4fca48d3de49ec475e764b58b75847c3d1a6f96c5fdfefb5eb5de7f1", "2f0a7d567ac8607c2829a08766cf9109d0cf3dab4ef23dca1f921be6f0fb9f58c37b0e8e7bd939aa02efb520c9d69b332dd929341ecc6b67e6297ce49b4fb6aa" ], - "optionalKeys": [ - "+f00631a1235be224d2543e22f1f057d3eba375109b03df7c1319ea5c39b88f82" - ], + "optionalKeys": ["+f00631a1235be224d2543e22f1f057d3eba375109b03df7c1319ea5c39b88f82"], "numberOfSignatures": 4 }, "signatures": [ @@ -47020,9 +46114,7 @@ "senderPublicKey": "61db6a4009f43282c75cf20785dd0a8b5f8631e7cdc78ae932600d7276261c92", "nonce": "206", "params": { - "mandatoryKeys": [ - "+fd14075881b9e5eff43426cc89a5c7c9f945f796ad704c6392c113fbef694901" - ], + "mandatoryKeys": ["+fd14075881b9e5eff43426cc89a5c7c9f945f796ad704c6392c113fbef694901"], "optionalKeys": [ "+be8e4a2190570a1e6f08b34ebbad9922f0b7f5a09bd37a1893969360d3a897e0", "9aac4416369dccd8257dfd52e37192b9225074a72fa64c2511a1c95eca5e2fbf8d9aad15486bcf81c879a91fb8f520ca3bf963dd476f5ebd21359fbfdf1d5cd3", @@ -47177,12 +46269,8 @@ "senderPublicKey": "b416bd494711d5ae23394e698d479d69729b6472810b3b451206c4eadb7cc960", "nonce": "892", "params": { - "mandatoryKeys": [ - "+4b1641b064ee30ee8a84d9dbf7efd37d4a0508e52a839d3f676b2196f172776d" - ], - "optionalKeys": [ - "+58f0c82f8c2168ab4938df04d5c394331dd269bde32f6426665f63e74692854b" - ], + "mandatoryKeys": ["+4b1641b064ee30ee8a84d9dbf7efd37d4a0508e52a839d3f676b2196f172776d"], + "optionalKeys": ["+58f0c82f8c2168ab4938df04d5c394331dd269bde32f6426665f63e74692854b"], "numberOfSignatures": 1 }, "signatures": [ @@ -47491,12 +46579,8 @@ "senderPublicKey": "09eb9341244a77e6a74377434340f84fd6512ccb277544a98f57bd3dfeff97a6", "nonce": "784", "params": { - "mandatoryKeys": [ - "+8f9935862d7d0623e201f908209023e0d431309722f9d1839560d0e9f26a2135" - ], - "optionalKeys": [ - "+4712abce14faf3bb132c434558e11220cb6222ba99e1a224959ef4a8b5bd123f" - ], + "mandatoryKeys": ["+8f9935862d7d0623e201f908209023e0d431309722f9d1839560d0e9f26a2135"], + "optionalKeys": ["+4712abce14faf3bb132c434558e11220cb6222ba99e1a224959ef4a8b5bd123f"], "numberOfSignatures": 0 }, "signatures": [ @@ -47603,12 +46687,8 @@ "senderPublicKey": "5f69ec8af0053da14473c03a9c333f3c095a1f0d0098ae80d45f211c99abe2c9", "nonce": "675", "params": { - "mandatoryKeys": [ - "+9c415bddfbb627a7a7f528ff81063d9a540d4237c8a627532ace136e86577c3f" - ], - "optionalKeys": [ - "+e63f9f717cb684e8bfcb63bad9f411b3fa0b045323c63e9dcc9510ea779bcbd5" - ], + "mandatoryKeys": ["+9c415bddfbb627a7a7f528ff81063d9a540d4237c8a627532ace136e86577c3f"], + "optionalKeys": ["+e63f9f717cb684e8bfcb63bad9f411b3fa0b045323c63e9dcc9510ea779bcbd5"], "numberOfSignatures": 1 }, "signatures": [ @@ -47646,9 +46726,7 @@ "senderPublicKey": "050506e7a9c2c9ee5901f90b8da90d8077dbead1cd01b66d475e6245ab404100", "nonce": "73", "params": { - "mandatoryKeys": [ - "+6193bd502a87ba7b13776dcc99775022803082990b769ab655a46d1d27559e8e" - ], + "mandatoryKeys": ["+6193bd502a87ba7b13776dcc99775022803082990b769ab655a46d1d27559e8e"], "optionalKeys": [ "+cc00f84c9d1badd4a23f9f05804f1e64559ed1f169108679dd771189f7c09045", "520d9e6cfdbb9a8b90d773a9a8ad9c6c2692414e909d0016d5b55beef5be6e407d385a995ad140c8147c08eed3f79205237c856399859a2c2b17c634715ea86f", @@ -47975,12 +47053,8 @@ "senderPublicKey": "d43f3c31261302c4594807b2e4071d82cd300499537cde69f544cfe7fe412405", "nonce": "553", "params": { - "mandatoryKeys": [ - "+b7760ca191281dc6f49f1b4ea7ef8d435292cfa240274abc84b4de2cfea16a30" - ], - "optionalKeys": [ - "+5f2191be10f1f34984a180fd33918ea51232ac1388a56990b555a9eaf39b62a7" - ], + "mandatoryKeys": ["+b7760ca191281dc6f49f1b4ea7ef8d435292cfa240274abc84b4de2cfea16a30"], + "optionalKeys": ["+5f2191be10f1f34984a180fd33918ea51232ac1388a56990b555a9eaf39b62a7"], "numberOfSignatures": 1 }, "signatures": [ @@ -48023,9 +47097,7 @@ "eda5c5797e7825548fcab65e8fa112ab4c7eb6cd2c19dba20d9ae0844c668a8a5555f9a935fdf9c4691ca7de35fc16a12c13d6f838c4b6afa431a693522393e7", "4c63639a1b1f4e122d84359e4729acc987a34f800760182a1bdc3974789e3882a7654261e423f30bda0062b32053cbc985a77fd76a0f70ae8b7b71e90d4d914a" ], - "optionalKeys": [ - "+3c0c1e3a70571135c8e3832e386cbc319356754b24c086431d3a1ee62fcf8f61" - ], + "optionalKeys": ["+3c0c1e3a70571135c8e3832e386cbc319356754b24c086431d3a1ee62fcf8f61"], "numberOfSignatures": 3 }, "signatures": [ @@ -48379,9 +47451,7 @@ "senderPublicKey": "f78b125765194ff214847edbde0fdb5e276bf59f9224f6cb7ed282e378b6897a", "nonce": "349", "params": { - "mandatoryKeys": [ - "+d68356fc9ac87a6ffceed4991c991acb6c34372ddb627b714fefd9d85d46ace0" - ], + "mandatoryKeys": ["+d68356fc9ac87a6ffceed4991c991acb6c34372ddb627b714fefd9d85d46ace0"], "optionalKeys": [ "+744a392970e7a2fa006daac4814b58cba0cafcdeac1ac8a4cd4ae1da56848ba8", "5d21d54b978cb8dae811c6ec58090722588a744c89e04b92aba4b3f2aa9880df2bc04bd021347f6f5c16c7d3f7a333c2991422aa6baf36eee16f81a6de1035fe", @@ -48627,9 +47697,7 @@ "senderPublicKey": "825ea1a0c5b967449f503adf1f8eace81ffac48e6c1eed6a6797e14d0d53bf83", "nonce": "608", "params": { - "mandatoryKeys": [ - "+4bd5449d9784d8ea42d529366d1fe521db6e693e4fc6604aa1df9cc029c3c82d" - ], + "mandatoryKeys": ["+4bd5449d9784d8ea42d529366d1fe521db6e693e4fc6604aa1df9cc029c3c82d"], "optionalKeys": [ "+b6a9e3133fbafe259c090f32cf3c18727cbd701c3df6b6c79b5639c4fb94cf2d", "daddaaa1e9a340279059db77990b13e44eed3ca451dfa12b561e072e8707c5583d755787799a9059d08209aa4ebd648dbcc713f22da4d7e802ffc861d596add6", @@ -48706,12 +47774,8 @@ "senderPublicKey": "6bf581d0bb497b4f0b543c8a882ad33d9f3a3cde68e00da9bc094a487982f155", "nonce": "70", "params": { - "mandatoryKeys": [ - "+2272c76d34921a8566aea3018346d9cb47589c3857572c2c6be3e229c9939b75" - ], - "optionalKeys": [ - "+4754143f2e2beddc6f97837378c2da2102423dad06b8fcf67783367b242f26b1" - ], + "mandatoryKeys": ["+2272c76d34921a8566aea3018346d9cb47589c3857572c2c6be3e229c9939b75"], + "optionalKeys": ["+4754143f2e2beddc6f97837378c2da2102423dad06b8fcf67783367b242f26b1"], "numberOfSignatures": 0 }, "signatures": [ @@ -48808,12 +47872,8 @@ "senderPublicKey": "d85596e53503fbc582d87dcc894182b485cf40e92c332fbc24a47681b070f8e1", "nonce": "535", "params": { - "mandatoryKeys": [ - "+6050a34add3dc673e237801ebdc6f1423d72f23fec7bbab35baaf85db42f6aaf" - ], - "optionalKeys": [ - "+28915163c9440d98297724ab00627125bda84c126c076839bb234dad41a8d126" - ], + "mandatoryKeys": ["+6050a34add3dc673e237801ebdc6f1423d72f23fec7bbab35baaf85db42f6aaf"], + "optionalKeys": ["+28915163c9440d98297724ab00627125bda84c126c076839bb234dad41a8d126"], "numberOfSignatures": 1 }, "signatures": [ @@ -48830,9 +47890,7 @@ "senderPublicKey": "073951ff3d35eb1ffd3aa43c40b8e2357c648884b1d091352e17ca8b4392bdff", "nonce": "485", "params": { - "mandatoryKeys": [ - "+43c0d19821e36dbc825e1a9e427a5ec83889d52ed31b4715e383233c479b160e" - ], + "mandatoryKeys": ["+43c0d19821e36dbc825e1a9e427a5ec83889d52ed31b4715e383233c479b160e"], "optionalKeys": [ "+fb74832fd9b315d45e5cbc73b2d93f9601b5aab30288ecc370de277c4da9bffb", "3f47949e52cdb7ad8fc14170878618bb82638015abf8776f41ff50791915f0aa2752384d73675df5af361c83addd07de5fecc7f2b1135c82f24bc62489014a8a" @@ -48910,12 +47968,8 @@ "senderPublicKey": "ca17d4d72b6d253b85df4568da6cf31e2c6d7cfa43b20a88b21851d3b71c423d", "nonce": "605", "params": { - "mandatoryKeys": [ - "+5fce27ec636013b319d46d7d87955517261ed3f81d4caa9658b7a12e6a7e2c14" - ], - "optionalKeys": [ - "+5157de2773fddcd6aa558e748438b01c62f5a9960408ea5342da12f2203b46aa" - ], + "mandatoryKeys": ["+5fce27ec636013b319d46d7d87955517261ed3f81d4caa9658b7a12e6a7e2c14"], + "optionalKeys": ["+5157de2773fddcd6aa558e748438b01c62f5a9960408ea5342da12f2203b46aa"], "numberOfSignatures": 0 }, "signatures": [ @@ -49113,12 +48167,8 @@ "senderPublicKey": "10c7e3f74120069a66b0a5c8107d920e963bab3d00730a238ccf9541f7c9316e", "nonce": "797", "params": { - "mandatoryKeys": [ - "+b1a4d09f7479b3ea04374d4e012a09b69b5bf746df3a815d64f2b3bd59660394" - ], - "optionalKeys": [ - "+c4031a82d88acc43c9b3679a702dc40a451277e0dbcdb2a8a73854aadfb1948f" - ], + "mandatoryKeys": ["+b1a4d09f7479b3ea04374d4e012a09b69b5bf746df3a815d64f2b3bd59660394"], + "optionalKeys": ["+c4031a82d88acc43c9b3679a702dc40a451277e0dbcdb2a8a73854aadfb1948f"], "numberOfSignatures": 0 }, "signatures": [ @@ -49287,9 +48337,7 @@ "+18040354c01997779a462fa19deccf9014b3488c8645672b1cafee4d6cb2b1e8", "bcd2f5a057507a084ac07bb42cd4c84536107949f7ca14c6b32a77e94e7e4c9df3e222d9f987e8ce8108ed2d76ea1fc54ae667bc80c63ce0a5d88b07a296fe5f" ], - "optionalKeys": [ - "+9d98fea73662aa1970919ddfa05ae984185eea05ca0253074980be44eac644cd" - ], + "optionalKeys": ["+9d98fea73662aa1970919ddfa05ae984185eea05ca0253074980be44eac644cd"], "numberOfSignatures": 2 }, "signatures": [ @@ -49476,9 +48524,7 @@ "senderPublicKey": "ca72507b67765b012d54c6f556ccff1384ec4f1c6bf6ec684452f258e4a5f92a", "nonce": "979", "params": { - "mandatoryKeys": [ - "+f1c7a32a3ec5f40999d9ddb0814f3bc0fccbc481a7214b0c51380466945ad6ac" - ], + "mandatoryKeys": ["+f1c7a32a3ec5f40999d9ddb0814f3bc0fccbc481a7214b0c51380466945ad6ac"], "optionalKeys": [ "+080328b95630eb6f38df1e370673d8dd8093f8b551104eac81072e5140f9b09a", "7860115a6903202b3db5ee6154d486ab99557bfb6e28409c45ceda2898eb87456fffa4d20b96879482d5db65a4e502a4f8cda581f3ddde4d5aafff17e56e758f", @@ -49568,9 +48614,7 @@ "3000697c376e5dffe72d618e96cb6175cbcfac1e0e79a3a5ffc38d2a1172565b1994979b496bd362c0db272d74202cd8ecc7488fdc27d049810513b7b204270a", "a6e1122c3e624a89a85c498ac840110567f2d1bb7519b2f00f97ab7ca2982bd5ad03f1f8b1ecd740b48d924ec19f56c814d4864040b75069af3d41797785297a" ], - "optionalKeys": [ - "+4dae91abaa8bd42ec3200d254f151d3b474dcbfef91c6b193a6bde8d435730da" - ], + "optionalKeys": ["+4dae91abaa8bd42ec3200d254f151d3b474dcbfef91c6b193a6bde8d435730da"], "numberOfSignatures": 4 }, "signatures": [ @@ -49587,9 +48631,7 @@ "senderPublicKey": "63bad809a5a88b5e183b3700b0ab9e252e94b6dbd919e4a736945237e2e5db98", "nonce": "474", "params": { - "mandatoryKeys": [ - "+537803935155456e49ac1a16b5b9c8a5c073be439ad1b490212fdcf9f9c472ed" - ], + "mandatoryKeys": ["+537803935155456e49ac1a16b5b9c8a5c073be439ad1b490212fdcf9f9c472ed"], "optionalKeys": [ "+79e16b7f64cd604ffb80deaabd41526347c979cf989ae917ea6fe3143cc9028b", "a284e228892ba11c2da25f4262a7d14e14f1ae1e5091ee322935438811fe6ea971fd89cac25564eb56d8f037bd1640b2c2693db057a1779918510b1b6267ea61", @@ -49785,12 +48827,8 @@ "senderPublicKey": "79227691504a05d1add08870ae35a0defcec59537f2346d4d20983fd415c82b7", "nonce": "774", "params": { - "mandatoryKeys": [ - "+e3592116db880a2c5a97e70918b92066f57980cda31fb7296e8791be54e64c2b" - ], - "optionalKeys": [ - "+783fd413894b7cec63033b00cc43b7fad999fa5c4a15ac3b2e373b52e85f906b" - ], + "mandatoryKeys": ["+e3592116db880a2c5a97e70918b92066f57980cda31fb7296e8791be54e64c2b"], + "optionalKeys": ["+783fd413894b7cec63033b00cc43b7fad999fa5c4a15ac3b2e373b52e85f906b"], "numberOfSignatures": 0 }, "signatures": [ @@ -49906,12 +48944,8 @@ "senderPublicKey": "fd8699cb907e79894b6935205cbe74b3004d4eebb32d163c9b0c72dfee0764ff", "nonce": "739", "params": { - "mandatoryKeys": [ - "+40933dcd24b89273a2836f1f91a825e94fff95effc014486b91714e41d1bc059" - ], - "optionalKeys": [ - "+8e4a915017bf45ac35497c21b9b8d9419d20928226bd8b40a4c6f5adfbaefe44" - ], + "mandatoryKeys": ["+40933dcd24b89273a2836f1f91a825e94fff95effc014486b91714e41d1bc059"], + "optionalKeys": ["+8e4a915017bf45ac35497c21b9b8d9419d20928226bd8b40a4c6f5adfbaefe44"], "numberOfSignatures": 1 }, "signatures": [ @@ -49983,12 +49017,8 @@ "senderPublicKey": "4745ab8ad41a65d88f9e8115dcba8abea1e8372dd9731e76e3bfae5983ad28ee", "nonce": "640", "params": { - "mandatoryKeys": [ - "+7c76b77e2b1a0b656276d9a5fa453be7e097d3bed889629b0d3160c361317da1" - ], - "optionalKeys": [ - "+3765ccfaa6b79f78f539e945428e3a67bb4c23c2db4547393d98e7033e1f6ddf" - ], + "mandatoryKeys": ["+7c76b77e2b1a0b656276d9a5fa453be7e097d3bed889629b0d3160c361317da1"], + "optionalKeys": ["+3765ccfaa6b79f78f539e945428e3a67bb4c23c2db4547393d98e7033e1f6ddf"], "numberOfSignatures": 1 }, "signatures": [ @@ -50104,9 +49134,7 @@ "senderPublicKey": "aad9286e90d4aa3cc779de17ec60d10065a93fa6d35438fabfbfdab4d58e7f1e", "nonce": "72", "params": { - "mandatoryKeys": [ - "+297ff78d4f81e5a2eb2d11b3666aacf57fff6d17aa61bdc210dd45814781f2d3" - ], + "mandatoryKeys": ["+297ff78d4f81e5a2eb2d11b3666aacf57fff6d17aa61bdc210dd45814781f2d3"], "optionalKeys": [ "+d9a926d057a3149d84c847d8fd2dacb42f331734c6f15f7b9bd5576dec5ccd23", "fdc80782f7693d30feffaff9c0e2ab052855f20516ab807b979339cd945dee04984195bfa95e337975fbae538e631b5f2485ce005b7eea68590a13317f16c073" @@ -50196,12 +49224,8 @@ "senderPublicKey": "f6d95c851188e34e0389a88f483862f1fb3e05045698ca0d176c795d60a88000", "nonce": "328", "params": { - "mandatoryKeys": [ - "+5218a63b20c7a422c85dbea1a0538bf3dc81feea39dc152eddbf67d484b290e7" - ], - "optionalKeys": [ - "+ee5427ce441a6ad606d4bc66b01688dd32372b6b8faea41e96ef63c11c839497" - ], + "mandatoryKeys": ["+5218a63b20c7a422c85dbea1a0538bf3dc81feea39dc152eddbf67d484b290e7"], + "optionalKeys": ["+ee5427ce441a6ad606d4bc66b01688dd32372b6b8faea41e96ef63c11c839497"], "numberOfSignatures": 1 }, "signatures": [ @@ -50488,9 +49512,7 @@ "senderPublicKey": "543a69ac85d26c4c53734df24b8bf67b5e507a5923426939d70bfde97283dabf", "nonce": "371", "params": { - "mandatoryKeys": [ - "+6b071b622ddb08693b08609ab331bd4c78098d95571fef6c8d250fee5884007c" - ], + "mandatoryKeys": ["+6b071b622ddb08693b08609ab331bd4c78098d95571fef6c8d250fee5884007c"], "optionalKeys": [ "+6cd7e682c3327dd52047bed61ed34c98ce72f91a78ac7b80df9370c37b2cee39", "8ee3b6818654c240b7fbdc1fa7e93c4546867adec1fb043cbcf223e212676dd4ed5632f8af3ac6ea235686bb54a85692e12192b67dea3c950e5712207aee62ad", @@ -50727,9 +49749,7 @@ "senderPublicKey": "3258936c660be383b740a34072c39fe628489267bf37e43ce0b27f6a21b0fa6f", "nonce": "648", "params": { - "mandatoryKeys": [ - "+e2e76caf5510f97605edd550c10e0f87990b287cd860f7a4828207850786f102" - ], + "mandatoryKeys": ["+e2e76caf5510f97605edd550c10e0f87990b287cd860f7a4828207850786f102"], "optionalKeys": [ "+8468714584019efa031f20cf5a10d9782c551cbbe463bb49620fa09fc01aa17c", "e92957cac74ded7391bfd273fbca622555d01d913efd614195cf0ecd7bf8fb354295c7a739cfa2372e6bf98d15aa8b4f86661f66cdb675e2a303fccba3da463f", @@ -51028,12 +50048,8 @@ "senderPublicKey": "39fac2e6131ed34b12851325175611c46709a205abeec22afc8d9083ebd85934", "nonce": "391", "params": { - "mandatoryKeys": [ - "+83c6228ed983c3f71eb9ffdc72e995ccbb7476627ba89e62690640cf37d84e23" - ], - "optionalKeys": [ - "+87206d34666830a03974834b9e0dc42e5c69ede390c100211a7ecbaf55771b51" - ], + "mandatoryKeys": ["+83c6228ed983c3f71eb9ffdc72e995ccbb7476627ba89e62690640cf37d84e23"], + "optionalKeys": ["+87206d34666830a03974834b9e0dc42e5c69ede390c100211a7ecbaf55771b51"], "numberOfSignatures": 1 }, "signatures": [ @@ -51050,9 +50066,7 @@ "senderPublicKey": "bdaa5575b2e30bece67a9385c84ba241a5fcf9bb9a0bc1d55f3c41cf9eb473ed", "nonce": "999", "params": { - "mandatoryKeys": [ - "+524bc5119b808bbbc3121b79ffe0fa203339a44bc952116ca716e4ccfd1f6a47" - ], + "mandatoryKeys": ["+524bc5119b808bbbc3121b79ffe0fa203339a44bc952116ca716e4ccfd1f6a47"], "optionalKeys": [ "+f8b8013bc08c89140ca793e585a63e66ce2d96239a00e18bf978f8ed70fb6b67", "dda46049ccdd22df71b59e135b5fa63a56be6a305178de5a61ee1f527c11b5428b27cc7e274617c8e595162b370b08cf779d0fe589eeb96c1e19d4c7530d6338" @@ -51241,9 +50255,7 @@ "4967ab783bce960eec7c89d25a27302596f7073195fee92a79872f3f6273cff6deb11bc3ed67ceb404e046f70393f8fc337e76ddc1db40202348d9739395b434", "4ce189959046f4a82bc37575ce0b11b88eb51bbfa57157197653bc3749d0758e6a21efa82d61bee97f65f5ff04d1d4f9061bcc892f687b3bd7e382de48f82f63" ], - "optionalKeys": [ - "+4f3319800050391e814d2b804fe451bb20601075e27745d057c932c1a518b568" - ], + "optionalKeys": ["+4f3319800050391e814d2b804fe451bb20601075e27745d057c932c1a518b568"], "numberOfSignatures": 3 }, "signatures": [ @@ -51302,9 +50314,7 @@ "senderPublicKey": "ce372620abd771289cd7831926df431204747f6afdac7c924fb9a9292a498cf4", "nonce": "963", "params": { - "mandatoryKeys": [ - "+5db447adf5e04c572a3f2b6bca2421b889d1641ea1bbba35ed2f116f28f23212" - ], + "mandatoryKeys": ["+5db447adf5e04c572a3f2b6bca2421b889d1641ea1bbba35ed2f116f28f23212"], "optionalKeys": [ "+89a2b07c294a48961fde62f7111dd07c7724178ecd019124bca5cd7c11a5fec6", "a82ea0f9a26aa8e12f996b1d299a6c87499af88e7227ed4061186f2282617e0faba261f3053ed4ca44d61320a639dbe57f870f120b69dbc088c69d217092c21f" @@ -51468,12 +50478,8 @@ "senderPublicKey": "bf7f616748006104750102986b9ee7515d60d778e33dffc6853576a82ea4d329", "nonce": "235", "params": { - "mandatoryKeys": [ - "+f4219476d2a5c613a1efa56343c3dc1a892c42bfb1d2ed26b5b190646891cfe1" - ], - "optionalKeys": [ - "+5637d0a5babce6f61f349f2534caf0d7a7ce3816b397e15894c4cb5d138c33e9" - ], + "mandatoryKeys": ["+f4219476d2a5c613a1efa56343c3dc1a892c42bfb1d2ed26b5b190646891cfe1"], + "optionalKeys": ["+5637d0a5babce6f61f349f2534caf0d7a7ce3816b397e15894c4cb5d138c33e9"], "numberOfSignatures": 0 }, "signatures": [ @@ -51524,9 +50530,7 @@ "senderPublicKey": "0c68e61ef3739bec4ba2004d61d79ffc994cc7e821b14efaa40d28dda215bb87", "nonce": "13", "params": { - "mandatoryKeys": [ - "+67c6a8fe9136d675bb9eeb006d92d57eec01b105316a757b34282aa7de251119" - ], + "mandatoryKeys": ["+67c6a8fe9136d675bb9eeb006d92d57eec01b105316a757b34282aa7de251119"], "optionalKeys": [ "+1daae67d5b89a15972fc85a212776b60b35cc037f1410177fbcf0b8b39411ca2", "d3f8f2498d4bcef6eb15c798787a18c104d3389a0e27cc1c0024abd2e1c63161871a0515784bf76001cbc818d59b48c32ea9c7eb96723eeed6d21a37b3ce82fa", @@ -51705,9 +50709,7 @@ "senderPublicKey": "2cbc96c8a43f9f1f170e20438ad7bad13d86b86dc0751169b0a982a01bc34db5", "nonce": "384", "params": { - "mandatoryKeys": [ - "+f5ca8cbf80879c2f57db3c260db3d9b79b24e1d451cb6ade1f35d2a019dda9f6" - ], + "mandatoryKeys": ["+f5ca8cbf80879c2f57db3c260db3d9b79b24e1d451cb6ade1f35d2a019dda9f6"], "optionalKeys": [ "+b3b3061959ebcf10e20224226b5ac321479438346d52d485ec09437a0e826682", "4e18f659844ccc9665f86047ad958139c61b68a9a9080162b1c620efa0f295dea9a4745402ecca2e4c27323d6f50c2ba6905b10fbd1802f13d574bc01d58bcb7", @@ -51901,9 +50903,7 @@ "+187c4ab92504fdb4436ac99c6f0937a96345b4dc92ff09bb878a2f53bca60843", "43298328e4609ee66c31292c2b3b55352c3c026e01ca92e4f71943c47afc035161aed83baa1e5203e11de0add720c604a5bb094101e42908754ef51714328a74" ], - "optionalKeys": [ - "+edd22b8e5602c6fba79c8bfa54e5acec5bff4958e36ca4d518f1a6587b59687b" - ], + "optionalKeys": ["+edd22b8e5602c6fba79c8bfa54e5acec5bff4958e36ca4d518f1a6587b59687b"], "numberOfSignatures": 2 }, "signatures": [ @@ -52176,9 +51176,7 @@ "senderPublicKey": "8c1686180e287409bd4c9b91d29b68b72a2705b137ba562983caa76a60fad0ff", "nonce": "558", "params": { - "mandatoryKeys": [ - "+a9bca3673d57426597941548eca3d4a10d1540db96ffebae3aea3d23b3c3dc2e" - ], + "mandatoryKeys": ["+a9bca3673d57426597941548eca3d4a10d1540db96ffebae3aea3d23b3c3dc2e"], "optionalKeys": [ "+f47f870beb634e52d8e140989b293e620cf185c93916e0fcb511d09a3415b288", "136ae879167822bef80ea44a7ca84d9f63255ca698a86f8605450ff27a1adfc49bacc4fe2d9f1d26796140a99f703006a0da0746e336b9b2424d7cff5fdfa3c3", @@ -52322,9 +51320,7 @@ "33ac3aaa5fd44dc0357b94869ab49a064ce106686817b3754d7ad4716a8686a250650e272cead7462a62f0260b727d3d2e803fc1c6df3a1d34389fb912bbb563", "f3466549eaf1d88dac8226116ce9df55f45ed4f52cae50d43ec9407bc7de3bd015f1aa9e73206c35c1ca1e7680273eeaa16b1fbff6ce6d1b5c922d2cd46aeae6" ], - "optionalKeys": [ - "+96d156944bf16e7eb164662319cdba866da045909edf43793353e692a3fb5718" - ], + "optionalKeys": ["+96d156944bf16e7eb164662319cdba866da045909edf43793353e692a3fb5718"], "numberOfSignatures": 3 }, "signatures": [ @@ -52436,12 +51432,8 @@ "senderPublicKey": "6736518583c2c9cd7a41131711329c5b5bc95ffcf1438e463e0d992710055332", "nonce": "448", "params": { - "mandatoryKeys": [ - "+e306cd5187adc59a75421621820e3b053d5f127f39e34a9c45a0b2f52efedb8e" - ], - "optionalKeys": [ - "+889d393d3e2e6f5ec532c4d14cc163f27affd31f9ff265fec1842c42abf28161" - ], + "mandatoryKeys": ["+e306cd5187adc59a75421621820e3b053d5f127f39e34a9c45a0b2f52efedb8e"], + "optionalKeys": ["+889d393d3e2e6f5ec532c4d14cc163f27affd31f9ff265fec1842c42abf28161"], "numberOfSignatures": 0 }, "signatures": [ @@ -52701,12 +51693,8 @@ "senderPublicKey": "b7dac2829cf0be4f0d07df0547a2e4e92462a8269388db01b0489a050529e39b", "nonce": "777", "params": { - "mandatoryKeys": [ - "+c36147c0fcea84f5c621fe53dc3de7eb77219308c0c7a3d3207c1043280c1de6" - ], - "optionalKeys": [ - "+dcf91970b7b8a1cd393581ae179040471d40479f55f48eff19b5f049632215bd" - ], + "mandatoryKeys": ["+c36147c0fcea84f5c621fe53dc3de7eb77219308c0c7a3d3207c1043280c1de6"], + "optionalKeys": ["+dcf91970b7b8a1cd393581ae179040471d40479f55f48eff19b5f049632215bd"], "numberOfSignatures": 1 }, "signatures": [ @@ -52750,9 +51738,7 @@ "f0f7e311ce2c9b86f022804fb9fcf7e35ce5a21135227b5ac3a49f0b8c161561936c67acbfb68bb9d847d946487a48f45b67d0984ea662fb29b1c9bfc5010461", "9c8078673cf427b7c8352feb41729ffa2823b7545dee812cdbf75d1652ff1ac823d272bfc8d0da76216d5fede19a8b0b666c125da035bff2cafb063ab30951ee" ], - "optionalKeys": [ - "+a622b47dea1689bcfb7851c3a83e83b44db138f77e8f43d810b383ab472302eb" - ], + "optionalKeys": ["+a622b47dea1689bcfb7851c3a83e83b44db138f77e8f43d810b383ab472302eb"], "numberOfSignatures": 4 }, "signatures": [ @@ -52889,9 +51875,7 @@ "6f2f8ebc9f8c1a6df42883ae34273801354ed04816ea02a8543885080f0b557315197218de512470fb41292163a3533fd43dae42377d2306e6ca51ff70daed0f", "0d283e757a67b7a9685c62677a0132300878b9c7503666bb8dc21f6ba1fe04fbba760a8b3acf6865340a3235123bc765df14965fd4dc2542eb4cffcaa2813c0f" ], - "optionalKeys": [ - "+a02309160fed911d097f7179eb0c003d243f5228c2a1d9f53a25c0108aa33697" - ], + "optionalKeys": ["+a02309160fed911d097f7179eb0c003d243f5228c2a1d9f53a25c0108aa33697"], "numberOfSignatures": 4 }, "signatures": [ @@ -52974,9 +51958,7 @@ "senderPublicKey": "2c4d37704992627a62326e0a58cd60fba74bdfad8d98cf2cf8684433c4a2b2cb", "nonce": "668", "params": { - "mandatoryKeys": [ - "+cdcb4f540c6e494dc5627f7fecea3860e387b9c96ebeb062f7b597cd621247d5" - ], + "mandatoryKeys": ["+cdcb4f540c6e494dc5627f7fecea3860e387b9c96ebeb062f7b597cd621247d5"], "optionalKeys": [ "+d76ad9447617e7452f0228a6d027d931428426e9bd5c32f2385363f30ccf6db0", "d662edd79369a1cd4b98871442104cb6622428b1fbde7d4e18e4985097c16c5823ebb6862d8c534d819ab27e4a2fdb8b25e0ed4f35191f1e47361c6b4e0dccbe", @@ -53219,12 +52201,8 @@ "senderPublicKey": "348f8361f967ee9f8900ab2893833c1556c5ec9baf7348d25b4c24bc6ab07da3", "nonce": "710", "params": { - "mandatoryKeys": [ - "+bf581dd88ff5750a9fe90a42fd7edd68d1b02b766265d3173255931b93624f2f" - ], - "optionalKeys": [ - "+355dec15e05cc164a2437e12a2ba1da306dc73e146160726601d5d05ba98103f" - ], + "mandatoryKeys": ["+bf581dd88ff5750a9fe90a42fd7edd68d1b02b766265d3173255931b93624f2f"], + "optionalKeys": ["+355dec15e05cc164a2437e12a2ba1da306dc73e146160726601d5d05ba98103f"], "numberOfSignatures": 1 }, "signatures": [ @@ -53241,9 +52219,7 @@ "senderPublicKey": "7137833b28d4d4062a5eb00ec5ac6e01ad046bd3a3b35f3e21bf228bb428afc3", "nonce": "18", "params": { - "mandatoryKeys": [ - "+bbf3754dc92737d0e7a0ce3c813a1aed911aedcffc5b84012e17efad8b9a9bc1" - ], + "mandatoryKeys": ["+bbf3754dc92737d0e7a0ce3c813a1aed911aedcffc5b84012e17efad8b9a9bc1"], "optionalKeys": [ "+5dff508629d5f08ab9de8c94ad238275cbdb6d52296a52f0cad5f1cbc8a8cd92", "ae1e8aeb8894b05e5476438bee907f0d4d2a5d8481bf03e5d2997c740f9785b44fbb35166ce6aa71c723983d08ef4efee38a9089e917380cc7a4fbc7b0aa07be", @@ -53284,9 +52260,7 @@ "senderPublicKey": "e6314de0327fafbfae775a289adf7bfcf3bb6d173a3d793fd895d01576432bbf", "nonce": "410", "params": { - "mandatoryKeys": [ - "+b5bbf94d9ac987523b8183484ae223f9a76f1285dcf4531b984984d63918fa8e" - ], + "mandatoryKeys": ["+b5bbf94d9ac987523b8183484ae223f9a76f1285dcf4531b984984d63918fa8e"], "optionalKeys": [ "+30c66c105c0638a322a892f777e9967f9f5682226dc149b650f7764749cd5b64", "96688e613b4524e4541ffd17411f736de6a094959854b4fc8db1623e2616a5612e15b38505f8780d94b81185b98454e3580cf7ce8b7f35596c514cb1e68d7505", @@ -53760,9 +52734,7 @@ "+617b46841277331ec6ccd7641f4e3926386c5afa49f67f5686f8077896a17d13", "9d19524b5838a32cf87d056e587e86f044c18acc8a38aa91d6c5d4bee823373f1c187fab63f7f68dfa97e82eb1651a858e1728012fb2b3cbdb8b2c91687ddc03" ], - "optionalKeys": [ - "+d8619ef865e1e7b6a89ad22060c0ed2b7a1723a7fe0b8b69fbb8e3b53e7bce66" - ], + "optionalKeys": ["+d8619ef865e1e7b6a89ad22060c0ed2b7a1723a7fe0b8b69fbb8e3b53e7bce66"], "numberOfSignatures": 2 }, "signatures": [ @@ -53867,9 +52839,7 @@ "9a1a78013f75894ba2088ade729f0b599e8594f99c7d6961dd41606c545dbe0897d6fc896d1fba4fbcd043d2d2115cedeef4ae5df62e7980b95028ef9e66db87", "22fe5c7c0945f0113c527807d4a8b4163a27494ec6f9a7d0948cc70cd0c65d36e5169abbffb03b34b5c028065732424cd3b00937b17a660cd8d7c8874d52cd90" ], - "optionalKeys": [ - "+d4bd18c9a98f026a815e6c68e109801f0720fea708a5876da49002a90b443df7" - ], + "optionalKeys": ["+d4bd18c9a98f026a815e6c68e109801f0720fea708a5876da49002a90b443df7"], "numberOfSignatures": 3 }, "signatures": [ @@ -53892,9 +52862,7 @@ "5deb91923e7d07f0501a48094bbec9ec3a083f2f851f57f564fda8f39c8aced88903446e99fd0e6023c4ca90840cc49417324a8a2c648920217cfb73cbf79707", "6fd56259a719f8c1cf08d77643efb050304d02b5bf77414c1fddb52444dacd5a66c4cde8050316cc62acc10f741d9860704ad3bbe38d2f40f1aa95d6e9a8cbe1" ], - "optionalKeys": [ - "+e14ae70f3386d0417d2a477c87d47682fc3bc8200f5201fbf1c9975555cf5961" - ], + "optionalKeys": ["+e14ae70f3386d0417d2a477c87d47682fc3bc8200f5201fbf1c9975555cf5961"], "numberOfSignatures": 4 }, "signatures": [ @@ -53932,12 +52900,8 @@ "senderPublicKey": "244077de9d9dfc95cb2a41ba3c2cd394e6f3a161011beed2067e5c66f672cddb", "nonce": "365", "params": { - "mandatoryKeys": [ - "+c057c2d21590b3f2c499ed163f4b955f71ff5175a412ec3b0fcef83c17c73434" - ], - "optionalKeys": [ - "+71e6a47f551a760ca2d1890c1db2e0f14e64c1a6b83d2ee42822503d384a40c1" - ], + "mandatoryKeys": ["+c057c2d21590b3f2c499ed163f4b955f71ff5175a412ec3b0fcef83c17c73434"], + "optionalKeys": ["+71e6a47f551a760ca2d1890c1db2e0f14e64c1a6b83d2ee42822503d384a40c1"], "numberOfSignatures": 1 }, "signatures": [ @@ -54049,9 +53013,7 @@ "+3354c71dc3d76da3e7fb203fd9e766422e503b5b63566fe769a081ea3f3cb0c2", "8421e0ae6c6f01368f59a37e42bf2858584814b231d31ec66ddddd83a995125f0eebe7fa6778455b13e6ecf7138a27c1d3ae0e90edb641026ca0c3cf28e5cbfb" ], - "optionalKeys": [ - "+0a8237f7d046b32f1d41ae402e68ac23ab0e65468192af63702672a55da5deda" - ], + "optionalKeys": ["+0a8237f7d046b32f1d41ae402e68ac23ab0e65468192af63702672a55da5deda"], "numberOfSignatures": 2 }, "signatures": [ @@ -54089,9 +53051,7 @@ "senderPublicKey": "cb86774e26c4954e720c1413186b887a2ec898f293a579170625da26052586b7", "nonce": "62", "params": { - "mandatoryKeys": [ - "+8aa5a847d55c795d0b957d0436f2982aba97a9699974dc0baf8179e6ba11efc5" - ], + "mandatoryKeys": ["+8aa5a847d55c795d0b957d0436f2982aba97a9699974dc0baf8179e6ba11efc5"], "optionalKeys": [ "+d09f5aecef5148998f7b02cb357cd1e69a8ca4809b3dfa4a9ff2af49972d93ec", "79f0180583ad22c5dbd5c45e446ead49c75874647cea4a280231e22726c9eb5f2baf2e22f02ba5a3254621769bb722744fb50aef8208eec27fbfaf7ca276d4d2" @@ -54211,9 +53171,7 @@ "+ed3539316b9dcde0c20a9a0562856ba8d1adff8de5722c5f23ad2ece1d2cb39b", "51b2786720ff949b0eec0ec4365f04097e202c1a2634f93eb942d0bacf75e3a8d1216361592d0513bed5ef8669dea37d15c205b8ad2cf79290451fc6db9318de" ], - "optionalKeys": [ - "+a6aca32dc9919024d70ff47d1cf0ee40576402f3b215aff52e9c4d290a1e165b" - ], + "optionalKeys": ["+a6aca32dc9919024d70ff47d1cf0ee40576402f3b215aff52e9c4d290a1e165b"], "numberOfSignatures": 2 }, "signatures": [ @@ -54446,9 +53404,7 @@ "senderPublicKey": "50d0589e46ba93c7cc587757b4f9d5a385ec01032a0d3d25a759325f9995baac", "nonce": "731", "params": { - "mandatoryKeys": [ - "+c68af7ffceca51c2374a9c555434af46ee75582e6965477a06a7732af936a2ca" - ], + "mandatoryKeys": ["+c68af7ffceca51c2374a9c555434af46ee75582e6965477a06a7732af936a2ca"], "optionalKeys": [ "+8f74e8d0a62c6221b2613ebbf6da78df13a6b7ca0a5820ed16e6b755f753bfc1", "27a0834f1424ac91b1ae6993820dbf7807527c3fce0c0f6ef05ad2dcd9a06a118627c4828cc2fb1724cebe66086bcc796af5dbc592b8e2382b82513759a24381", @@ -54592,12 +53548,8 @@ "senderPublicKey": "b29e1ab9afa6c4e2988204d85dec735a45b21ca0f5a30d3a7e9c55a330f24b0f", "nonce": "125", "params": { - "mandatoryKeys": [ - "+c3cc619e1fa418f6e75d1097150932bffd9dca0df906028983ece7f750175d01" - ], - "optionalKeys": [ - "+081285aaf75efb1108f15f0255ba4e687b607bdb323e37af5758be759e28ca16" - ], + "mandatoryKeys": ["+c3cc619e1fa418f6e75d1097150932bffd9dca0df906028983ece7f750175d01"], + "optionalKeys": ["+081285aaf75efb1108f15f0255ba4e687b607bdb323e37af5758be759e28ca16"], "numberOfSignatures": 0 }, "signatures": [ @@ -54619,9 +53571,7 @@ "a1d5a847fd308cd2128c36f746b291df46df316318cfa329417d50329f0e61cbe66e5bd217c649e0e74c174c5e143107754d9981ad29b97b8838c0d28ffd8434", "5dd9974a59ccd9f2cc9153aab3205e5608d1ec7e8795742fb064619b8682d2db3971efa847aba169e7151e2321f20e30ac5f566a425c53f3df54a67b8f83a323" ], - "optionalKeys": [ - "+81250cd45471dcce86d3dd6111d6fe8b0a00a40572b84985b0f2d0c6a5862283" - ], + "optionalKeys": ["+81250cd45471dcce86d3dd6111d6fe8b0a00a40572b84985b0f2d0c6a5862283"], "numberOfSignatures": 3 }, "signatures": [ @@ -54720,12 +53670,8 @@ "senderPublicKey": "1099d01bfb47493df6a194811e89682654a7b00c028a6e84282cb43346a37793", "nonce": "355", "params": { - "mandatoryKeys": [ - "+6f8e39ac7457adff5c62b060323f883a625257a256f45394ee20a76315341e84" - ], - "optionalKeys": [ - "+1dbdf0a799c70fe59c110ce8d2245dc9115e1f42d8377b9afa1a7b0f957d7274" - ], + "mandatoryKeys": ["+6f8e39ac7457adff5c62b060323f883a625257a256f45394ee20a76315341e84"], + "optionalKeys": ["+1dbdf0a799c70fe59c110ce8d2245dc9115e1f42d8377b9afa1a7b0f957d7274"], "numberOfSignatures": 0 }, "signatures": [ @@ -54898,9 +53844,7 @@ "+e0e6b90c807609371e193414e2948b45bde16c89a90b5f7037d3a0a7e6992c76", "1dbd89647a76dd3a20beb9205957e7df1115631ce6daf8186adce21ae62f01a74f746eebe9cae5c2fa3800e5447c2345c1db6c3e054fde5eb93e0218889311a6" ], - "optionalKeys": [ - "+a834e5556e470674b52e01691497657bb10308d09938757ec346ebbb37401fc4" - ], + "optionalKeys": ["+a834e5556e470674b52e01691497657bb10308d09938757ec346ebbb37401fc4"], "numberOfSignatures": 2 }, "signatures": [ @@ -55002,9 +53946,7 @@ "senderPublicKey": "8d0322698261bf701516295242e558a9350897f7ee450ae50c45ba2f1f0837db", "nonce": "187", "params": { - "mandatoryKeys": [ - "+ae98885ec73a3c27ab96c66caddc41fb557c9538490f8e873908c6c79addaaf3" - ], + "mandatoryKeys": ["+ae98885ec73a3c27ab96c66caddc41fb557c9538490f8e873908c6c79addaaf3"], "optionalKeys": [ "+d91e2a86808639156b79ec820bfc1e4ea4256d23e50a945516a38f2b119ecc33", "f6a492917d5f4dff69696c85144674549ca65b55fb114978d93060ce350705af711ec827e4db0056ee8efbb5117e7fb5b821e57f40f99f395b79ae962fd0490b" @@ -55248,9 +54190,7 @@ "f8f003b67669da7f1a872b9d9b61eff99971245b03db53eadecfd877feb932580fcdc5d2c914d289f9379b68639b95564983c308b8295b6e278597ef204ba218", "bfb2a047d4da9d60f907062701a7e74024fa3a0d606466e9b3f358bad2fde7b8299a7c5dff28f4503d40df253533a89e02e6d07abf230abcc1ef19fe6c6ff595" ], - "optionalKeys": [ - "+bf6efb3f347f8363fb9d48c042c1566fd402029ac664bb5d746402dda953aaf9" - ], + "optionalKeys": ["+bf6efb3f347f8363fb9d48c042c1566fd402029ac664bb5d746402dda953aaf9"], "numberOfSignatures": 3 }, "signatures": [ @@ -55417,12 +54357,8 @@ "senderPublicKey": "4f847de9384869ddbf9ece564a1947eb41035bee9a0169ca1f23308b8f9c6080", "nonce": "378", "params": { - "mandatoryKeys": [ - "+adcdf388412197066846440456bfb3f0581519f915ab9c954df149a8e46de9de" - ], - "optionalKeys": [ - "+e2d67ad214ec7e78f79b144cdf1f358d30c6c051c2e43e6701498f05c4373fef" - ], + "mandatoryKeys": ["+adcdf388412197066846440456bfb3f0581519f915ab9c954df149a8e46de9de"], + "optionalKeys": ["+e2d67ad214ec7e78f79b144cdf1f358d30c6c051c2e43e6701498f05c4373fef"], "numberOfSignatures": 1 }, "signatures": [ @@ -55624,9 +54560,7 @@ "+47e145a1e117691cff3c1e4de3abcb04076c6feb1c6a70351a4a26ab9e98c229", "835b95eded3f307a0ababd9d4e546261ce319490118b06429f5fa055a10abb23f95cc22726a67e7d2b89f998d7e851ad3c4dbd5c9ee331bcfa0e9349743c1f1c" ], - "optionalKeys": [ - "+f6b7e500dcf5c3bec3f52c5feda81bf12bc7e4c3b207a21f23d8c2002a419e09" - ], + "optionalKeys": ["+f6b7e500dcf5c3bec3f52c5feda81bf12bc7e4c3b207a21f23d8c2002a419e09"], "numberOfSignatures": 2 }, "signatures": [ @@ -55757,12 +54691,8 @@ "senderPublicKey": "8eb4ba6c8db8fa7a0ba3f083f6d0e8d5c92c06abcb0ba30c5ead51de63af07b1", "nonce": "938", "params": { - "mandatoryKeys": [ - "+bf0237c3e734b3b626fb2202f6cb3b033e0c4dc2fd261e303a17cd8b470c1aec" - ], - "optionalKeys": [ - "+6c8e6547203c6281c04f63b3d2a499ea0bfc1488253fc7e38a583f102b58c56d" - ], + "mandatoryKeys": ["+bf0237c3e734b3b626fb2202f6cb3b033e0c4dc2fd261e303a17cd8b470c1aec"], + "optionalKeys": ["+6c8e6547203c6281c04f63b3d2a499ea0bfc1488253fc7e38a583f102b58c56d"], "numberOfSignatures": 1 }, "signatures": [ @@ -56105,9 +55035,7 @@ "senderPublicKey": "cc6c2fe55227234598efdae5e560ae745d3c459ba04ad62fc026744dfba7f151", "nonce": "881", "params": { - "mandatoryKeys": [ - "+6a926e600bdd0ecdb401fbffc7d3010b7661b73144ba54a6dfe10129f0bafa4a" - ], + "mandatoryKeys": ["+6a926e600bdd0ecdb401fbffc7d3010b7661b73144ba54a6dfe10129f0bafa4a"], "optionalKeys": [ "+81314f33ddd8532ce0b9813564301665a60b0a8831725384d60eb511099d30da", "673de6ca9c2da29089069f59fe4003bb2783f4574ec1be7e87e201cfdf7a07062868c912cf731d8f80f2e9ade27677adf7baa0b69bffbf4e4c0033b2effeaf7b" @@ -56227,12 +55155,8 @@ "senderPublicKey": "5c33996c2a44a0365dadcb7b4750aa8eb26af385401c1fd2a26551c1f53a85c1", "nonce": "485", "params": { - "mandatoryKeys": [ - "+d53814960c27c839c3eea3d934778ca600d06c88691b99329cbed9ad22f89a80" - ], - "optionalKeys": [ - "+d95ea646e93cbf306051c354cf9cb14f91b74ed7a5b165693c8eb29cd02f1b8c" - ], + "mandatoryKeys": ["+d53814960c27c839c3eea3d934778ca600d06c88691b99329cbed9ad22f89a80"], + "optionalKeys": ["+d95ea646e93cbf306051c354cf9cb14f91b74ed7a5b165693c8eb29cd02f1b8c"], "numberOfSignatures": 1 }, "signatures": [ @@ -56289,9 +55213,7 @@ "senderPublicKey": "b72823f07292fb0930a0fd35fa3af44b7f3ce9cffcbdf05ffbd9f5ea57a234ab", "nonce": "476", "params": { - "mandatoryKeys": [ - "+5ab0b275c3bbf77edd0f3f6808434b3a69b2bd6601693a63173d49949ddaf6f4" - ], + "mandatoryKeys": ["+5ab0b275c3bbf77edd0f3f6808434b3a69b2bd6601693a63173d49949ddaf6f4"], "optionalKeys": [ "+09826a7659dadcd4ebafa4b55ebfc91f6a0960f93258d4c9a5f2eff4f6fe359b", "acfebcfb9ab24ebffea3c3b3d9f9579a354fffe96e0c193b7e3dcc9b9342ae987f11dbb4b5ac48e3e9718273b8c2bf495407e935e303c2bce695d87daed0ae1c", @@ -56482,9 +55404,7 @@ "+bff07cf8701ec076a9496dbcfbb434cd0586e2b6d7f853f8aa42457dbd0286a1", "e6334427a2376ee6327772d9671d001c97cf25b2418d7cac143b0c6b8f767462ab09bb494aeaeb3b0ffdc772d79a586195c71f9cd664348b6a5c6dc51b1f6dc6" ], - "optionalKeys": [ - "+b9a2f2848e50be385fab0c9d056b4495dc22a7d18e7c301277d9b557d80ccca2" - ], + "optionalKeys": ["+b9a2f2848e50be385fab0c9d056b4495dc22a7d18e7c301277d9b557d80ccca2"], "numberOfSignatures": 2 }, "signatures": [ @@ -56518,9 +55438,7 @@ "senderPublicKey": "23debc75b6e01fc7c24096471096f9b58326f77662b963ad6741dda6d1a2e4a8", "nonce": "216", "params": { - "mandatoryKeys": [ - "+294d63353f17228ef344ca2fd8bb0603bfd6916c3a7f81081f861f93d6e2f902" - ], + "mandatoryKeys": ["+294d63353f17228ef344ca2fd8bb0603bfd6916c3a7f81081f861f93d6e2f902"], "optionalKeys": [ "+3982e2c1b3cc68c332eb4d63194315a0955b52d83d8b0553c6a79857d52ec942", "90abd6652ffbbab6eb08baf4c745716f8441e6b904b84a677d34a55fe7fc69c5595bf38dd376b4c9cab41558043c9c3bd939089e7fc57293dd5e26e06e0224e4" @@ -56585,9 +55503,7 @@ "senderPublicKey": "409754aa6732c691a531ad3fdd74ad508f515a73912b91e47f18917bca1daf9d", "nonce": "226", "params": { - "mandatoryKeys": [ - "+a8820b91b30944ce2020b6262e61bbd5d0b94ce44dc6120f7f699a253254f75a" - ], + "mandatoryKeys": ["+a8820b91b30944ce2020b6262e61bbd5d0b94ce44dc6120f7f699a253254f75a"], "optionalKeys": [ "+d027c689dab0a7763bb719fdc75ee8f24df707c1e11501abea922594e8632878", "4bf97e5f010698a87a963d632e629405c21ee2b355cdc8423026025062106dcc5a7e576bc737b505fa67f98cd7371ee5522d275407faf1c7ec21de9bdd42571f" @@ -56656,9 +55572,7 @@ "+efdfa053c34854111a975c298426e2375435734bf94067dc876dcf7f33b4257a", "65b48f68fd17a96073495554eb1e2d8873b4f73c0b6fbbe88c3cd43452d0df160766ec01a2f3eba733841da0328cc10b8b9bd3580c9334bc9a05429cb0b7a062" ], - "optionalKeys": [ - "+85d6c7637d6e2feb9775c8d0b0e7e2a7194b4200d6d97bb53c8d9089dcf10eec" - ], + "optionalKeys": ["+85d6c7637d6e2feb9775c8d0b0e7e2a7194b4200d6d97bb53c8d9089dcf10eec"], "numberOfSignatures": 2 }, "signatures": [ @@ -56676,4 +55590,4 @@ "previousBlockId": "4c71ceda2c6810d349158375a35e56c0a4d76ec96ec912429ff608ea897d378d" } ] -} \ No newline at end of file +} diff --git a/services/fee-estimator/tests/blockGenerator/lowTraffic.json b/services/fee-estimator/tests/blockGenerator/lowTraffic.json index 79c58d785..3fb535c82 100644 --- a/services/fee-estimator/tests/blockGenerator/lowTraffic.json +++ b/services/fee-estimator/tests/blockGenerator/lowTraffic.json @@ -59,9 +59,7 @@ "senderPublicKey": "32df51ba1b8457a6492b1e3bcca6ab447439a2743492431e02fa0595eb016f24", "nonce": "658", "params": { - "mandatoryKeys": [ - "+eee675138ab96d3eadf157a3be780464453434a8163c009b0d01d1d25c520fb5" - ], + "mandatoryKeys": ["+eee675138ab96d3eadf157a3be780464453434a8163c009b0d01d1d25c520fb5"], "optionalKeys": [ "+cd76c3513926cb8bdb68142858d0735d329b2f44341f95b25f6c2a406cf1a4b7", "735a8cbea048c8c979c0367420d477a1475b897178b474b1fd4701bcbcd7a8eff0c8c9e1c0cd2075244d76b82fafff57381592e1dcd95d0e6d243c5dd87765d2" @@ -120,9 +118,7 @@ "senderPublicKey": "fcb597ceade08073538598ca54062b00f2dd9b2620c8cbce29d550714a166f54", "nonce": "59", "params": { - "mandatoryKeys": [ - "+4d3234dbc9925d0e3aaa8e02f31101b3a20971e879210b26c5bf6fc479db6676" - ], + "mandatoryKeys": ["+4d3234dbc9925d0e3aaa8e02f31101b3a20971e879210b26c5bf6fc479db6676"], "optionalKeys": [ "+a4c789b42b597f24f9beb81d146bf6a16c4cf40c24eaba238dfe73e981635601", "bff67b7f6bc5bc0b7455ec69c69cbbe345353e3cdad6907165303481c7c60550c285194d47e00d79be15f746c491ba111df00c014e34fdd82b3318b8d891e146", @@ -145,12 +141,8 @@ "senderPublicKey": "5725c2cda63e12077bf8eb846434a76b64c913686c318bdd0d1ee6678f82e9b5", "nonce": "254", "params": { - "mandatoryKeys": [ - "+d676dccd58baba8752289baa3a98c895d728fc6731b0166a70c4dc7770132bae" - ], - "optionalKeys": [ - "+37cded128d02523ab3a04f2538c197589389f82cba8e1cc5375839c1b83cc101" - ], + "mandatoryKeys": ["+d676dccd58baba8752289baa3a98c895d728fc6731b0166a70c4dc7770132bae"], + "optionalKeys": ["+37cded128d02523ab3a04f2538c197589389f82cba8e1cc5375839c1b83cc101"], "numberOfSignatures": 1 }, "signatures": [ @@ -279,12 +271,8 @@ "senderPublicKey": "5338e6d16e6429560a6f186b156a3d6c55ac637f35ea338f9708ff43249d0c91", "nonce": "96", "params": { - "mandatoryKeys": [ - "+c15b2da28f40abd28c0536c0ddf29fc06a293bd035c313bb60f07c94dd4fa369" - ], - "optionalKeys": [ - "+895a963d2ab8701551bfcc12f84b7fce16c37dec359481aa9c2c50cb3cd5a626" - ], + "mandatoryKeys": ["+c15b2da28f40abd28c0536c0ddf29fc06a293bd035c313bb60f07c94dd4fa369"], + "optionalKeys": ["+895a963d2ab8701551bfcc12f84b7fce16c37dec359481aa9c2c50cb3cd5a626"], "numberOfSignatures": 1 }, "signatures": [ @@ -381,9 +369,7 @@ "f1b9872456eba65ba0dd16f60a3f18a52d4da57611f7fba51c09bb5969ecbed56b3eccc20c2acdc1245a0fd157cb5e45c7cd4a453d9554d6e3941aed8e393d40", "8ac65b04d57a7b8c50473d4c793dee2b7844a44c0e8dc07b42c0024011e7d21fee45bc17d9b09ad51d9c3528949cec0c1bb857fd71514a24721fa81029a3dd0f" ], - "optionalKeys": [ - "+037a0d415a7435bc43ee90dc3a3ff2f6dc1cde7fd997089a9b786ae17958a6f2" - ], + "optionalKeys": ["+037a0d415a7435bc43ee90dc3a3ff2f6dc1cde7fd997089a9b786ae17958a6f2"], "numberOfSignatures": 3 }, "signatures": [ @@ -419,12 +405,8 @@ "senderPublicKey": "953907cf52e41e4cb405e4df3f2ce7514e46cdf8a15c591c3687c0e7aae9f099", "nonce": "448", "params": { - "mandatoryKeys": [ - "+cd1c4908e7dceb4cca5f8cff105a0ab61a80acb2b97d67d2ab52f8da3f40993b" - ], - "optionalKeys": [ - "+03710dba20146db754e564462602fd12f67503e353701f5995d266576be0c16f" - ], + "mandatoryKeys": ["+cd1c4908e7dceb4cca5f8cff105a0ab61a80acb2b97d67d2ab52f8da3f40993b"], + "optionalKeys": ["+03710dba20146db754e564462602fd12f67503e353701f5995d266576be0c16f"], "numberOfSignatures": 1 }, "signatures": [ @@ -523,9 +505,7 @@ "senderPublicKey": "6bf4e7b6f1613439a82f1d2bd6b44634355083d7f76c1de8e21fb27475f302de", "nonce": "197", "params": { - "mandatoryKeys": [ - "+9658b0bcda316be1fe5b9f5517fde4ca4773bcd3b0612302fe9ced4a03468903" - ], + "mandatoryKeys": ["+9658b0bcda316be1fe5b9f5517fde4ca4773bcd3b0612302fe9ced4a03468903"], "optionalKeys": [ "+5fa5e94f651ea8e0c96d56aadb66cb71390facf0750371a63ab9ed35a4234f53", "28d36b1031f923b45696ecbb3a30c2685764ed6271242426f073d185796e8eb40c0d8c14487597fabbb9c36e8ebb85cbe1631824b184435bde556cd5103163d6" @@ -546,9 +526,7 @@ "senderPublicKey": "e3e76881a67070d854ff9ad2b6880e0c230e658ca57059e42b48af4d95f4a928", "nonce": "556", "params": { - "mandatoryKeys": [ - "+2bfcd383639bcba712f4469158f77d70f0d60166bbdf8788c6f2410acb8e5f59" - ], + "mandatoryKeys": ["+2bfcd383639bcba712f4469158f77d70f0d60166bbdf8788c6f2410acb8e5f59"], "optionalKeys": [ "+1dbe2527dcfc6384af42ff2b8b6cc7a0ed2cdd19f6a0391fcfc9292f17eeb8f2", "e2dc3f08d6b0d8758b0c71b3c9768ce9bbed4329251d11eda082bd7a6b34405bc543ccae54f4d1e5f469bd7cf2c21dbdc5c80bfd6cfed3767d40a70e25fcb710" @@ -970,12 +948,8 @@ "senderPublicKey": "851429b60d752c8c9733fd64526014f77b1a6f443087f4f13cd085ddfe5568f6", "nonce": "106", "params": { - "mandatoryKeys": [ - "+873ca370b63651dc60238cd7893d1495dfcd98b36a1de6bf781475e2e91e805f" - ], - "optionalKeys": [ - "+10a1010ecdf3eca0cd452918dbbe7b8d985df6c438539908688d09c91d2d7268" - ], + "mandatoryKeys": ["+873ca370b63651dc60238cd7893d1495dfcd98b36a1de6bf781475e2e91e805f"], + "optionalKeys": ["+10a1010ecdf3eca0cd452918dbbe7b8d985df6c438539908688d09c91d2d7268"], "numberOfSignatures": 0 }, "signatures": [ @@ -997,9 +971,7 @@ "ea1be9e210f2ae66764a456f65a8e3858bf6bf014a004feab60e7f9267c431281357190638ff63021aab162796ca5d95f2d7adf473f8e308e9bd63172fb1d047", "1e30576ec2f7669e68160fa5b61ba30f456bd68e268d327b5fd0e8fd16493a9a18715fcb049eb93c099f5a321df3a34a1de98fd3ae7e227e82a198265b3b5c1f" ], - "optionalKeys": [ - "+01e43ddfbe3214230266839330648002932ef224000dff6eaedb7410b5f11475" - ], + "optionalKeys": ["+01e43ddfbe3214230266839330648002932ef224000dff6eaedb7410b5f11475"], "numberOfSignatures": 3 }, "signatures": [ @@ -1183,9 +1155,7 @@ "333f6a1bc1cee075bc13b265bd7b39c60bf687042c6115a965915d712ea4e2c6056dc7ee182f174be33ffa9e5e5906defbb4437c2d80aedfc48ee0553ae44c2f", "b8d6129031c207c6d8190765140623476268e0b8dd22676707cadabaf2eb34c6f2d9062222185e325722df23e01bb8ee8011974e94d5e21bce4acb44a7f7e0e8" ], - "optionalKeys": [ - "+d02f884b5195249731cf04e10165518d919c3b68ff209c2c656e7f4ea5f4e0eb" - ], + "optionalKeys": ["+d02f884b5195249731cf04e10165518d919c3b68ff209c2c656e7f4ea5f4e0eb"], "numberOfSignatures": 4 }, "signatures": [ @@ -1202,12 +1172,8 @@ "senderPublicKey": "ef1f6a3ddc8d23e5744389b21728b21e465af08a1b052670d4c5143edf75026b", "nonce": "316", "params": { - "mandatoryKeys": [ - "+a234929f940354f0fa90a6d2a7e0bf71ad59ff0aaf5af79361b450de6184c7df" - ], - "optionalKeys": [ - "+d8647fa27b12363aba134a5fe90bc582f0047ca037e6a7ab6dce33408523be2a" - ], + "mandatoryKeys": ["+a234929f940354f0fa90a6d2a7e0bf71ad59ff0aaf5af79361b450de6184c7df"], + "optionalKeys": ["+d8647fa27b12363aba134a5fe90bc582f0047ca037e6a7ab6dce33408523be2a"], "numberOfSignatures": 1 }, "signatures": [ @@ -1322,9 +1288,7 @@ "24ff4febc98dee2cd43385f302c19ca0aaaa5f95f37e3ce329cb5943239bcca493e4635914605a2054bee3ceb2ddd749adb8bbec626ad6892000a6001f508f6a", "53fc9efa5abff0bcd9f7be2352a9767c29137778ef7bd23a2fab1a2ab57623fe1664414a67f9337386f6700f0d943633e3d8d9d2741372720609daf545a0ccf5" ], - "optionalKeys": [ - "+2997567ec87e5c8710130efb9aa1f7c346a8b91c2f471df5d0582f5c73f2f219" - ], + "optionalKeys": ["+2997567ec87e5c8710130efb9aa1f7c346a8b91c2f471df5d0582f5c73f2f219"], "numberOfSignatures": 3 }, "signatures": [ @@ -1444,9 +1408,7 @@ "2256a7f536709f6b199cb998aba67f3993bbed6fb0494f3aa0567366f980ffe97313b3eb3635bdb7f9d58c301b7c105f015a8a23dc4e42deb47d94fad9d32245", "460612d5c36dec7df9640d365624d8cc46c373a34d90612ba6e8acb662930c2b61b1cf234528fcba90fcb42a8af9ab699efca05cc858232fc0ce875bbc45de56" ], - "optionalKeys": [ - "+ee6125bfcfee1d1ec438146729a9282afc6f6bed833465c5a63420e3ed78c6b4" - ], + "optionalKeys": ["+ee6125bfcfee1d1ec438146729a9282afc6f6bed833465c5a63420e3ed78c6b4"], "numberOfSignatures": 4 }, "signatures": [ @@ -1662,9 +1624,7 @@ "1949fbfacf10dd63c1efef6faa555fda1dd1f98ff070841a2b70a60d8bffee2d7699ab9724fdf76c134b640e9f674cb197860c9af3635a6ed62803b3931bf344", "05d9edad3560795e5b3628cf11fe4e8b37fca7c723ba924b7caa17ce914a4c9b4468ab371f962e8cc620376631119e447bdb61b0c02d9258d9efed3c15e406a9" ], - "optionalKeys": [ - "+902b54f4f1767a37cbb287987c23c9214abc23e2d9b1556079d42a1d0f5855f3" - ], + "optionalKeys": ["+902b54f4f1767a37cbb287987c23c9214abc23e2d9b1556079d42a1d0f5855f3"], "numberOfSignatures": 3 }, "signatures": [ @@ -1685,9 +1645,7 @@ "+b582a9bf2333cb4c8cd54c52823a5f71814f65264c7e76d3eae4c4f06a97be21", "ab0281fa4839f0bceef97fe85c6f16e24476410114813f3ff69246fa0cbbda9e266c7b6cf8857deb4e49d30e9b7f9c3e2837246d451e114f3171ac7408c521f6" ], - "optionalKeys": [ - "+e84345108b7053e8a9e8e512b15ae4ee8123464fa93c5464ed797cdd17705c2f" - ], + "optionalKeys": ["+e84345108b7053e8a9e8e512b15ae4ee8123464fa93c5464ed797cdd17705c2f"], "numberOfSignatures": 2 }, "signatures": [ @@ -1953,9 +1911,7 @@ "+2369132f0362e6af1389a99739e17794d78fb270b70d03133391d333a54f3f3c", "ffad7ac36701327f1e15fa2cd71a2841334fdd5d815e53d5860c9710b2ce239454455e18977edc85aa1228391c11c41dc8ebc45420c5288f1efca8fb38854c2f" ], - "optionalKeys": [ - "+a89ee6a4b048e062e945583ca05126e4cc46762781d2ad915dc52396d7367fb3" - ], + "optionalKeys": ["+a89ee6a4b048e062e945583ca05126e4cc46762781d2ad915dc52396d7367fb3"], "numberOfSignatures": 2 }, "signatures": [ @@ -1994,9 +1950,7 @@ "5f1b8886ae6593e94a24faed6bed617e01a4eab05ace13b3e09e46adfa7db1d4af0de8e6b5e3f6bff17729f5cc51670a56fe84304956d08512940caafbf8e437", "41008628ad6c559918fd92c39d6ae39b286239e33f69550158c8f7f64336553312ab9cf4901867c43b221b81944a443f6582d1847b0cb7cd3ea090df3eeecb1c" ], - "optionalKeys": [ - "+55cbcb118ea888bdb12a4045644ba419db36d33a8f38302ba455659029d4e9c4" - ], + "optionalKeys": ["+55cbcb118ea888bdb12a4045644ba419db36d33a8f38302ba455659029d4e9c4"], "numberOfSignatures": 3 }, "signatures": [ @@ -2032,12 +1986,8 @@ "senderPublicKey": "ca3c4e502ec9e7474944c2716bb195d82fd096fa167277699fe7ad8d933db2a1", "nonce": "328", "params": { - "mandatoryKeys": [ - "+7935b080639bfcd5be0f2e4caab5ed6f33a08365208b1aed72f3a0af038d1a1e" - ], - "optionalKeys": [ - "+20903ab67ae89d28f9edf4c4ea6882e1ff67cc281f1623bbbbc64ce162703756" - ], + "mandatoryKeys": ["+7935b080639bfcd5be0f2e4caab5ed6f33a08365208b1aed72f3a0af038d1a1e"], + "optionalKeys": ["+20903ab67ae89d28f9edf4c4ea6882e1ff67cc281f1623bbbbc64ce162703756"], "numberOfSignatures": 1 }, "signatures": [ @@ -2075,12 +2025,8 @@ "senderPublicKey": "4c53bc7f6aec4b12c432cc56bdffb7ce72b9afa2771b8bc98145cbc6124908e4", "nonce": "105", "params": { - "mandatoryKeys": [ - "+7bb5c7510e0ad17a6f680133cd18737618819a5af74985095834218b6139243f" - ], - "optionalKeys": [ - "+e3d61bb1d72caf1113f6b70c57214d44063f389aae9ffaaa24155476537d5e9c" - ], + "mandatoryKeys": ["+7bb5c7510e0ad17a6f680133cd18737618819a5af74985095834218b6139243f"], + "optionalKeys": ["+e3d61bb1d72caf1113f6b70c57214d44063f389aae9ffaaa24155476537d5e9c"], "numberOfSignatures": 1 }, "signatures": [ @@ -2521,9 +2467,7 @@ "4530a957383872ac64c8b447cc45904c109e6282ed6be60a2d3b9c39411aa9afb8338fbe7123884f8c8812369e08ce4f5230ecf1ef918368eb376c78f2b925b0", "bd1c25c603024ede8bd0ec057f17f5bc6d5dfd31ab93bf1908aa4a1919bf0ad042e2bb29a8e5587adf6379e9cbfbd3eb50df5e9f39d34b9619c48c0c7547f14f" ], - "optionalKeys": [ - "+8c45d93aad67fad063e092c557fe3c03926d89ca5c27e6f5efd5f52ebcb41012" - ], + "optionalKeys": ["+8c45d93aad67fad063e092c557fe3c03926d89ca5c27e6f5efd5f52ebcb41012"], "numberOfSignatures": 3 }, "signatures": [ @@ -2565,9 +2509,7 @@ "+1ba642ac57324925114b127c8ed06aedc946634ee70372122a90ddac84f13716", "370613c7a3b301762f11dc8abc0d04395b3c47bce106406690a66a3a32b4157ea80f09ab52c572e864ed390f8b8a11dfb92fcadcf65dcf8d46370537a7edfc8c" ], - "optionalKeys": [ - "+7d7ad6a28c9059c8de4f23cc091a48395ce9b0baec8994af2344b37bda66e100" - ], + "optionalKeys": ["+7d7ad6a28c9059c8de4f23cc091a48395ce9b0baec8994af2344b37bda66e100"], "numberOfSignatures": 2 }, "signatures": [ @@ -2662,9 +2604,7 @@ "senderPublicKey": "304bca265637900496395488f3e5e8442e4e228a2afd66753d22333abb50da4c", "nonce": "106", "params": { - "mandatoryKeys": [ - "+fb43ac7a7d6ff657fbf3f3399c8cd7a5f3ed85c963dfb3fa04a20955bf80645e" - ], + "mandatoryKeys": ["+fb43ac7a7d6ff657fbf3f3399c8cd7a5f3ed85c963dfb3fa04a20955bf80645e"], "optionalKeys": [ "+bd91c39f9ec4894eeccb949921f73bea45e7a2ed348b85146949077eef20bece", "ab5236716c3ee84b72e051d0a6f4523619d491eca9fb55568d38c4dd614ff97154e52ad97c7d0b16227b104ffc848de0235def62409a27686e48fa3186f4a656", @@ -3010,9 +2950,7 @@ "senderPublicKey": "20a922fd5cc7036e4a5afb6092bb7b533f406d82250ea87730c34801785f1393", "nonce": "69", "params": { - "mandatoryKeys": [ - "+da8908e9897ef2d78b4faa0792b661679effffd31cce5cd110a1bceedeb72140" - ], + "mandatoryKeys": ["+da8908e9897ef2d78b4faa0792b661679effffd31cce5cd110a1bceedeb72140"], "optionalKeys": [ "+99e81c817c64b500fc146d75b252afa49da20a68dc1c68a7bd83d208825ef068", "3b0e910aa828c4b651046730e176fdd402882b541f909846a6cba93df9facf158fbf48ee70d5bf186590870b78fae2e589d82febf194ce580976e5f32168451a" @@ -3126,9 +3064,7 @@ "senderPublicKey": "c20f569d2b27646881b7eff3a991486b1c4121f170fa7968b2e0eb34235265e8", "nonce": "659", "params": { - "mandatoryKeys": [ - "+7c8be909a6909c000294362ab3cb6cec49c23025a49d90af0c64f42b22cfaf29" - ], + "mandatoryKeys": ["+7c8be909a6909c000294362ab3cb6cec49c23025a49d90af0c64f42b22cfaf29"], "optionalKeys": [ "+e55d2b27256dd9dfca53e2f6db1f240222f3c01bd9493d328e3f89bdbe019a44", "35eaabf9b9774687af82accf4714ece408448aeca33ca8312e70260de5a4a778e52a1717cce04a97a9656bfe57bc710f14a8ba574ec73f41e2529da97aa18db0", @@ -3314,9 +3250,7 @@ "senderPublicKey": "6c5198571bb8c7c9130f272eb99df261dffc636c97d2df1381161e1d4892e863", "nonce": "947", "params": { - "mandatoryKeys": [ - "+d1f6f3079981c553a72653182521070874120d323dbd214c03f4bc31c6926d8b" - ], + "mandatoryKeys": ["+d1f6f3079981c553a72653182521070874120d323dbd214c03f4bc31c6926d8b"], "optionalKeys": [ "+92841e4a36f91154e38217e079126cd9b30c40cdefd78f063c7d916014be122c", "5d6939e7e9c77eb08520c93aa273609a2035856f1de6ba24f2e1b849f48a9c094b725b6245d8b14334a79a9d52155fdf59912bb8b40c69fba58c7485aa5d06e8", @@ -3518,9 +3452,7 @@ "+032c988eb71d33a47526c0b11268bab3547b6e173b61bb3fc85afc918f1b0190", "5bcb6b374f31ff03e7f801975277557b6b08d5d28970f135708fe1e13126f3f0c2bdbca93352ce8c32446b60be7eae9d5b7b5ab4a19249abcac35b5530dfb6d1" ], - "optionalKeys": [ - "+89c40a4f078ff1e36446252a52c30d8bcaff429de3320f190f24259a4c0bfc1e" - ], + "optionalKeys": ["+89c40a4f078ff1e36446252a52c30d8bcaff429de3320f190f24259a4c0bfc1e"], "numberOfSignatures": 2 }, "signatures": [ @@ -3577,12 +3509,8 @@ "senderPublicKey": "613cf7cf90e298a1bbe6f1fb650ab7124ee67bcc59169dc02074f5bf3d1b8366", "nonce": "949", "params": { - "mandatoryKeys": [ - "+a18894e9a2260ddc4aa7874a8b1f8b700df9dfce58f85b8d2e810c4d34958e14" - ], - "optionalKeys": [ - "+1c125cbe653514e189a7d00a6f15de1d20eaa45d48e82a7a0040de312960d16b" - ], + "mandatoryKeys": ["+a18894e9a2260ddc4aa7874a8b1f8b700df9dfce58f85b8d2e810c4d34958e14"], + "optionalKeys": ["+1c125cbe653514e189a7d00a6f15de1d20eaa45d48e82a7a0040de312960d16b"], "numberOfSignatures": 0 }, "signatures": [ @@ -3717,9 +3645,7 @@ "ba47e53ef27223f021a9c5014a2a808d97f8491448882c7b0fc07039c43051eeda895a19baa96ef4609dbb8ebb3db51fc2153242f711afda07cb78d69ac5a8c3", "67ace9866d6b90b33a0e9d19c974ec08fb73218b360b410a16ebbb67228daeb93c38feb32144b28e156d5b0b1081398eafdc0969e639f0e6f45a935f589e305e" ], - "optionalKeys": [ - "+42765417c0777a084606af5feb91cea0ec186789c7fbce853837740566fcb7bb" - ], + "optionalKeys": ["+42765417c0777a084606af5feb91cea0ec186789c7fbce853837740566fcb7bb"], "numberOfSignatures": 4 }, "signatures": [ @@ -3736,9 +3662,7 @@ "senderPublicKey": "0b1b2c0c59f72a0231697630ecfca3bac360f05c8b54c2ef2870e8d173ca408a", "nonce": "654", "params": { - "mandatoryKeys": [ - "+d22a2bb4f308fe4024c9a856fb0f6e25fc84dc2a826f7bb87d742d45aee53cd2" - ], + "mandatoryKeys": ["+d22a2bb4f308fe4024c9a856fb0f6e25fc84dc2a826f7bb87d742d45aee53cd2"], "optionalKeys": [ "+1c650c75ac2c23ca3b1ed735ab0c52f7f6a31589abc3731696b92faf618eedcc", "c326cad7ff4f853645b04391d0d573c677a3d69371b291fd7826c47ac8d37471e845da9a9016a3ba8d0c6a18603a438b619bf88876e778906f60eb54a807b336", @@ -3853,9 +3777,7 @@ "senderPublicKey": "fd5e4e45c7cea108bf084d4c100f2314c44e46fe402234c5fa5371a822506d9a", "nonce": "632", "params": { - "mandatoryKeys": [ - "+f787e4514cb1fe350f4dd650d364569b1fdd045aef9f3a327120755bb15487c7" - ], + "mandatoryKeys": ["+f787e4514cb1fe350f4dd650d364569b1fdd045aef9f3a327120755bb15487c7"], "optionalKeys": [ "+ef8aa6f0cb7e23bc73afbc489b40394701397192f931388fce07da0e38803b86", "e8af9899951d2207a89bb88f8303e7dc2c644e9549abc936167ddac15d63f2d44767f6845c6d0d9a5488a59384a7e2cb1135c80d80b5af9850bd233ee379206a", @@ -3951,9 +3873,7 @@ "senderPublicKey": "27eebed38d51beb41c626b56b33cb32e58ae6c7dd54d93440ad44f5129d1a44a", "nonce": "134", "params": { - "mandatoryKeys": [ - "+6619ea6267c339320caf7c387c7573b941600dfad280466a0b67ea14bd44df4e" - ], + "mandatoryKeys": ["+6619ea6267c339320caf7c387c7573b941600dfad280466a0b67ea14bd44df4e"], "optionalKeys": [ "+d38be352976f4efa317d942d41d8f7c33652a2a5720d08f5f221e4aa7289f471", "6f09c9dac7029fa7e664e442d93ade693aacfa6e757034d8be7ed9cc7b2e3be47dac1685b77e6e0f885b680648798dd7cc8e1bcd93d35109a8282354c7f3f0d8", @@ -4134,9 +4054,7 @@ "+e0c1319b74c2c82004892c181c037c07e91b230a2f195bd43e6cec0fb837962b", "c1f94ae8cbe8c0c00804aae0f1e156d37203ebb5e630893559798640caae92ffc922d5a6e7e753b861f6384f44a12a308f7d8f65ed9a5dd8a8eda883c63348e3" ], - "optionalKeys": [ - "+03a39a574511e8c151f22ebdc8ac7998d138256d4247a66d30d451bbca8586d5" - ], + "optionalKeys": ["+03a39a574511e8c151f22ebdc8ac7998d138256d4247a66d30d451bbca8586d5"], "numberOfSignatures": 2 }, "signatures": [ @@ -4179,9 +4097,7 @@ "senderPublicKey": "d70f55726da853f65d17e5e33447e5baf3434dc50832c18baab5f7a429ba7b9b", "nonce": "366", "params": { - "mandatoryKeys": [ - "+1cb8795f0fd1680f056e3afa142c85af49d2e627fe920a0802b110d3bdfced0f" - ], + "mandatoryKeys": ["+1cb8795f0fd1680f056e3afa142c85af49d2e627fe920a0802b110d3bdfced0f"], "optionalKeys": [ "+1936cdc574c22c9747788c5045e35df3aa14334c17f914203b575c68a1a274d6", "221739f07a4271f69c795c67b81952fbed5ef984feca2f64b3621c8fff80056a5678669152555755789e0829553f29b235e5cb4204517b34f7a4834337ada42a", @@ -4224,9 +4140,7 @@ "senderPublicKey": "05017339b007a4503bf6375642ee48d8b80b39ecf68a70799ee58c27136c1755", "nonce": "421", "params": { - "mandatoryKeys": [ - "+f613b3670dd3df7df6b03e7063b6506cfcac9fedd8c4dca40e1ddfdfaa7bfcf5" - ], + "mandatoryKeys": ["+f613b3670dd3df7df6b03e7063b6506cfcac9fedd8c4dca40e1ddfdfaa7bfcf5"], "optionalKeys": [ "+9391b6456d0a234a42133173d7363085edf579fd03c1923c1f56e833c51b6b8d", "b907e1e4070ff8147f2ad0fe14bd3703823626277f1723a3f1f86931a7e858a05b4d1cd85d676894e03a477945fe04fdbf436de2ec029b202be9e1d209cec2c5", @@ -4388,9 +4302,7 @@ "senderPublicKey": "a72a6190ce608b56b48f40428c6ee14f0c1f42c00c1a68e7acb8b9dc5394d954", "nonce": "287", "params": { - "mandatoryKeys": [ - "+8a5be4c995004cad9831512b5275a7f5c6ba7d0312363a36d86144db7404a912" - ], + "mandatoryKeys": ["+8a5be4c995004cad9831512b5275a7f5c6ba7d0312363a36d86144db7404a912"], "optionalKeys": [ "+3bc4e94c0f59ed14fe2b719bedb2adfc853f447173de5ecaca89b09240fa7085", "a592b7c8035b765c7def46cc8a643d71b9dfd1097fa876c8b80c2d4ed2066188adfc4d5106354f6b53c69de41e7742fcf47a21c6fab21d836f7c41632f9d9081", @@ -4465,9 +4377,7 @@ "senderPublicKey": "bc8b7fe3b6ec05550d76e45eb8894698a8188d4a611095e19f7e3a5fd34812fb", "nonce": "346", "params": { - "mandatoryKeys": [ - "+3d4078e6f92a23af7d6094b2ae0a8e477f00ba5a13142eaefb86cfa60951c334" - ], + "mandatoryKeys": ["+3d4078e6f92a23af7d6094b2ae0a8e477f00ba5a13142eaefb86cfa60951c334"], "optionalKeys": [ "+ee937abd182d1032c530dde0c1d7a3b4b448ed66be769e74156a566d8baa654b", "86988ad2706bc34d88bd07654e4aae3d32ac02d3e653d8720e1ac3d747e34ff70b80a98cd45a10b9b5672d36517531664e8fa5f4d2b16d84edb75978cacfce19" @@ -4704,12 +4614,8 @@ "senderPublicKey": "96baf2dbc2acb16667c150767c44f00fd831584f45f2cc1a26c02b669d872bc8", "nonce": "259", "params": { - "mandatoryKeys": [ - "+a9e04ab672e2a8d4e37cf757fa8fd24156b5eca0732a18bf4c6f2a686283caa0" - ], - "optionalKeys": [ - "+a5201a23cd1993e608d60e736459d9f0f2e08cf2edbb36c1cb603bfdfa390c6f" - ], + "mandatoryKeys": ["+a9e04ab672e2a8d4e37cf757fa8fd24156b5eca0732a18bf4c6f2a686283caa0"], + "optionalKeys": ["+a5201a23cd1993e608d60e736459d9f0f2e08cf2edbb36c1cb603bfdfa390c6f"], "numberOfSignatures": 0 }, "signatures": [ @@ -4732,9 +4638,7 @@ "eeb3dd2018ec6b44c79df780afd918fff946a98dfa8a9f6ef4c8c527a7a6e5e30044210396f7d2c2d27050667d1951922a4b069deac42e62b658d592b79e32e8", "4b5bb53caf8dadb7303930fa3a7aa399b715a7aaa2151cfbebe360b82bd14d4a4cd3585de9da3549b9664696cfa11d8f37554795f7153363a3506f57189152a0" ], - "optionalKeys": [ - "+4f08254f3350ebb48daa5d77d170db6166a2cae964ddf73646a5edb583342475" - ], + "optionalKeys": ["+4f08254f3350ebb48daa5d77d170db6166a2cae964ddf73646a5edb583342475"], "numberOfSignatures": 4 }, "signatures": [ @@ -4768,12 +4672,8 @@ "senderPublicKey": "38e7aaf2cefc4b2a1b52da0cac3f508198a8e36ce02f2ffe5800a1e3bdeb96a9", "nonce": "645", "params": { - "mandatoryKeys": [ - "+80b4458868ff1c6a3041043b54e59ec1ea5df0b530c95615c71fc7c0c67efbfd" - ], - "optionalKeys": [ - "+d6c321186f978e869fc539f6859402bce6a43a71767550029d97df6bf8ea0326" - ], + "mandatoryKeys": ["+80b4458868ff1c6a3041043b54e59ec1ea5df0b530c95615c71fc7c0c67efbfd"], + "optionalKeys": ["+d6c321186f978e869fc539f6859402bce6a43a71767550029d97df6bf8ea0326"], "numberOfSignatures": 1 }, "signatures": [ @@ -4817,9 +4717,7 @@ "95917f00212d89d036395e956dc66c95d7e27d7c9bb02c059a1bc6d6bb17052540b295f979e119cd95e80487437f8dda9d3890210fc94c02af129d49cc632a85", "064811307cccb539f39657d67c6b036b9d610a0c9639e7690443f51bcb0f26f48c09a1440adea70942d2434b4f8d0ccd089a244d5b049e3b92a035da6f87a38f" ], - "optionalKeys": [ - "+f8b5e206190b27a988b31e2048989e35790db30343ffaa5efad8647655736927" - ], + "optionalKeys": ["+f8b5e206190b27a988b31e2048989e35790db30343ffaa5efad8647655736927"], "numberOfSignatures": 4 }, "signatures": [ @@ -4876,9 +4774,7 @@ "+8bd562503995dd875a671daa0db338189dc47c20c5aa4af578a4ecacd87e7066", "347de40774da34e4309d4671337c0e0996f4bee879d96db062090c5e87a851aa8db8f6ba2f37fe466e62a23ea5dc08bd204b42162fd11e4c47887950b51177a7" ], - "optionalKeys": [ - "+10def28c3d52daf184a4ccac3570de2e939de676985faf0d9014efa1e93a9267" - ], + "optionalKeys": ["+10def28c3d52daf184a4ccac3570de2e939de676985faf0d9014efa1e93a9267"], "numberOfSignatures": 2 }, "signatures": [ @@ -4895,9 +4791,7 @@ "senderPublicKey": "aea8591e46dda23b3f3a82297d9224f1882ba0bdd05a86860bee7fc394ad15c6", "nonce": "574", "params": { - "mandatoryKeys": [ - "+453d09873e62c00aba40afec36108761d3e6e469ac47d893436b82856e64b41d" - ], + "mandatoryKeys": ["+453d09873e62c00aba40afec36108761d3e6e469ac47d893436b82856e64b41d"], "optionalKeys": [ "+d3a26cdba5b958be05c5b72f321f4653a036cfc21a3aa939915964c40884bcc9", "29755733b8d7ce2cea03580ff47b17279bf4d24b5f5a3285af19ff118fa3bae25f1e37d9d9346743df5d77910ff06a0638f71293a062b0a29a2b51c48a17d11c" @@ -5106,12 +5000,8 @@ "senderPublicKey": "25b848ce25b4c0c132e827ffb27d7db42de41d164393954b8d604ffb9d0ef9b1", "nonce": "254", "params": { - "mandatoryKeys": [ - "+e5afb53aecbbe5ba849f8a24683af37f328ac95ad1a86a5ce30b8df545761c32" - ], - "optionalKeys": [ - "+5cf1fee48156268a87f6a426c4b3c735d95154b9fe68123078d1fb7052830c10" - ], + "mandatoryKeys": ["+e5afb53aecbbe5ba849f8a24683af37f328ac95ad1a86a5ce30b8df545761c32"], + "optionalKeys": ["+5cf1fee48156268a87f6a426c4b3c735d95154b9fe68123078d1fb7052830c10"], "numberOfSignatures": 0 }, "signatures": [ @@ -5154,9 +5044,7 @@ "d6f7c53de4585a327c7bc95614c9ce40a78bef3d212051b14e7df65a4ff7cdb54218c0dca9750158a08f7b2d5d0d4ef05620dfdf31897f536228b11dd69a2631", "56105d5722780690f7238e34c10d020ac119152768b0a7a80a4004d6fb95848c8c920607072e2cfcb7ea11065a0dfea4ae9ce089d3eb5f6cade638dcd1877368" ], - "optionalKeys": [ - "+26f254e434eaab63452bca496f68a95049d6b7851bb174826a3db2ac8bd9c1e9" - ], + "optionalKeys": ["+26f254e434eaab63452bca496f68a95049d6b7851bb174826a3db2ac8bd9c1e9"], "numberOfSignatures": 3 }, "signatures": [ @@ -5296,12 +5184,8 @@ "senderPublicKey": "451ba7c544e609b040e504ec54863eaa215fa37b77963d52024b98ad38a65229", "nonce": "908", "params": { - "mandatoryKeys": [ - "+b4ecc30f2d08ee1af014b68f83c3d41015d64c9f06e42b5675251bac0f72edf6" - ], - "optionalKeys": [ - "+0a7f4e614d51a3352638d272de9cec0fbe554dbaedba0789748843135a1ea577" - ], + "mandatoryKeys": ["+b4ecc30f2d08ee1af014b68f83c3d41015d64c9f06e42b5675251bac0f72edf6"], + "optionalKeys": ["+0a7f4e614d51a3352638d272de9cec0fbe554dbaedba0789748843135a1ea577"], "numberOfSignatures": 0 }, "signatures": [ @@ -5343,9 +5227,7 @@ "+f15e778fc39355a9ef7061bc6a3702d4b5b92230054a8f33a9fbe785b7290a91", "197cdb3561f48b6fa2e80131dd28f5cd6e5bc7101f90dcc007b5b6d295110fe3345d932fe5bc02efdb5c0498112e6ce77775c7a4b7db2a31f0319e179a642a34" ], - "optionalKeys": [ - "+d7fdeffa48412e4221ea206b5b3a08833d2c9e6618cc5adfea3786cf96dbcac8" - ], + "optionalKeys": ["+d7fdeffa48412e4221ea206b5b3a08833d2c9e6618cc5adfea3786cf96dbcac8"], "numberOfSignatures": 2 }, "signatures": [ @@ -5386,9 +5268,7 @@ "d186556bf6f5a0efc421e4ec06c47df2e51418e0d56f2e3cbe812f2a27e2c82d097bf78ee2492fcf04f1000396c38d081204c0998147e76c321600f18715b7c8", "1905b9d013d03992463518eef5a05dfe39bf8edb69d71298e3358d7b618e93514d376b8d8791fbd242d04065b8fb596fb8929c24a3b308f2b94b76e50ef80147" ], - "optionalKeys": [ - "+a902d83f854bcb5659018e142cfe57eb3044ff7183ac35f7f3eae2b971691628" - ], + "optionalKeys": ["+a902d83f854bcb5659018e142cfe57eb3044ff7183ac35f7f3eae2b971691628"], "numberOfSignatures": 3 }, "signatures": [ @@ -5445,9 +5325,7 @@ "senderPublicKey": "9f7304b4be5819d935c6a76d004d03d22c7cd856f4cc61f4e202e13fa0c98616", "nonce": "817", "params": { - "mandatoryKeys": [ - "+9fa3a3f688526f8d7c75d7aa9e3c7be237a76cef26c59ddf41537926bd866ebb" - ], + "mandatoryKeys": ["+9fa3a3f688526f8d7c75d7aa9e3c7be237a76cef26c59ddf41537926bd866ebb"], "optionalKeys": [ "+b82a29071793d6dbd8f0348109ccfb30a686322ebe29d35a84c4de96f52aaeb5", "3f74df48c923930fbabfd248f23a4e9dc368cef5b0cad9f5718a06bc9c8bcb67ceedb141268ca760489463f86ebb714bc28a9a06f372e0e9e864ea24e8468148", @@ -5548,9 +5426,7 @@ "senderPublicKey": "099ff6d90466f91bdaf6a725d78324503468fbe5ebaa1e8eb62255b5c2d04922", "nonce": "715", "params": { - "mandatoryKeys": [ - "+cf5eaf5e8f43c792dfdea416b4d7cdf0a0ae51be0b7d8d460d57fc89edd296eb" - ], + "mandatoryKeys": ["+cf5eaf5e8f43c792dfdea416b4d7cdf0a0ae51be0b7d8d460d57fc89edd296eb"], "optionalKeys": [ "+d208956bd09b2933aa3b8ee4a29780e4ace775e57738413d09699a374e7dec69", "344fd8c04353728c8f38b5454baea505519b8395c6ad971607126dc3484d16740caefcefe4bcd00c481d12647e6b8a8233b68ceb36b567d717e4e6c5ae898ea9", @@ -5608,9 +5484,7 @@ "senderPublicKey": "cc38a4db2e09649520880f6446f2c5b24146c5327dac05467a2640d48c200dd8", "nonce": "383", "params": { - "mandatoryKeys": [ - "+1dc0568532a3aad1299f32caba1a1cac505acf9eaab1dccdf733461d63b5b783" - ], + "mandatoryKeys": ["+1dc0568532a3aad1299f32caba1a1cac505acf9eaab1dccdf733461d63b5b783"], "optionalKeys": [ "+d48e3ddd02061eeb842c1432838255ae507e28b883866d25217f466c6b23e674", "881958671e2b6a3c3cf3557f3f23dae73ad52d83a3907ff5ad9b4e1698833b9f2e509d7496e2a91c4d63423388f3ee5579c678fb798a245921ad475d57661b46" @@ -5710,9 +5584,7 @@ "b907b8d4e145b4992b80f6408b3a0bad36b32d8bf423d0fce8c1630e27d2ed9c7c304c5358b7ab48c3412a7825674c70a8e59e80acac20474f37c2db6f1c3b6a", "2ded363006ee5284ce8f74ddff2d5f513315d46ea58079d708fcc04d7b15faf67ba164bb35dc56cf63ba6063de6cfc2f09b5a90a17e33cb95a46bc21efc4ffb2" ], - "optionalKeys": [ - "+bc3963d7d6ea6ccd9f135501cbccde445a2e40774e9dba6d4166ba2d7705d9ac" - ], + "optionalKeys": ["+bc3963d7d6ea6ccd9f135501cbccde445a2e40774e9dba6d4166ba2d7705d9ac"], "numberOfSignatures": 4 }, "signatures": [ @@ -5853,12 +5725,8 @@ "senderPublicKey": "dd3e6be914bef577121331a5dd334e0c7415eec16905aaff7dede21c15d5089b", "nonce": "562", "params": { - "mandatoryKeys": [ - "+56177cddb80bad31b48613da8c76528df9ca06350dcdfa4d7bd30c6f2e86e571" - ], - "optionalKeys": [ - "+90eee82050473ceeb95dac4cba2469816c78dcb6d0ef9fce0d5257708bf22711" - ], + "mandatoryKeys": ["+56177cddb80bad31b48613da8c76528df9ca06350dcdfa4d7bd30c6f2e86e571"], + "optionalKeys": ["+90eee82050473ceeb95dac4cba2469816c78dcb6d0ef9fce0d5257708bf22711"], "numberOfSignatures": 1 }, "signatures": [ @@ -5949,9 +5817,7 @@ "senderPublicKey": "f8f3e0c5c9f401060e76be05a5d2086fde5fd3c087c43896a7f5f691164085f3", "nonce": "419", "params": { - "mandatoryKeys": [ - "+d7da7922a77c65fc86010d681587b912dd2a2210422640cf804153a41ad106a6" - ], + "mandatoryKeys": ["+d7da7922a77c65fc86010d681587b912dd2a2210422640cf804153a41ad106a6"], "optionalKeys": [ "+67bb14883c04c3e1b4f27775f17476a68b79974af708aeaff017be219bc87fb3", "4d0d358586927d84e959a786b9639cc4a86110c4b3d1dc18641da06e72f5455c2c32afab05fdd815bdd94e9af0612f1077e9cf9824078f46608636e63f8f17d9", @@ -5995,12 +5861,8 @@ "senderPublicKey": "96ba9c0a280361f9daafa6ec6137feb34b1e2d5f1c360d5485ddc2042c6f4bf8", "nonce": "750", "params": { - "mandatoryKeys": [ - "+29e530978cbf9764967a113e2f3014dafca08902894ec2e5a6c556c76e505d7f" - ], - "optionalKeys": [ - "+e4479c73f0cd7018189fadb1944c385aaddc78fd1d5f3e30c95a2ddf43a4afa5" - ], + "mandatoryKeys": ["+29e530978cbf9764967a113e2f3014dafca08902894ec2e5a6c556c76e505d7f"], + "optionalKeys": ["+e4479c73f0cd7018189fadb1944c385aaddc78fd1d5f3e30c95a2ddf43a4afa5"], "numberOfSignatures": 1 }, "signatures": [ @@ -6119,4 +5981,4 @@ "previousBlockId": "7b3384b17d2086fe90c11e74ce98f90bde5d4ce419cd83bfbf443036df9adc28" } ] -} \ No newline at end of file +} diff --git a/services/fee-estimator/tests/blockGenerator/moderateTraffic.json b/services/fee-estimator/tests/blockGenerator/moderateTraffic.json index 4eea9778a..1ac0d388e 100644 --- a/services/fee-estimator/tests/blockGenerator/moderateTraffic.json +++ b/services/fee-estimator/tests/blockGenerator/moderateTraffic.json @@ -74,9 +74,7 @@ "+6d1b2499b91e7cd8ba869c2dbd646ad16e517f2bd19d64d85adbf1985f72648b", "5fefe8cdaffb6aee56f0bff71d5b4f3e06db9d044a4541e5a83d9d149b422e1dd653fb5ee9a0ab99e2a2f800c1d72933d4c3b096ae20b90e4021a5cdcd916a24" ], - "optionalKeys": [ - "+bfe0b013b856564be50c89a3605b70569ef333224118449d25a0c8b30374094f" - ], + "optionalKeys": ["+bfe0b013b856564be50c89a3605b70569ef333224118449d25a0c8b30374094f"], "numberOfSignatures": 2 }, "signatures": [ @@ -175,9 +173,7 @@ "3b01ea849ecd67d680a9c76ab38f8d32bd28ee0bbf2e1f202334bd82130a4e9ef46ab21a810e161b542a38139de15468d4ad405484d0a949c89cc20741683afa", "29896adf7437be369ce026da3945b9690b8a0e4e029896e281f4f323b5990ce0fac955bae2548c3bd43345527fc7124a1045e47cb90853419f37c6b1e68dc131" ], - "optionalKeys": [ - "+69dbc729ff04155d4fe72181ee2462bad50cd031717dfece6bbee077f8f5cfad" - ], + "optionalKeys": ["+69dbc729ff04155d4fe72181ee2462bad50cd031717dfece6bbee077f8f5cfad"], "numberOfSignatures": 4 }, "signatures": [ @@ -449,9 +445,7 @@ "+7dd18e676f3124b108f2522cde392d5b40bb700e32608f602747710f8f2a477f", "8f7364b09b2bdda3d2983518dc6805c877873fb1ec99e4de65429d1b527ade05523a1ad52041321eff8cb40e5bac755b65755785dcdcfd77f323a049e847bc29" ], - "optionalKeys": [ - "+372ab61da29f0f4fc7e2cddbe2b6f72f511f328413c2cf25dec6d393d87861f6" - ], + "optionalKeys": ["+372ab61da29f0f4fc7e2cddbe2b6f72f511f328413c2cf25dec6d393d87861f6"], "numberOfSignatures": 2 }, "signatures": [ @@ -468,9 +462,7 @@ "senderPublicKey": "0bad96b479197115fb0b89c11e2adf21407631f9e84475f694cce9ed22aceb8c", "nonce": "873", "params": { - "mandatoryKeys": [ - "+da7154c291298133970840e906e4274ac65fbbed5193c8d9c44112e3ae447453" - ], + "mandatoryKeys": ["+da7154c291298133970840e906e4274ac65fbbed5193c8d9c44112e3ae447453"], "optionalKeys": [ "+692fd7b7c24962352d7fd28b433037d3af5bea58ddfce4f3167cf71ecd625216", "71d81d43a1fbc509b534434f88115e2b2cc6318f1cf1bf8266e2107c5911118cdecd55a4d59b09db6c59e7507c86c6ac80416e1682a5e9f1cc8c7eca4365eff2" @@ -538,12 +530,8 @@ "senderPublicKey": "b59a82f0a613f1b0bc020a3a690d64cc732cec0636ca3cb7d8e5e6a3e380871d", "nonce": "909", "params": { - "mandatoryKeys": [ - "+74b6127c541adba60b9b3a3eb4609c96c8564d8616a76dd3ea9c04a59c9df0df" - ], - "optionalKeys": [ - "+c0a29b44f4839bfd9178c8728fc47b286f8ccb2d026875ee9df794a16412d16e" - ], + "mandatoryKeys": ["+74b6127c541adba60b9b3a3eb4609c96c8564d8616a76dd3ea9c04a59c9df0df"], + "optionalKeys": ["+c0a29b44f4839bfd9178c8728fc47b286f8ccb2d026875ee9df794a16412d16e"], "numberOfSignatures": 0 }, "signatures": [ @@ -564,9 +552,7 @@ "+8c8de83bd4120bc29fd6a07cd1db26e0cc24e997d74632ac10363d2d0886e203", "511b6e8ca66664041f336ed72a335062e82ea07b932ae14358f956965789145ed82791a6515c3ab6284d68c2b459bdf95bdfeaa728ce9dac52a2b19c07a961a4" ], - "optionalKeys": [ - "+7976597f2a0b3f76fb0970aa699e1ad4d1aab9b451d96d26f3693a2716ccf736" - ], + "optionalKeys": ["+7976597f2a0b3f76fb0970aa699e1ad4d1aab9b451d96d26f3693a2716ccf736"], "numberOfSignatures": 2 }, "signatures": [ @@ -602,12 +588,8 @@ "senderPublicKey": "53e045e78775edd6b057615ad47edafa9f678b55ee1eb2d30df8b491db633369", "nonce": "97", "params": { - "mandatoryKeys": [ - "+0d7c7db458883f6bf2a29fb56effbda9ca32f3c99a8c03086a4dcb18f43ccd75" - ], - "optionalKeys": [ - "+9bee0d77c510d457c89f561026165e2d982645254aa1ee711cea1bbfbcc62572" - ], + "mandatoryKeys": ["+0d7c7db458883f6bf2a29fb56effbda9ca32f3c99a8c03086a4dcb18f43ccd75"], + "optionalKeys": ["+9bee0d77c510d457c89f561026165e2d982645254aa1ee711cea1bbfbcc62572"], "numberOfSignatures": 1 }, "signatures": [ @@ -624,9 +606,7 @@ "senderPublicKey": "1832775afa4b3c4b7528b0353ef73de26d070c02a69ad6ed208466535b06e58c", "nonce": "595", "params": { - "mandatoryKeys": [ - "+a8f2813bf09441122580801ffbdc56ab1d4039a295e8d66e39166a10b707f74e" - ], + "mandatoryKeys": ["+a8f2813bf09441122580801ffbdc56ab1d4039a295e8d66e39166a10b707f74e"], "optionalKeys": [ "+b9a425b21dde5c5bf6e4faa8115c6ec1a944c38d62625d8c0f0e138c877ca491", "7a1318fe53b5509c0bcf8db416dc121ea65ba12b948cd6d22ab6f78f50a30fccedfcdd0c1e41154ce4fffc058b9163e70219a00c8727650b3a5860df619419eb" @@ -687,9 +667,7 @@ "senderPublicKey": "01bca4258d1daf9683c67d1c8c9d364f4a9cd53749d6c6b3cc3d88d6be661df0", "nonce": "122", "params": { - "mandatoryKeys": [ - "+3329b6aa9be370cc18c5fd589b2f17beab49c739df8fe13717751093a4865594" - ], + "mandatoryKeys": ["+3329b6aa9be370cc18c5fd589b2f17beab49c739df8fe13717751093a4865594"], "optionalKeys": [ "+02a907b668da56cfd872bba33b2562739e84e1d2d299bebc360bba7dcd7ec8aa", "3de8b1a2305f0c3bdc20515d3250be1a499120735921db7a0fe58c8deacd2c6d64b0c1ca3ce63dd6d6aab72369ff69ac301a688215c1af6d606ca8d270b8c623", @@ -815,9 +793,7 @@ "8802d3622f292a0fc5ae1673640a1f6435e288b74ab9b67a3d6c5dbe7cd96b733d05bdb5e536909877c7c51cbc550ece9987b4320641c92b7066881fdd243c22", "e44232903d9ea7a9d9dd2c4137d64fa109f3c8804c9e2dc5ffb2af7b28001de97f7688fa35daa16b26206fc6f207ff539c29509ccadbcde68ce3d797b78064b9" ], - "optionalKeys": [ - "+b5f4d50f2ac49d341c469ee9e5a3d3bd234e5f16b3591815bfc0f7df92960994" - ], + "optionalKeys": ["+b5f4d50f2ac49d341c469ee9e5a3d3bd234e5f16b3591815bfc0f7df92960994"], "numberOfSignatures": 4 }, "signatures": [ @@ -870,12 +846,8 @@ "senderPublicKey": "1d529e0bb7681b4435c7d9e7d6de1961adf9c45ffe60a840a9a8e517c483bf4d", "nonce": "668", "params": { - "mandatoryKeys": [ - "+7ff839bda007b2c0efe52c05d76524463ad11f18a5f0ab4fc39dd5d6aa60ca52" - ], - "optionalKeys": [ - "+cc1fe2fe3285794fac3f3dce2a9f48237698d3b45f3001becfcdbf524106968b" - ], + "mandatoryKeys": ["+7ff839bda007b2c0efe52c05d76524463ad11f18a5f0ab4fc39dd5d6aa60ca52"], + "optionalKeys": ["+cc1fe2fe3285794fac3f3dce2a9f48237698d3b45f3001becfcdbf524106968b"], "numberOfSignatures": 1 }, "signatures": [ @@ -917,9 +889,7 @@ "+e3824bdb5883359ac312cd73a33185d5ed2876ab71f7343d602a2350de2b23f6", "48223e60f8fecbe0693adcc3a611cccafee627a2372ff83fd262c16053b3c9fd7f603fa8430b686f3d356289d199e6205cd2f1de771505f2e920ef8a2efe7bef" ], - "optionalKeys": [ - "+ea262bbbb5d0b4fbd7e9302f1ea9d01fa138b32fc8f01b4a6e26b3351e765451" - ], + "optionalKeys": ["+ea262bbbb5d0b4fbd7e9302f1ea9d01fa138b32fc8f01b4a6e26b3351e765451"], "numberOfSignatures": 2 }, "signatures": [ @@ -963,9 +933,7 @@ "8ed26c777b339a7dc9b2da234a9c6a543ca71591a154cc54476131a2fa57678d6158d56c18cd84d593c7fca1f559c05300e676e19753e51f6be2a47a314391f9", "ba457e89f100a7f33de20dc443a499ff5bd9de55c9616070fa0a8ec8a4289392e8ab68d37cb2c30a3b647b82699f30572bf9f31090852d684f4c159528d1be00" ], - "optionalKeys": [ - "+66f06b5ce13a51a421ec53b9f2654d0f311a7deb76d08a47c2a92a73407926aa" - ], + "optionalKeys": ["+66f06b5ce13a51a421ec53b9f2654d0f311a7deb76d08a47c2a92a73407926aa"], "numberOfSignatures": 4 }, "signatures": [ @@ -986,9 +954,7 @@ "+7c263b4c3a0cd0ab4ed4e3d8721a954877f99ee5c8bd2e3cbf79bd863bf818f1", "2da692851b9d4a52b668190a915bef94f8db37dccc1d71770445917c3e74a3cb130a277684f09b7f413d3ee010afbebacf699b5e0058b8b31095833705bd991e" ], - "optionalKeys": [ - "+e2267182a191ae2a146f557239d58625f8368ba0553831f46785113b630e5e4b" - ], + "optionalKeys": ["+e2267182a191ae2a146f557239d58625f8368ba0553831f46785113b630e5e4b"], "numberOfSignatures": 2 }, "signatures": [ @@ -1143,9 +1109,7 @@ "58fcdf22680cf3bd38267a1d9a3304a42cfd07c58b89dab0f48eab9c7604ff5b4ae3a11db34702a3ae8ec8ad5f9c6eee6314be1d58246ea4d5bc2060b28c644c", "57599e8c974f952cd4ee8031b8698420a0d4bed1b8b460c773d62cfe4fec001752437a1bfec9d46b2689de531f0f397087307d61a8b3d7ac9367b836cb8a1dc2" ], - "optionalKeys": [ - "+43007aaa4d80ee1512674f76066bdb4de80824587acb132cbe1a3384cd611749" - ], + "optionalKeys": ["+43007aaa4d80ee1512674f76066bdb4de80824587acb132cbe1a3384cd611749"], "numberOfSignatures": 4 }, "signatures": [ @@ -1162,9 +1126,7 @@ "senderPublicKey": "4c18dbe9d6eb2df14c39d9cebc92466da7f6ab50e274418abf51b81425db904f", "nonce": "521", "params": { - "mandatoryKeys": [ - "+4ffe599fd0137452c3f5e9c0741ff892562c8c34f12fc886db490e6cd699ce1f" - ], + "mandatoryKeys": ["+4ffe599fd0137452c3f5e9c0741ff892562c8c34f12fc886db490e6cd699ce1f"], "optionalKeys": [ "+ff615c48cd59175e9cc1d2ba70887db226feb9cbb1f59c096f8d1554544fe957", "155d80053a120edab87330b609d67a2f87d9eeace56d17b08a4cb9522abb75b8fefbaff556d1ddc5a1f369e6cc303d896ee95a3f66de0940ba618ee2e7eb5226", @@ -1607,9 +1569,7 @@ "senderPublicKey": "b5175487a147575dcc82f4d11b19ab865ccb3920dccfda683e087f70a1882f4d", "nonce": "700", "params": { - "mandatoryKeys": [ - "+c614ce6a9bc786b6e801f9775094ad66f185da741a513eb4f145438b4ce57b10" - ], + "mandatoryKeys": ["+c614ce6a9bc786b6e801f9775094ad66f185da741a513eb4f145438b4ce57b10"], "optionalKeys": [ "+3245d45152f3fa40adcee92e25ec9865d4e240c6508c89ef0722ef056c0e3567", "0b58bc60ac1d3589a41923968330f9f543d9e8fbbdd311e6a8894e23ef4a6643ce5e9e46d6ce666a05d277bd5ef57eba958eb461a23cabdd842b710e98fd70e0" @@ -1788,12 +1748,8 @@ "senderPublicKey": "d08d3ad22f182ea22cc3ad070173fbc28011ee670458c04cc8ac1cb71231af44", "nonce": "361", "params": { - "mandatoryKeys": [ - "+16ee98fba7148e312a4e82cfd9430b3c6520553ba5991910a24676ee691e5591" - ], - "optionalKeys": [ - "+8649d9358b22abac1a90a8581a3012655542954316d37edc7a160b4fb3dd5429" - ], + "mandatoryKeys": ["+16ee98fba7148e312a4e82cfd9430b3c6520553ba5991910a24676ee691e5591"], + "optionalKeys": ["+8649d9358b22abac1a90a8581a3012655542954316d37edc7a160b4fb3dd5429"], "numberOfSignatures": 1 }, "signatures": [ @@ -1996,9 +1952,7 @@ "senderPublicKey": "5fc470d6f86c0a96a0920a5774fb68b512fd504ebc65c5a56dddd1a4a730cf31", "nonce": "31", "params": { - "mandatoryKeys": [ - "+1bc574fba08ff10f29420d02922a3c9e8cad0db4dedf6deab4c84000d00a1b51" - ], + "mandatoryKeys": ["+1bc574fba08ff10f29420d02922a3c9e8cad0db4dedf6deab4c84000d00a1b51"], "optionalKeys": [ "+711e0d95f3d6515f54212cb366e066bfaefbb4204386c1d6534f5120c843f07c", "2e2b6570e5f2a423dfb592481ff16a4d980f5a6ad73e979e575f458a36f7d19feadb328862e521deb4e6849229543006cdc49c99bcae4c044ad0e0ba3479eb29" @@ -2057,9 +2011,7 @@ "senderPublicKey": "43b0ef11073a36a33d00561d00b929af65dbd6b156901b4a7dc654fa134a279b", "nonce": "852", "params": { - "mandatoryKeys": [ - "+77786a3b2372ec499cdff97547d9c88e526b986eaaca672890464e4d7918cef1" - ], + "mandatoryKeys": ["+77786a3b2372ec499cdff97547d9c88e526b986eaaca672890464e4d7918cef1"], "optionalKeys": [ "+881ebca1c70d343a80de082395fc55efa0d557afeeec9c96472ece20839f2bbc", "ae5b7cd67ea2a3c556d6f324fdca4ea3a6ed4592a2fbcd69cc771adababdf97f72a5bce391c275bd3693e2f7088583b4f73444bfd88485d0b37e2bbc1b65d286", @@ -2082,12 +2034,8 @@ "senderPublicKey": "b5fe7e80233e0e27c84492fb2c78e4366d0558a3569d0b1122af699cb339ae09", "nonce": "902", "params": { - "mandatoryKeys": [ - "+168db0fb7025422701f94476bf7e98e930a7e053c8e66334ab888854a08281a0" - ], - "optionalKeys": [ - "+c40974173200c978424d74d93ccb49b69e6db977466aa1dd3fe28bfac1e1a03d" - ], + "mandatoryKeys": ["+168db0fb7025422701f94476bf7e98e930a7e053c8e66334ab888854a08281a0"], + "optionalKeys": ["+c40974173200c978424d74d93ccb49b69e6db977466aa1dd3fe28bfac1e1a03d"], "numberOfSignatures": 0 }, "signatures": [ @@ -2512,9 +2460,7 @@ "senderPublicKey": "1c1441e45f507f72cada9db034d0c7a12242378d3cde4942617d5cce7f9a8542", "nonce": "684", "params": { - "mandatoryKeys": [ - "+297a6f2670ec81e8e3b1caaabde6b2f9f1d274105c1bc0551f6022262e749ef3" - ], + "mandatoryKeys": ["+297a6f2670ec81e8e3b1caaabde6b2f9f1d274105c1bc0551f6022262e749ef3"], "optionalKeys": [ "+7fb5e76218a2e74946cd7cf619550f4002d50569383d8c772ebd40540cf144d4", "f157d8ef7bdafaf08051b9817e38f1e1cd39c354112bd32ebc736064975c210bb4ce1e288aed4ad005834929c08694d1442807debadac5ac6d6c2b652dc735bd" @@ -2622,9 +2568,7 @@ "6e7a0ed8468ebe514ba7e8114f5dbbe0beeff15ac39b38879216edd0a22f61cdd5d4ff879ab11b8ef21d90de31076927619b28a5a90c454e795f5811f4c6b817", "da127eda14636d78b2d511c5044699838ecca594fb70aab0c5babc77ce7be1e8ca9270b4149424c3e392ec3828db1e2d8e791eb60bcf222bd863c7727415635e" ], - "optionalKeys": [ - "+f4540510863fa869973b531065d26f3f225f42e8a6d1d5867c3e3f832bedad5c" - ], + "optionalKeys": ["+f4540510863fa869973b531065d26f3f225f42e8a6d1d5867c3e3f832bedad5c"], "numberOfSignatures": 4 }, "signatures": [ @@ -2723,9 +2667,7 @@ "senderPublicKey": "f1b73d48082969e2b7d53d0af0343d71add6fd66e3f648310cc9b806ebe390fb", "nonce": "308", "params": { - "mandatoryKeys": [ - "+ee00672e8261f0265b05dcc4ea60a75f8cd091281418bb63d0a46e786beb25f4" - ], + "mandatoryKeys": ["+ee00672e8261f0265b05dcc4ea60a75f8cd091281418bb63d0a46e786beb25f4"], "optionalKeys": [ "+09ab19726d4c06eab473f215872a21f16e28eb39a4043c4cdedf9e2c95cb2b7f", "32cf208d2831bbba7dafec312f60edbd9ee09b77375d3f6f7f699724928e3b27a34dd9b564da279caa2427790e4315483e255a80aad90376be205f72dd4cda5d" @@ -2843,9 +2785,7 @@ "senderPublicKey": "06430ffca7add7eb8796332a499e9e7b817774dec80590c9480bdcdb6d2db29e", "nonce": "97", "params": { - "mandatoryKeys": [ - "+2a5cb5c7ef3e9b6f6e93046297a30afa1e07b559e23846ae3e80d541980b6e0e" - ], + "mandatoryKeys": ["+2a5cb5c7ef3e9b6f6e93046297a30afa1e07b559e23846ae3e80d541980b6e0e"], "optionalKeys": [ "+6b7b7cd5fc777507f8faf9252ed366901b5a5c6644f2797ddaaf7521689d3315", "174cc05c464e78d8dfb88cfdf3a301d54ad86cb3ee6120064e059613c7dd7bd94526a18c24cf94a483171bd9da665fadbf616345507766b2e3b151a5210c5b71", @@ -2972,9 +2912,7 @@ "928aaa3a32f2e1673de7f09629fb920c5063a7416b63ba42d044c6341492eabca8823f68619c074e7191af6615509b644780e5953dfdb9aa7512f002070a1a06", "9e5a739cfc47175444cac181934d92c41fb1f7a83c923f2f7aa8e8014de0d6e8b78fcbc73418173cbffb0402234f124a1ee836b9c007ebed33b78bd74a5f0c63" ], - "optionalKeys": [ - "+737424dea4d01760d78d9a0529c517f4a58de0c62b09cc87a341a95a99c7b016" - ], + "optionalKeys": ["+737424dea4d01760d78d9a0529c517f4a58de0c62b09cc87a341a95a99c7b016"], "numberOfSignatures": 4 }, "signatures": [ @@ -3090,9 +3028,7 @@ "+2e75d820ca350f5197846d82f441a38851e5f43333bc84729c4ee0ac8c4b2965", "e0aa5dde73c503e7ea2c4124006258397904f28102d1f109eea74e307808aebb331888b0040ed53829992ce01bba518f38f285b36b8123422fe0e9ce154e92ea" ], - "optionalKeys": [ - "+30019efc5510befe0fcbb71dc1aab2c1c8a049de58638c968e4be3bd2d223d22" - ], + "optionalKeys": ["+30019efc5510befe0fcbb71dc1aab2c1c8a049de58638c968e4be3bd2d223d22"], "numberOfSignatures": 2 }, "signatures": [ @@ -3168,9 +3104,7 @@ "senderPublicKey": "1563352808c85e7781e94a40b7f5428d7ef76c862b3714d9c515a95f6dc705d7", "nonce": "955", "params": { - "mandatoryKeys": [ - "+ee4c58387366d43000351b7e320abe107b966b487763a33daab61fdfb04d1a2b" - ], + "mandatoryKeys": ["+ee4c58387366d43000351b7e320abe107b966b487763a33daab61fdfb04d1a2b"], "optionalKeys": [ "+54cc6e544b4663ca1681ea81016e6106fcfaeffad91e399537ac271e84763326", "b51473eeea01289cdfa9fcee2b203400a81370c87c9dbf30f14107439f2ebe9d1e3bd51d4b094bf30961a595085d59ecf158d92a96ed11a78f624a0846c7d0e1", @@ -3198,9 +3132,7 @@ "878d6bcdbf708064227222f2a1238c17f675f2ab0627a6c798932ceefe528fc88c15eb68b780a6f14d1b5c537df76f1a6e2271dd5f1c29016542d84e0d391332", "1c5eac9bb96132f3a8668870ea27e1e5a12030f90fa5de8ad524565237be3d5d1917cd8a29966d99a6d80278b4c6a60a42580ffb2087ce3f1411ddf535b70014" ], - "optionalKeys": [ - "+88b11930123fc72c33f90183b5a384933daddf31975f0563a026830b3c34a8eb" - ], + "optionalKeys": ["+88b11930123fc72c33f90183b5a384933daddf31975f0563a026830b3c34a8eb"], "numberOfSignatures": 4 }, "signatures": [ @@ -3217,9 +3149,7 @@ "senderPublicKey": "772015b8f85f064fff0ac4ddfa43739666c0e78e532f9eb3a272de265b0dca1c", "nonce": "243", "params": { - "mandatoryKeys": [ - "+7a2fbbd32d64da5b5b8fd121aacbb9bd2c18118401987af49988587de5cd8cfa" - ], + "mandatoryKeys": ["+7a2fbbd32d64da5b5b8fd121aacbb9bd2c18118401987af49988587de5cd8cfa"], "optionalKeys": [ "+140280cc60510a79be7124aca3169096a4b8c1ffe6fed1414d22d9bb7602299e", "f8711a24902a78b6d6131ab68b52a77ca50f11a63ae0afb61e1a1b36bc25d141890342cc662f9501f508c99cfb756090d8102309757ba4334b9549db2d38b181", @@ -3318,9 +3248,7 @@ "senderPublicKey": "4f4fb08767ceb47ec0943c61d7d22490c445bc126defb653a4accc4f601ce32b", "nonce": "144", "params": { - "mandatoryKeys": [ - "+62d9f655baf09296acbced5134b6004d767d24b0a05185f70555ba05ec630486" - ], + "mandatoryKeys": ["+62d9f655baf09296acbced5134b6004d767d24b0a05185f70555ba05ec630486"], "optionalKeys": [ "+47c267fbe8f7c34f2b681b92ea493c9f7c8bd8d81af75d19637c26f3b8490494", "7735592293d7def2bcc084bc699565aa2ba00f255b6af5386cf643821741e196841e83aabe410aebf5edfbe0a3e311455ea94bc142419cf8b421be31c87dc4b2", @@ -3535,12 +3463,8 @@ "senderPublicKey": "724bcc3bbb0d70c8188f6ddd9ff949af9355089992557ecceae803d4aed24647", "nonce": "963", "params": { - "mandatoryKeys": [ - "+da30df37461398e97672d20dbe319c443d0862a50a3e3b8aa5b966759df0692b" - ], - "optionalKeys": [ - "+95c25a91f3992369b1fc7da5e480bc5d65406ec1a8602954be915cdaad82aae1" - ], + "mandatoryKeys": ["+da30df37461398e97672d20dbe319c443d0862a50a3e3b8aa5b966759df0692b"], + "optionalKeys": ["+95c25a91f3992369b1fc7da5e480bc5d65406ec1a8602954be915cdaad82aae1"], "numberOfSignatures": 1 }, "signatures": [ @@ -3585,12 +3509,8 @@ "senderPublicKey": "65f20cef1ecc6ad3917e2049a6a77b686fb70b6e9f6001c2732a48996f033610", "nonce": "998", "params": { - "mandatoryKeys": [ - "+a76706348ab4507e03212e2642d8e7f3de8c7986efd2f3f84a4ae413800243bb" - ], - "optionalKeys": [ - "+62459e050d2bc6ad1b642065ba0f1d3ec78e1b85746b73b4789892e2ae033fe8" - ], + "mandatoryKeys": ["+a76706348ab4507e03212e2642d8e7f3de8c7986efd2f3f84a4ae413800243bb"], + "optionalKeys": ["+62459e050d2bc6ad1b642065ba0f1d3ec78e1b85746b73b4789892e2ae033fe8"], "numberOfSignatures": 0 }, "signatures": [ @@ -3739,9 +3659,7 @@ "21ca2db1bdf899c31e79cb31796165801968f8eb00e8a3bee5dd19ce45ed4c4c28cf09f4651e45013187cf46c1eff20a0ece2972580d31501bee738568b741d3", "999b852c3287df52512462540e09efb04c4aff3a2855ea480db8bf4040c2aff606ffc4e9007408c592d29a0325a35facaad65f0dc851e785a35e5827f23e535a" ], - "optionalKeys": [ - "+90616d7eb1058623320c4752c1b3ac405210d0cbc2f957c2c9fbb0af4e7bd632" - ], + "optionalKeys": ["+90616d7eb1058623320c4752c1b3ac405210d0cbc2f957c2c9fbb0af4e7bd632"], "numberOfSignatures": 4 }, "signatures": [ @@ -3974,9 +3892,7 @@ "senderPublicKey": "1104638b78f219f03d9ffc0d3b6fadfbea98adec78dde72506c41304bdd161d4", "nonce": "499", "params": { - "mandatoryKeys": [ - "+d33760fab9c265806dca12478478a9e89413f07451875df558eefe5686b7eda7" - ], + "mandatoryKeys": ["+d33760fab9c265806dca12478478a9e89413f07451875df558eefe5686b7eda7"], "optionalKeys": [ "+837aeaf91c0dc9fcd8293d9659a51fb9c776b8a397f880cb5e000f07888adcd8", "09a5cde0eba41e0bd1adf5a272974776aebe9bbc60edb3dd2dcb01eb25158d94d885e5faa0922bb43f4f66188cd14aca16ed9871ac69e1117f412ade3e9ae97d", @@ -4040,9 +3956,7 @@ "+aadaf68b45aa5a7f33ca8819ed800a24481d1cd0fbf144e927714e137167ee78", "a07d187090c089b400d1d0629a86ae5a3ba547519c619bdc43d3b2ac256c1adc9877f6d4e9ed563461cf39efded5211e8ea440fc992748c329b9edb14e72f4a2" ], - "optionalKeys": [ - "+a66d8260ececed605d365bc87dbe4bc66e21b60ce581fff7356c378f7abd6d57" - ], + "optionalKeys": ["+a66d8260ececed605d365bc87dbe4bc66e21b60ce581fff7356c378f7abd6d57"], "numberOfSignatures": 2 }, "signatures": [ @@ -4116,9 +4030,7 @@ "senderPublicKey": "3c11b72586f084dc3cc0bdfb4423484286f168f75635fd472d03c521c7d61ac8", "nonce": "975", "params": { - "mandatoryKeys": [ - "+d362ee42938dab75f6af09be6a784bb90232707b8635d99f50159ac0398e16dd" - ], + "mandatoryKeys": ["+d362ee42938dab75f6af09be6a784bb90232707b8635d99f50159ac0398e16dd"], "optionalKeys": [ "+f4fc8188a9dc4a70736d6733a99e4706ddc338fe4207c38301c9cec31c540955", "f27bc88f252e0f7258306e6391d64124d8424b7545576e991852f70f0ada4ff4d531ce6bf867171cac3f91f64f656b392bcc95dfffbe6cf5c573865ff71e7c86", @@ -4184,12 +4096,8 @@ "senderPublicKey": "4d15bfb6556d5cb3cce27a54f45cf883b01cbe028497fca0aa4ed223dd83c87a", "nonce": "306", "params": { - "mandatoryKeys": [ - "+856199f53e410844833a58c96570d35a22b03af2804118093294ecd0626e023b" - ], - "optionalKeys": [ - "+66554a6c3b217fb6e6418b24d76fc186bfca18c194b513d3601b7a99ebd1541b" - ], + "mandatoryKeys": ["+856199f53e410844833a58c96570d35a22b03af2804118093294ecd0626e023b"], + "optionalKeys": ["+66554a6c3b217fb6e6418b24d76fc186bfca18c194b513d3601b7a99ebd1541b"], "numberOfSignatures": 1 }, "signatures": [ @@ -4821,9 +4729,7 @@ "senderPublicKey": "eccd45048aad8172990af572beed7e2c26f8bedf583a9aad10da34b6a264c03d", "nonce": "275", "params": { - "mandatoryKeys": [ - "+e8f4dda04ebe3c22a5cd736056e906daa8071896eec60bcda1b69bfd95e1027d" - ], + "mandatoryKeys": ["+e8f4dda04ebe3c22a5cd736056e906daa8071896eec60bcda1b69bfd95e1027d"], "optionalKeys": [ "+aa8f8ac0c2a3f3db73d6dfeb229914647a4b9f3df71e60c3246007dd4031e414", "72f2fcc469ae4f7f3d209ffee3136af4e2c2692644374e6f69b7224a976de57cb52a9e0543d71ae346cd20d37bc4d0626649f99de5b4cb1207451bc2c98780db", @@ -4981,12 +4887,8 @@ "senderPublicKey": "57af0ac10802fd8106a482f52124888e142bbc0bedac133f32307fd49d221523", "nonce": "197", "params": { - "mandatoryKeys": [ - "+04ccb74fc525a63100c23832e89ac51514df3dfb401a671b31a2247de90b5799" - ], - "optionalKeys": [ - "+4beb0e805ce6b2d083079c181ae86e05522dff4f5632a1447887aec0c2a9a6f2" - ], + "mandatoryKeys": ["+04ccb74fc525a63100c23832e89ac51514df3dfb401a671b31a2247de90b5799"], + "optionalKeys": ["+4beb0e805ce6b2d083079c181ae86e05522dff4f5632a1447887aec0c2a9a6f2"], "numberOfSignatures": 0 }, "signatures": [ @@ -5081,9 +4983,7 @@ "senderPublicKey": "145086d751b0cee4ee558b0ef9276d98856038abac6ad047c3d124c34ebb8d95", "nonce": "857", "params": { - "mandatoryKeys": [ - "+5afb5cd22fe084dbb7ef3ca6fe7e30729d6bb52f6ef0bb4e956116aa77731afa" - ], + "mandatoryKeys": ["+5afb5cd22fe084dbb7ef3ca6fe7e30729d6bb52f6ef0bb4e956116aa77731afa"], "optionalKeys": [ "+0591e0d47fea4e136c7f42bd77554bbae091556549beb5294aaa8d68cd5387c8", "d49c3ebf8c42080a6b83b101906176d065582dc397efd56df68058790f40a16236254c0034597915dd70f9cfeb635f9f70d2a92e73db95a867c215a73b2013f7", @@ -5226,12 +5126,8 @@ "senderPublicKey": "a95ac6283b1992d0c354c04a19d73f566bd23e5febbf4029d79e0991ad010de1", "nonce": "208", "params": { - "mandatoryKeys": [ - "+19d6c05e4080738d866991673ac8f2dfb61ab651d646c3efd90586d554a3ff00" - ], - "optionalKeys": [ - "+b3445c78970224e9a6e8f2e3499dcb0447d2eaf99eaf2d94e72038622b4cbfdc" - ], + "mandatoryKeys": ["+19d6c05e4080738d866991673ac8f2dfb61ab651d646c3efd90586d554a3ff00"], + "optionalKeys": ["+b3445c78970224e9a6e8f2e3499dcb0447d2eaf99eaf2d94e72038622b4cbfdc"], "numberOfSignatures": 1 }, "signatures": [ @@ -5248,12 +5144,8 @@ "senderPublicKey": "9e3f8c11451225e313dcf3f39b194182d322a98cb0e4096658501f654666aec4", "nonce": "102", "params": { - "mandatoryKeys": [ - "+4e5628ad57c7fed01af256341e5f85a4a612d02351c34c70b856fc40cd3dc339" - ], - "optionalKeys": [ - "+3057d39aad58bf002827f7d15397fbfe82e5c3e84892791c138a94fc27c472f0" - ], + "mandatoryKeys": ["+4e5628ad57c7fed01af256341e5f85a4a612d02351c34c70b856fc40cd3dc339"], + "optionalKeys": ["+3057d39aad58bf002827f7d15397fbfe82e5c3e84892791c138a94fc27c472f0"], "numberOfSignatures": 0 }, "signatures": [ @@ -5488,9 +5380,7 @@ "bc85e09044734a23b4758f3128a5b3ba25ac0a2d120d9044b29e4b0afa290503f6fbab48f36dc3a641881746e79adae6f1ac63bf9506c423ef472d5d40ea1b59", "3e122c8a488e1c70a4b1ed4f7e1d6c06dcb07e7e9d4e193e64672159468bdd815adfd1fc7f1fe27be7a446e03fc3f27f747a2dfac150c3f9d75e5ae0d3f5f470" ], - "optionalKeys": [ - "+d5d28b432acf22381e6ea84747a2162301f455f88c4bec64abc963ccadc34fd5" - ], + "optionalKeys": ["+d5d28b432acf22381e6ea84747a2162301f455f88c4bec64abc963ccadc34fd5"], "numberOfSignatures": 3 }, "signatures": [ @@ -5665,9 +5555,7 @@ "26c20eb0233c756729d2758130e23dc7ad90830239bf93a2606df22659940e2dc07da2e9947abb5b0a9fb6eb0914eab3585bd44817893c89b591f32cca2d8748", "2f362952b5bb9e8c54254e29320fe5b8684a80a79cd6b5d21161f3c7ff87d9d29d605f9f488bb90cf954e74d2b9cc96f21448085f604a5b970e9410be8351965" ], - "optionalKeys": [ - "+58b227954d9300c8bab8d7974d865370890fa5a6886550ded2e38b9b4cb2155a" - ], + "optionalKeys": ["+58b227954d9300c8bab8d7974d865370890fa5a6886550ded2e38b9b4cb2155a"], "numberOfSignatures": 4 }, "signatures": [ @@ -5735,9 +5623,7 @@ "+75cbce937d22cd9d0692d72f955283a6e318c6dfd95af1afe46cfd70eba0596b", "9f69158c95fe41da019bf3cc932b1f95fdabe1505d01cb7225e86a67798beea194b23ba7426bb4ed959a323737aafe7545e77c138b456e9bdeacd241df283cbd" ], - "optionalKeys": [ - "+64fa057374f63ea71cc5a28e635167d2698b23b08c2025ae87225eec1824668e" - ], + "optionalKeys": ["+64fa057374f63ea71cc5a28e635167d2698b23b08c2025ae87225eec1824668e"], "numberOfSignatures": 2 }, "signatures": [ @@ -5957,9 +5843,7 @@ "56b1fe62b1e257c6a6ef87a7187d184e53d3728d3e33d891fa95de6b156df542a0c2d2ac0a9e9e89fd15d67ddd065b09cfeeb34c124e1579338c0a435930a509", "4faf519d558d69833fa06aa11819903be55ba65462aac89f6384c2538b69031053d1cae1e06be70cd77a783f5b6ce8bb320017a30027b395827bc99d6efb584a" ], - "optionalKeys": [ - "+e52edb7f533342fd5963cf4a537f735104e963a71d953644470069f219fd5c85" - ], + "optionalKeys": ["+e52edb7f533342fd5963cf4a537f735104e963a71d953644470069f219fd5c85"], "numberOfSignatures": 4 }, "signatures": [ @@ -6191,12 +6075,8 @@ "senderPublicKey": "b320fb24d186b36eca8b7e60b6e9ae5a562cc2926211bddb59701b5ac08566ed", "nonce": "560", "params": { - "mandatoryKeys": [ - "+eedb4dc95458011a7b1d4903707070e4441df6102208ee1b65e576df82346f5e" - ], - "optionalKeys": [ - "+ac928317013339f428677be21cf8adcf419f6f1865eec216ec00f05c291f093b" - ], + "mandatoryKeys": ["+eedb4dc95458011a7b1d4903707070e4441df6102208ee1b65e576df82346f5e"], + "optionalKeys": ["+ac928317013339f428677be21cf8adcf419f6f1865eec216ec00f05c291f093b"], "numberOfSignatures": 1 }, "signatures": [ @@ -6340,9 +6220,7 @@ "8d1c2211126552a6c0adf7d64bc463113ac7daac7c3d04ce3f732929cf7be5b2236b971091d4a9f50a6416b93d8585f9cfb6d0c6b88822181cef32f4e863e198", "536568a1ee81f932382b17a65c956a2f62d030436fffdfacfbf548c17acf881210c1016c0fd3243345e74af15311025927fe4982a31f79f2c2ca6ee06df74009" ], - "optionalKeys": [ - "+8a6699ab626721db3f513e8bc8cdfb0420df02aafe9a6b54a7d4449f3b2562ea" - ], + "optionalKeys": ["+8a6699ab626721db3f513e8bc8cdfb0420df02aafe9a6b54a7d4449f3b2562ea"], "numberOfSignatures": 3 }, "signatures": [ @@ -6403,9 +6281,7 @@ "f0ca746672f1c4078654af92089193cb6ec3ffd31c97641d49e6f9bbb1a85d275cff58bbcde34ffcb6c7630d4681423b300ea7cc727cfb7333ab0cad1d5251ea", "4757bebf4d6542bce4d5873065d2d0bda9f5212c4b6f22a33d4b29466900d24a051a559e45c4ad6fccc5098bc7106dfd35fa667f868f2d8f873b31b463b041f8" ], - "optionalKeys": [ - "+f9b7180c282fce143d2c6035698919007b3e01e894b5f90ccbdd2303bec22407" - ], + "optionalKeys": ["+f9b7180c282fce143d2c6035698919007b3e01e894b5f90ccbdd2303bec22407"], "numberOfSignatures": 4 }, "signatures": [ @@ -6847,9 +6723,7 @@ "senderPublicKey": "b658f6dd103e26a56be929fb39428be9cf8f1cbc92c682be9f0836125754245b", "nonce": "739", "params": { - "mandatoryKeys": [ - "+57bdedfcfa3962b8111a3cb817329e1384de671bd96646820f2db848f3851380" - ], + "mandatoryKeys": ["+57bdedfcfa3962b8111a3cb817329e1384de671bd96646820f2db848f3851380"], "optionalKeys": [ "+be1ecd0c6a2a99e0f9899d8303214b0298ff4fa163be5ef3d6939689105ac4f1", "8d9d40ffdad6527bbaa07adc083bed8392412c28bc9039613b51764ed2abb46215a63372a05ccbf792b8fd11c61eae549360804b171e4c2893a60e2ac6ffa4b8", @@ -7293,9 +7167,7 @@ "senderPublicKey": "1bace4187e1797a7e7c19b23f5399825dfc6f3597c647c83462edf2f1e875b86", "nonce": "235", "params": { - "mandatoryKeys": [ - "+c158f29d1848ff1a76d0a1fe6a99e9c53c787dc073ab3e6a8985a679561f2a52" - ], + "mandatoryKeys": ["+c158f29d1848ff1a76d0a1fe6a99e9c53c787dc073ab3e6a8985a679561f2a52"], "optionalKeys": [ "+4eae95428ee18a34da13a4e9e3e9c255011f8ed3ca337eed6685ff62c0ecbf11", "7364636c6c4bdd86acd2dc711aa705f06bee11c2f2c77e319f65593a4c9b534ef53ec6d470bfd2b47e747a98848a0481f005a12f4fc0f6b59afdfa7a858c7c7e", @@ -7467,12 +7339,8 @@ "senderPublicKey": "8087dc76f3db3e767b4b05896ee15b7363e76c8dbadd133dd5f5e7b3fc496763", "nonce": "94", "params": { - "mandatoryKeys": [ - "+81a4969edbbebb9d4119f067517f83758c848e4c2ca38912197e27279c5dccdb" - ], - "optionalKeys": [ - "+df60ba5927b1961d44b5c531860d3fda93dfbd9234778505cdf3ad37620224bb" - ], + "mandatoryKeys": ["+81a4969edbbebb9d4119f067517f83758c848e4c2ca38912197e27279c5dccdb"], + "optionalKeys": ["+df60ba5927b1961d44b5c531860d3fda93dfbd9234778505cdf3ad37620224bb"], "numberOfSignatures": 0 }, "signatures": [ @@ -7565,12 +7433,8 @@ "senderPublicKey": "af2505ae6b833be9e6c2c4966d68209db87b1cada76ae0451bd0af8f04bbc114", "nonce": "835", "params": { - "mandatoryKeys": [ - "+8f850b670a59d170ad44498c493a204991697f5dd8b7c9dc2bf15bee600c8845" - ], - "optionalKeys": [ - "+5ad0998d24db37e59dd1c58502c2aa4fcbf9379d9d3f996ac10ab5337442fe70" - ], + "mandatoryKeys": ["+8f850b670a59d170ad44498c493a204991697f5dd8b7c9dc2bf15bee600c8845"], + "optionalKeys": ["+5ad0998d24db37e59dd1c58502c2aa4fcbf9379d9d3f996ac10ab5337442fe70"], "numberOfSignatures": 1 }, "signatures": [ @@ -7646,9 +7510,7 @@ "senderPublicKey": "ffc14961d6705096f455665ebad397659cacbba4534806a874739e42632a15b5", "nonce": "259", "params": { - "mandatoryKeys": [ - "+6665cce3081fcbc591f7ef069e2177e692964fc1650ee7ef8580ac1300b0c7bb" - ], + "mandatoryKeys": ["+6665cce3081fcbc591f7ef069e2177e692964fc1650ee7ef8580ac1300b0c7bb"], "optionalKeys": [ "+62a602a75a00a7f16a675174e42c46a2f6641d317f2a1b6458950628074fd9eb", "c60cc5af250ce6b93c10f884d3303a5e217462387316577a139c304c499f50dfa008ab44cd70b33e9f4d5450d8313afd83845dc56ac60d4b95e0be84f3bd38c6", @@ -7730,9 +7592,7 @@ "senderPublicKey": "8156fd17ae1c981d02ad7cc74c0c18a1ffd0238bc15fd3c56ebcf0910d82c4a8", "nonce": "309", "params": { - "mandatoryKeys": [ - "+3130bebb1a2b96773a038c660d0846555f25e8a34328bc458fca26b0658baea3" - ], + "mandatoryKeys": ["+3130bebb1a2b96773a038c660d0846555f25e8a34328bc458fca26b0658baea3"], "optionalKeys": [ "+86bcd096025a14f70e56981df0bbf63b31bba48bb99a32b434a6fd9311749f26", "aa4300576cbc8a8ae35f7ded1dad64dd4d167893d5687f9df029816c95df32914e9a07679ace3d06d88117bffbd67985d85cf3f9014074d6b0dde4ebc6bbb1cf", @@ -7754,9 +7614,7 @@ "senderPublicKey": "5d6bdd96d93e03d529058ed57f9b506bcd47068d6312af4583241617a61a46ab", "nonce": "585", "params": { - "mandatoryKeys": [ - "+8dff69c8d1823a18bde73cdb7cbfe2d300fb23ff4e9ad7c7a4c3c3eae5e5b390" - ], + "mandatoryKeys": ["+8dff69c8d1823a18bde73cdb7cbfe2d300fb23ff4e9ad7c7a4c3c3eae5e5b390"], "optionalKeys": [ "+a12e644a3adb94cfeb7c692d579a0882dbee8e28ceeb69115312b3569945b512", "fa2e5fe1f3e7a559e0694e66bf792e38f4d98457b55b87bae900df5a3132df088264b8e2955258fa0ba749eb3bda4f7b358f9d81ab9a8bb0fecdc11abfa607dd", @@ -7973,9 +7831,7 @@ "+faddf30e897c5b5a8ef9393ad656d73263b5de5ec29e163dc25093898ae642a6", "cff357f28063aa11417e42023265b95f9b13b9e33df536d095452e34fbe584c1aba0042acc4445e6f73903020eaceff17ec191e66cf41f4d668b2b4fafa39e22" ], - "optionalKeys": [ - "+1f47bee96262de76d41b02e1952af47ad516f256af50fd970c101b79b68e1866" - ], + "optionalKeys": ["+1f47bee96262de76d41b02e1952af47ad516f256af50fd970c101b79b68e1866"], "numberOfSignatures": 2 }, "signatures": [ @@ -8331,9 +8187,7 @@ "+a7ac90f71b22bbfb67485569a6ae436e582a50789c96228c850e849549829e05", "6484bdd03eaf168e15892eca0a0a222034d458dbc6b475a2b08db5d22fd3c2358df62d4d47293cc98921bc175dbe8ef406a8852df81896c3f6ee1136e536e328" ], - "optionalKeys": [ - "+72b4db01a651d3928b3211328345a3ad46bd7fe14ce2a7fc8a660b6939d061e2" - ], + "optionalKeys": ["+72b4db01a651d3928b3211328345a3ad46bd7fe14ce2a7fc8a660b6939d061e2"], "numberOfSignatures": 2 }, "signatures": [ @@ -8375,9 +8229,7 @@ "+4e2344812f1dccc727c605e88b5641e289eb90047055fdb000f4669e98edbaad", "f941ff81802ab142a59a51eb84085a615be2ee3a207655f4eaa361b4fbb19760349662219354ed8ae9948ed6d686c39a373403680cddf0e36f5995757df09e53" ], - "optionalKeys": [ - "+84d4b0a94f4489e5fbe19ae1e9d9773ec900224da876a72350311f827ee5d882" - ], + "optionalKeys": ["+84d4b0a94f4489e5fbe19ae1e9d9773ec900224da876a72350311f827ee5d882"], "numberOfSignatures": 2 }, "signatures": [ @@ -8415,9 +8267,7 @@ "senderPublicKey": "f5ac9b21d1f5ac6b85e2fad3d91131e82d1b047ce44db7749d4bedf20a89860f", "nonce": "667", "params": { - "mandatoryKeys": [ - "+d67b9cf705054391953e7b42d8892f553a0a6a0e1b1154cbc1c128590bc62297" - ], + "mandatoryKeys": ["+d67b9cf705054391953e7b42d8892f553a0a6a0e1b1154cbc1c128590bc62297"], "optionalKeys": [ "+29a8ff108d5214d5ec19b0353fb3e53ea987fbb0252dd97d0f822674f321fecc", "65ddf3fdc2239f38ac96a5e9cc9df7a76531c76b0979e0d17153a3e725558f990db508ec89529bf7cecdfadc49b631a25777457b846cee415a12a9fd00350527", @@ -8512,9 +8362,7 @@ "f3741c079fb0a67f91cde3f30244406782699e2708cf9cf69c68f8d4124ddec9d05bb8d06b1be6bdbebc9f8c91bd2304037bb8de22e5de768f59ac0e0f251c1d", "62cdb7eae1e22e4721b0f611c547f4d10f2db4a8d2a5474e3d8e77e9bf876bc6ee4e19f54253abc33795aea5843825f2b90427cd0b4b5e2e2ba36ecb795f0fd7" ], - "optionalKeys": [ - "+08c060f3720ad26caed3cf54a59eeaef928449b4a93fbb156d589c9046973a40" - ], + "optionalKeys": ["+08c060f3720ad26caed3cf54a59eeaef928449b4a93fbb156d589c9046973a40"], "numberOfSignatures": 3 }, "signatures": [ @@ -8537,9 +8385,7 @@ "dfde9f296837adc0262b334e6c994a64e85d0a7be1c292af0e6ee806a165e278a06150f24225c2bf3c748004d982b64376c07ad1bdd4d379165ab8155eb515bc", "9a36f7815a8a2763d692c73104316019d77c2bd8b145d4b44d47b6be98a8816b22331edab5598a246ab503b4eb0681530df8c424ff682daed2a34d5894945824" ], - "optionalKeys": [ - "+dd5791a9913241e4d304f1bd261834516094e9d12fa107325de9288b8e97522c" - ], + "optionalKeys": ["+dd5791a9913241e4d304f1bd261834516094e9d12fa107325de9288b8e97522c"], "numberOfSignatures": 4 }, "signatures": [ @@ -8622,12 +8468,8 @@ "senderPublicKey": "9c004e6c69ba5991a614d13d4c8beca6a57e90aef21351893989bd17d0f09484", "nonce": "267", "params": { - "mandatoryKeys": [ - "+c418f62c60bb90273e9facf16187ce271d11d917abe89e6238d69cf70e432d2e" - ], - "optionalKeys": [ - "+939e90fa0dc2fe3ea0cc61374922627f523abbdee6cf13b45723bec86c0b5b55" - ], + "mandatoryKeys": ["+c418f62c60bb90273e9facf16187ce271d11d917abe89e6238d69cf70e432d2e"], + "optionalKeys": ["+939e90fa0dc2fe3ea0cc61374922627f523abbdee6cf13b45723bec86c0b5b55"], "numberOfSignatures": 0 }, "signatures": [ @@ -8701,9 +8543,7 @@ "senderPublicKey": "b00c07eede40324dda421977dea940c5299e76b6f65bf23f49cc5f7fd9d9fd50", "nonce": "148", "params": { - "mandatoryKeys": [ - "+8fe8fb6d9f073290f02cbf7bbcada23712a64b442dbd2c057ad620f743532605" - ], + "mandatoryKeys": ["+8fe8fb6d9f073290f02cbf7bbcada23712a64b442dbd2c057ad620f743532605"], "optionalKeys": [ "+50cb686a653d983546bd35c1ebff064cdfc6d38f58608657ced443fcf3b61ac8", "463651f222835e4a45faffd64a533a8d83d0eae2470f4fbaf6c35ec0d09995344f58597e98218e1f2ee096e7f3d1a138dc48d33f804af1ec301739a5d43cf728" @@ -8788,12 +8628,8 @@ "senderPublicKey": "b894b8b2607068aeae05689ca6d363922e96c514b027a2cc2ff84e5a15bbec06", "nonce": "925", "params": { - "mandatoryKeys": [ - "+df0006ccbb7f9491268f74eed58b31bc1d1a9fc614d64590c7025730ae7f3e6d" - ], - "optionalKeys": [ - "+e262704a9dcde61cdec6c533fc1735bb166d72f777915c23b1afd4a51ac716f2" - ], + "mandatoryKeys": ["+df0006ccbb7f9491268f74eed58b31bc1d1a9fc614d64590c7025730ae7f3e6d"], + "optionalKeys": ["+e262704a9dcde61cdec6c533fc1735bb166d72f777915c23b1afd4a51ac716f2"], "numberOfSignatures": 0 }, "signatures": [ @@ -8859,9 +8695,7 @@ "+a8fdd98bc639bfb9d5be563dbd249b4ed471d3e229576a5d33c3c6a537cc61ab", "cd45743ca2eff3fc8a6b13831d595ee9d37670baa7b3320cd707f7b58be7138d841a121e77154bdb40cc7e3b28f6af15647144eccf5027d0e2ce7c51ddf9ea38" ], - "optionalKeys": [ - "+06f50caac65c4d2968d0577b40b12490d27a280247bb39e82c149d604bf1ac60" - ], + "optionalKeys": ["+06f50caac65c4d2968d0577b40b12490d27a280247bb39e82c149d604bf1ac60"], "numberOfSignatures": 2 }, "signatures": [ @@ -9002,9 +8836,7 @@ "d43a8238429f20bf91fbfb9b5471f2b9c31f786f2447e2be2117c3c8a3cca7093849d5d81c36c069c9a81b8504a8e46c68c0dad154f8beb571f7dbfae040f17f", "c03cddb098205c9b4a195dac85670113b9bcfec91ae6a9be949a07fc2e91cd06f41a9db93ee7ec21ea92c9b36636bf48e645b8a54f6a4c8674fc0e763ea041ad" ], - "optionalKeys": [ - "+4d467ff0082665421c6339eeaacf92dcdb8baf343937a7b026408f259d7650de" - ], + "optionalKeys": ["+4d467ff0082665421c6339eeaacf92dcdb8baf343937a7b026408f259d7650de"], "numberOfSignatures": 3 }, "signatures": [ @@ -9038,9 +8870,7 @@ "senderPublicKey": "cf5ca8633d9da66fd3b90d293570a3935017842ac6465b0f47648f2846ca5110", "nonce": "258", "params": { - "mandatoryKeys": [ - "+3aef4b5ded433429c1703ba9b8c4ee0c99662364732df7cc1908d5b6471d9bde" - ], + "mandatoryKeys": ["+3aef4b5ded433429c1703ba9b8c4ee0c99662364732df7cc1908d5b6471d9bde"], "optionalKeys": [ "+cc21372f0887371eb62b6ece0358f1b8bd8457970598556bec78cc5d6b4dc480", "687b51081ebeccaa0db0664cb396a3acec97e48a4197c4a6a60b0f17d109bc7b39b79056edc1c95563a12de759159d045c3674a9899dbd1d188ec6726e94ae76", @@ -9122,9 +8952,7 @@ "senderPublicKey": "e3dead925074d302648c06c9bdb5819f2baedbc75e15b058672834cd887c168a", "nonce": "359", "params": { - "mandatoryKeys": [ - "+f5d8f8830e9737abf0f8deec5893d274fdbf2e69609d4d4de11f10609bdb1324" - ], + "mandatoryKeys": ["+f5d8f8830e9737abf0f8deec5893d274fdbf2e69609d4d4de11f10609bdb1324"], "optionalKeys": [ "+f1df498392300939533269afcb5a3cf4eadd44c252ebe9e2e7ccbed9ca3cbba4", "91709f66dfc7db5f4aa5a9be398d64b7534fdda171e28c74365a6f64b96682aa43c29636aceb94cb233cc36e964bf8657d3406912af0b7883c3718f0c9a2322a" @@ -9179,9 +9007,7 @@ "senderPublicKey": "ffa14e27013e1274dcc77e91bda400dc7e31ed24f6217a302cacb1064aa2c06b", "nonce": "831", "params": { - "mandatoryKeys": [ - "+285f33a8a9bdf11cd363e07c765f243d511c9795e499768f419186086421e8a9" - ], + "mandatoryKeys": ["+285f33a8a9bdf11cd363e07c765f243d511c9795e499768f419186086421e8a9"], "optionalKeys": [ "+8a9bfcdd2f58e0a0cd2da58fbc77a9341640af41f1209df8db3b9073038f7f7d", "ec52c13e6bf4281b266a1dda17f1f0e3dee4442c358cf67f55d2738b41de0dced0160eb44b52a8abc2ae8a6e6f0ff3b1bb5a8314ac57f0f43680ddd0122dbadd", @@ -9269,9 +9095,7 @@ "senderPublicKey": "e5b77bf95dec6de1274f18142cf927d2c5c4fbdbab9f92fb0678d1699a30e85c", "nonce": "429", "params": { - "mandatoryKeys": [ - "+0823325faf86e0c7af29e5cf65dab0032497bfbc5272adb08fa1724ac8f3cda3" - ], + "mandatoryKeys": ["+0823325faf86e0c7af29e5cf65dab0032497bfbc5272adb08fa1724ac8f3cda3"], "optionalKeys": [ "+1565c5bc8c4a243cddbad70e783362536948625d0f258a046c1efe5e843dd1a6", "b91ec88e26f24219b20d706d487f7049cc36e09c0761e53eafe33bc46921959e48383645ff3197c5e3685cfa1df9bffc11253dd43b9ee82d3efe447b38f17e7b", @@ -9357,9 +9181,7 @@ "senderPublicKey": "2cb1a9f5bd13887c4add7e010b2590e7d37b18f605a064f76f09e82344d6a804", "nonce": "500", "params": { - "mandatoryKeys": [ - "+1cff1036e765d6128afb7511b48453784fb896c806066f6d19f69afbad85cfcb" - ], + "mandatoryKeys": ["+1cff1036e765d6128afb7511b48453784fb896c806066f6d19f69afbad85cfcb"], "optionalKeys": [ "+624e782d72104016a03c9387e45366c54a901e91ce40d6dfcd5c847a19dc72ce", "36e8227efc092b2ab2575485241492a91d424008c430c09480dc33a2ec91af42baa6e74f3f90c4bc2eb4e676bd1c4d619cea8c7a6785a60037179fb92e4616f7", @@ -9488,9 +9310,7 @@ "+1e55d31d18a50b000097a52cc90b4d28eb42a26ebc05659b97ad5e84e4a2ebfc", "0463faa5585c43f0dda05d236e03a9d7c15a6b4a5ddbfcf9ca2e6b16fa50e1c813b20a43a0b4dc435c06f6b6152a715a2bc09f266bc63f35073f6155605654ac" ], - "optionalKeys": [ - "+eb55eda9b5ec836be70c901efe93bdebab339e5ea202eb93f3dac0f3d149d98d" - ], + "optionalKeys": ["+eb55eda9b5ec836be70c901efe93bdebab339e5ea202eb93f3dac0f3d149d98d"], "numberOfSignatures": 2 }, "signatures": [ @@ -9551,12 +9371,8 @@ "senderPublicKey": "b833d35118e3a87838c263b1ca36c88b82e441225d9be57c160f98b691bc1135", "nonce": "669", "params": { - "mandatoryKeys": [ - "+5ac1e4656450fd11125b907ee1a71fd8fd735dd2ff2dc7a45ee1632b9902b3e6" - ], - "optionalKeys": [ - "+62df21bb65df8ff737e79d0d50801b983eb43fb1e4ba94e9dbdb86741692242f" - ], + "mandatoryKeys": ["+5ac1e4656450fd11125b907ee1a71fd8fd735dd2ff2dc7a45ee1632b9902b3e6"], + "optionalKeys": ["+62df21bb65df8ff737e79d0d50801b983eb43fb1e4ba94e9dbdb86741692242f"], "numberOfSignatures": 1 }, "signatures": [ @@ -9718,12 +9534,8 @@ "senderPublicKey": "0be51975b3aaa9b88fed56d3b4e519f4f744ff7b7806c6cc1eafc0a6a7943260", "nonce": "238", "params": { - "mandatoryKeys": [ - "+33734a13d12fdd20b4b35df78cc6bebb0c7ea67c3ac518871fc8d6ea45efd397" - ], - "optionalKeys": [ - "+bf80a819d5795733d02b053b4f42ad612fa13be1f845a4f9f966db37a260bc7f" - ], + "mandatoryKeys": ["+33734a13d12fdd20b4b35df78cc6bebb0c7ea67c3ac518871fc8d6ea45efd397"], + "optionalKeys": ["+bf80a819d5795733d02b053b4f42ad612fa13be1f845a4f9f966db37a260bc7f"], "numberOfSignatures": 0 }, "signatures": [ @@ -9831,9 +9643,7 @@ "senderPublicKey": "a951e1019df785b0525fd982ac1391418614fcbe204b7036ea3e2e51e0e78dc5", "nonce": "744", "params": { - "mandatoryKeys": [ - "+f3ecbe25edcdf7f45fd232e698ee9b2966dfbf575dd74e39365199ec54cff287" - ], + "mandatoryKeys": ["+f3ecbe25edcdf7f45fd232e698ee9b2966dfbf575dd74e39365199ec54cff287"], "optionalKeys": [ "+f43e6cf42ae7d950f8758a9512dc8b2b0a21e05ea655a784f3ab444470963b43", "cddca8a654be73e4315d702a9ceb4d10408adb057cf264f4139529a191cbe6e4f164ac6f96a0ca41df864f897ec8f46f63734b3dd44dc7eb2b4d7208cd412835", @@ -9971,9 +9781,7 @@ "1556a8534933eedba37992456726f16d8f499e5df93dbbfe00986c5ff0a65340fc565baf698128e856d3522448d4d73f660a8a9bbf71a8f3a55c7d98eb34cd54", "b097b488f0fe4684fbed71823eabe97a43d98797eec857ce648f381972aefa26b5a65cc03be014fae9b9a5ef77e3cf20a4050fededbc0603cbf7b17aaa831290" ], - "optionalKeys": [ - "+b51ce3e4d63610fd664b573f3912408ddde7751eb8e47b87720c96d567c916a5" - ], + "optionalKeys": ["+b51ce3e4d63610fd664b573f3912408ddde7751eb8e47b87720c96d567c916a5"], "numberOfSignatures": 3 }, "signatures": [ @@ -10106,9 +9914,7 @@ "d9dbb9a4771baeca86f96e8016325e19e0e39d3d7da7ccd546e6acdbae4f5d8f5122d0eff6fba5685c324916f8c5545c6f58b13060b0e9c9d76491e0d796f04a", "52a94154b7be06229aa0ad00ff2768ac83c151a94116875a02deeee056dd3a62ba4aee1383994d8dc13a1c3aed7ef09f432e496110cb2a74ef607b9fc25d9a0b" ], - "optionalKeys": [ - "+36110f3472a2196c7d50612a0f5263f34da20ca53fbcef3c451901642c871378" - ], + "optionalKeys": ["+36110f3472a2196c7d50612a0f5263f34da20ca53fbcef3c451901642c871378"], "numberOfSignatures": 4 }, "signatures": [ @@ -10333,9 +10139,7 @@ "46d14b29f0c04ed7c881f3e693221584bb464970bf781647da0d91f4fccff9e58c798e5ccd9bf1919038d5ac8f6b37d370adcc05c991402bb25d2566f5b5bee0", "ba4074bc09127cdbc8c37fc00919bfb18aa59938b21fc1a89c9d437cb92e0fbf48ec694bb127c9960de3971b62e8df4636dbf59f495a6d6e613a385920968c42" ], - "optionalKeys": [ - "+6b46f23aba6a20294aa459cfb247a3446c3691db890f336cf11543493a084570" - ], + "optionalKeys": ["+6b46f23aba6a20294aa459cfb247a3446c3691db890f336cf11543493a084570"], "numberOfSignatures": 3 }, "signatures": [ @@ -10392,9 +10196,7 @@ "senderPublicKey": "edaf29a0468466d0728a12789739848574a2abb7a0f9425f679c1e0850b30f97", "nonce": "498", "params": { - "mandatoryKeys": [ - "+14171b5d40556e511965474f6d9c1bde2c19b09131069af5ca48ce6d6c54e7fc" - ], + "mandatoryKeys": ["+14171b5d40556e511965474f6d9c1bde2c19b09131069af5ca48ce6d6c54e7fc"], "optionalKeys": [ "+37f842b33710fa9b02c8d322ff182549401cbe32fb750fd66f6c0d19b4c88c82", "c153ec786409a30a4a947bf9055285a9f7350ce5d8dfc0e0eb7abf44b26d960281fa5819fe73e72708271ee300f1e124fd7eebb1d212bc6d67c17fc3e353b0e2", @@ -10575,12 +10377,8 @@ "senderPublicKey": "5baa6b16758f0c3807d245e752b64614fe2458a24d8d94ada37d08c55e997f05", "nonce": "635", "params": { - "mandatoryKeys": [ - "+3ed0cf6b9739de8f349c150a324e3ffdc940653a5ecbfa70cc6c2ae4d8e8f634" - ], - "optionalKeys": [ - "+9934743b87f9fc7f57314d15d9e46b656188ffec89a345925dee05f92c785134" - ], + "mandatoryKeys": ["+3ed0cf6b9739de8f349c150a324e3ffdc940653a5ecbfa70cc6c2ae4d8e8f634"], + "optionalKeys": ["+9934743b87f9fc7f57314d15d9e46b656188ffec89a345925dee05f92c785134"], "numberOfSignatures": 0 }, "signatures": [ @@ -10727,9 +10525,7 @@ "03f43d9ddebddadb56320b4b0c7e95c516d323aa98c926953f5c91ad83b5af32b1eb09a55864847af125d9ef34e295cb5262129b4fffd6391a7e1653e77497a5", "acfdfac4558b2ca2e2176a1d6af8ce38e2a9d0f7108f69b83d8645fa4c1cdb4302b632581acece2a502e900ea019d0f0615b386d709c3e828467a27eefcdc7d9" ], - "optionalKeys": [ - "+0c68b1f851d2c49fc7c20f234789d1d476dc899e10cfcb84f3495fd2bc5184dd" - ], + "optionalKeys": ["+0c68b1f851d2c49fc7c20f234789d1d476dc899e10cfcb84f3495fd2bc5184dd"], "numberOfSignatures": 3 }, "signatures": [ @@ -10746,9 +10542,7 @@ "senderPublicKey": "4b22e55e8f757a44b1ebf3086861c2ed88e693be63d9880638b35153195f7755", "nonce": "693", "params": { - "mandatoryKeys": [ - "+3aff629ecc89a59971a7417eab8227138505ddd7b557d0b3f2a31fc8f87869e0" - ], + "mandatoryKeys": ["+3aff629ecc89a59971a7417eab8227138505ddd7b557d0b3f2a31fc8f87869e0"], "optionalKeys": [ "+46d173a6224da150246354a5d4fece299ffd855ff788bc131b2930e579fd8d76", "c8bb145a8ed68467ebd2fc6a61546771bbeb0adc32df65d0fca70997edae8bfc7dac3537ec5d24a25c55a1a3b21686a771b3e2cb5bea22b79aabc178b361c359", @@ -10775,9 +10569,7 @@ "2a18d83a62e635628cd7159c5bee9f00f12a6413238bf85d8969d90e5a5978fe0b2503dd2e3468852de504d41be2b219ef3aada04c82df4269f21a0d93073e9b", "458bd8b2cc90d36c1a99264e4339b065e4c54d7da3f8835e84dabe6bfd5ba7cfb3a3e9a8512356049cac7eb206140ac616187d1d228688a1d88493ff097ec2ed" ], - "optionalKeys": [ - "+181eddb3286be1d620bb8e09d20c11b0c858ff32f05cf0a839033f6c90e61d58" - ], + "optionalKeys": ["+181eddb3286be1d620bb8e09d20c11b0c858ff32f05cf0a839033f6c90e61d58"], "numberOfSignatures": 3 }, "signatures": [ @@ -11018,9 +10810,7 @@ "senderPublicKey": "bc338c263f5f192d9f34c5f050eb9b8406defb49ba1b4228300eea2844000c4e", "nonce": "816", "params": { - "mandatoryKeys": [ - "+cf01f51934ac23c5c33be8fa8bd100bbf1001e67347572812e08fa853be1ecf9" - ], + "mandatoryKeys": ["+cf01f51934ac23c5c33be8fa8bd100bbf1001e67347572812e08fa853be1ecf9"], "optionalKeys": [ "+f894965f0c6a8af2ffef9a2864ab08c2181a119ced10fb4f67ba6a6a5f95880d", "84d2f88ff8565179618fbe36529121475ed4f6ab45ea26535881cec41423d7850568b9efbcf633e4d61201d9ea60c427ef7ae7cdb35fa29d217bf92a0cec765d", @@ -11847,9 +11637,7 @@ "senderPublicKey": "fb1f722d4fed2372ef3f5fbdb1fa422d333d457de5cf63a2004ccff869689820", "nonce": "296", "params": { - "mandatoryKeys": [ - "+405db102469c3116ad42be820ebf5a2f34ea8d182c495933d2bd697139769b24" - ], + "mandatoryKeys": ["+405db102469c3116ad42be820ebf5a2f34ea8d182c495933d2bd697139769b24"], "optionalKeys": [ "+b011e6384e83acf9778c332aea3fe4fe47e5515381087c90e91e8801a83e10e7", "2b13bb556033728f144ee46d6da10e76304582b4cb1583812750e6fc35684fc5b443e2f75aefc2690dc1ce387abecc7cc8ff0b0f11576201d4a4ef47d9ff7087", @@ -12016,12 +11804,8 @@ "senderPublicKey": "492ab3d1b19b118b2fe438ffa489f9147b32b824bb967038b91c1399cce98f14", "nonce": "527", "params": { - "mandatoryKeys": [ - "+3f3ca3738bb5f04ff3878fdbc6a2b285228edfc282fcd7279f865198f8c875d5" - ], - "optionalKeys": [ - "+a4c51f9f0ee37b1d9234276e7c58bdb5e696a26a2d7cb7787f46a04ae84a113a" - ], + "mandatoryKeys": ["+3f3ca3738bb5f04ff3878fdbc6a2b285228edfc282fcd7279f865198f8c875d5"], + "optionalKeys": ["+a4c51f9f0ee37b1d9234276e7c58bdb5e696a26a2d7cb7787f46a04ae84a113a"], "numberOfSignatures": 1 }, "signatures": [ @@ -12063,9 +11847,7 @@ "+34d8e9a6fc2b0d2ccddfc4d9186a49bd533b7f60decc1d9a9764b6b824b0e012", "d245718e5181eca62f82f479b569c02406e63324821f1d56f9204e08c37d68b41bcbe17f7e0e3f04854e52a4525ef31fb7251b525051a03fc050dfc000860c81" ], - "optionalKeys": [ - "+b75db75c292b84f0399604fc327c30bd962b7bcbd6672f1d41b23829eeb16955" - ], + "optionalKeys": ["+b75db75c292b84f0399604fc327c30bd962b7bcbd6672f1d41b23829eeb16955"], "numberOfSignatures": 2 }, "signatures": [ @@ -12309,9 +12091,7 @@ "ed6ab5bf6dac7b149e69185f6f636416fbc897e681a19ac42872f629291373731465a59cb6a9c54a5a51d75cff6a5ed9bfbe84ed1f1d7ed17908e362ed84a661", "71088005d3104d6d39e675e903f4b0116a0edd8d3bb5f1bc34132fc4dfd9b47df2e14938d9a79fa2f752d614f3e0bd8df53a1076ee8d8cf39c19cf9fd16dbfe0" ], - "optionalKeys": [ - "+9f6862d3d5ad266d137f01f59aebe6a7e37128f184276c62342ef23835f8a686" - ], + "optionalKeys": ["+9f6862d3d5ad266d137f01f59aebe6a7e37128f184276c62342ef23835f8a686"], "numberOfSignatures": 3 }, "signatures": [ @@ -12366,9 +12146,7 @@ "senderPublicKey": "5355549750cbcc2b471bea2393ea4e6997ca5cf4e0cb103e6c3cab73de7e7ce2", "nonce": "212", "params": { - "mandatoryKeys": [ - "+2edc4f1523a0fe30a67366fb283fe10f61876e1602bf00aa7be9c9ea3798e8c4" - ], + "mandatoryKeys": ["+2edc4f1523a0fe30a67366fb283fe10f61876e1602bf00aa7be9c9ea3798e8c4"], "optionalKeys": [ "+bec257aa2c615bb6c01eb7055226294872011e02e1c8ca8d2d499abcddb553a7", "2c4bd13af9c7b1e5807b44a326c65c200f4402b8508cd964b66c478bea750115d0c3ba55f28b47ebc25136cacac9bda6a85f94d9d3b944e4c10c1bb54d04a441", @@ -12533,9 +12311,7 @@ "+a660cdfb89c5608906c59b2463ea74f1ed38653cd11eea9f634fc64933c3d276", "aa5697f782af09ee2e48fa580d1a836792421b69367063544c428009c981f90e9f981e652787527159dbe8bbfa6e2a31f0328e61e09509c789ca6508fb142186" ], - "optionalKeys": [ - "+a304ea785a487460b68f9d98c7dd1aec63b1dcc7b4b4a1fb0af0f699a1fd9064" - ], + "optionalKeys": ["+a304ea785a487460b68f9d98c7dd1aec63b1dcc7b4b4a1fb0af0f699a1fd9064"], "numberOfSignatures": 2 }, "signatures": [ @@ -12594,9 +12370,7 @@ "senderPublicKey": "5e682fa5e528444291d1eba9be6ea94c559e280fba45804ec2959bebfeeb0ed0", "nonce": "587", "params": { - "mandatoryKeys": [ - "+dd36b66c5338a77d925f760c79609471fdc49812144422dacef9a6ec67b648cf" - ], + "mandatoryKeys": ["+dd36b66c5338a77d925f760c79609471fdc49812144422dacef9a6ec67b648cf"], "optionalKeys": [ "+7562acdb107d1aa41e0eb4eaec3cce6e27ca4a9876abee287f53237003f3d16e", "ac8f18b921e9015089a08e63f4d2b170ab1b5eeda37e72bcf0029048ecc5114cd11f5cc9d8bc3b7b4c2e6643699e9acc59411f19f203897e8617cc70e088ac61", @@ -12969,9 +12743,7 @@ "+1c51ddaaae1de67c1eb1c3aea67361fd5c9bbab2c75ddd88e2a62aaad491cd54", "c35bd93eafc5dfb1e74fc2191b17ffaff4500e86539674408e27c3b95032a99788fe279673157a534fe78d012004d49f26952a41037bdd56d14e52eae98a1970" ], - "optionalKeys": [ - "+f951f5a9970e0e253924b7a2b83eb1de0a125e03d9b0fc32ebe4a1b9875edcb3" - ], + "optionalKeys": ["+f951f5a9970e0e253924b7a2b83eb1de0a125e03d9b0fc32ebe4a1b9875edcb3"], "numberOfSignatures": 2 }, "signatures": [ @@ -12992,9 +12764,7 @@ "+71a5c014454fc0c2b16a2a19ca192a82e7439c58ea06e2f33bea213350fa78ed", "87c309820689a1e443506d3c235e0b41d4c96c6bcf4bde27889ca27f5d3eb23c5203b96cf1352700b1cc8271364726ca9d8f2572de6a9a7cce0d9187978df871" ], - "optionalKeys": [ - "+60019c0f3b8378fe4c574833c63742efe3d824576e9f9716e0213a9375eb623f" - ], + "optionalKeys": ["+60019c0f3b8378fe4c574833c63742efe3d824576e9f9716e0213a9375eb623f"], "numberOfSignatures": 2 }, "signatures": [ @@ -13165,12 +12935,8 @@ "senderPublicKey": "75a7357f2d627bea38ac929a056c53f08a0881edc18b1b96fe275f26a1543ea0", "nonce": "770", "params": { - "mandatoryKeys": [ - "+8d8c4efd9815758438b1cd762545feb2dd06402d088fd5b5094a9364aa05c444" - ], - "optionalKeys": [ - "+97ae3747c9eb4c22326ba39d7c0785bd1928de43fc1c63c930cd4f6c02090107" - ], + "mandatoryKeys": ["+8d8c4efd9815758438b1cd762545feb2dd06402d088fd5b5094a9364aa05c444"], + "optionalKeys": ["+97ae3747c9eb4c22326ba39d7c0785bd1928de43fc1c63c930cd4f6c02090107"], "numberOfSignatures": 0 }, "signatures": [ @@ -13240,12 +13006,8 @@ "senderPublicKey": "f243be71f80a6e87f5bf5a855de652d1059a19c409244f6750fa535c20d293d1", "nonce": "456", "params": { - "mandatoryKeys": [ - "+584a69b62c1ddd1f81a90205b46c8478665e77048aef86fb41b338349b8f33c3" - ], - "optionalKeys": [ - "+24b8c9339daac483e6d6355015ee97b893f8652b1320e899a102f2d2572205a8" - ], + "mandatoryKeys": ["+584a69b62c1ddd1f81a90205b46c8478665e77048aef86fb41b338349b8f33c3"], + "optionalKeys": ["+24b8c9339daac483e6d6355015ee97b893f8652b1320e899a102f2d2572205a8"], "numberOfSignatures": 1 }, "signatures": [ @@ -13353,9 +13115,7 @@ "senderPublicKey": "60dab6c1d4f9e038df92fc8951de09eade5a316a5cfba99cf74ace81bb485b4d", "nonce": "200", "params": { - "mandatoryKeys": [ - "+0b57995ba0ccdbda43d9b407be2fdc7a19151409b7a4a9c71439451ec890d682" - ], + "mandatoryKeys": ["+0b57995ba0ccdbda43d9b407be2fdc7a19151409b7a4a9c71439451ec890d682"], "optionalKeys": [ "+d93cb87b409f46b41010f43a3352cd6ab09c1fd868ff29c1d5e778a5097d3b6d", "5fe0b73af7efae8bce632acced827fa5668a32ae817aff564be2168f1a03973da31094fb22375c97a1dd81ff5701d35a2d24bef2499f947b4af9637ac29bd6ad" @@ -13412,12 +13172,8 @@ "senderPublicKey": "0cb91ece5e3d8b47ffaa3298003af191df414880b1ed6325fd52b8d5914ef439", "nonce": "257", "params": { - "mandatoryKeys": [ - "+0139d54dd44837c1babd699826d5cba448ee7b623ad89fb975e108f2b9d5f94c" - ], - "optionalKeys": [ - "+361a060af9dcf3c4a72ba5825a6b253bde92111aeb94fa975a65630452e9c009" - ], + "mandatoryKeys": ["+0139d54dd44837c1babd699826d5cba448ee7b623ad89fb975e108f2b9d5f94c"], + "optionalKeys": ["+361a060af9dcf3c4a72ba5825a6b253bde92111aeb94fa975a65630452e9c009"], "numberOfSignatures": 1 }, "signatures": [ @@ -13690,9 +13446,7 @@ "3d9359a1dbd9a30176562811758fa98f904e23744ff0096db4865518de65121b2a1eb487242096b86902b4704b34de49814302f247e766f9ee143d004af37925", "f90036702245b05dbae899abef8d6b0874cc57603943d5026edd86f69dcfbf6260c379ac7c0e153a6c0730ae39b8dde3459cc94e79a4b8c8279f699562224857" ], - "optionalKeys": [ - "+6a5ab643ab80ce0db7f33450713332940881042138ab5f81492cb9e24c207576" - ], + "optionalKeys": ["+6a5ab643ab80ce0db7f33450713332940881042138ab5f81492cb9e24c207576"], "numberOfSignatures": 3 }, "signatures": [ @@ -13785,12 +13539,8 @@ "senderPublicKey": "5850f88e08967e0d6ace723aeef69e9986f90a9dab048452a733e4cc1c8df385", "nonce": "233", "params": { - "mandatoryKeys": [ - "+7469406d39393ba1cc16b6c5ba292a76131b96a39e710cfdcc86ab16c23ebcc1" - ], - "optionalKeys": [ - "+dfb28080f838f9e168a8077eba2fb6eed337c46adec929c4aa432910cdde8285" - ], + "mandatoryKeys": ["+7469406d39393ba1cc16b6c5ba292a76131b96a39e710cfdcc86ab16c23ebcc1"], + "optionalKeys": ["+dfb28080f838f9e168a8077eba2fb6eed337c46adec929c4aa432910cdde8285"], "numberOfSignatures": 1 }, "signatures": [ @@ -13888,12 +13638,8 @@ "senderPublicKey": "0d322729035100f28ed40d504b05d77b9a63ea1db4c162225d84e8a1581494d3", "nonce": "911", "params": { - "mandatoryKeys": [ - "+62481838ac40debd0340c9ccdbc06c779a4c126d9a07ee5654850aae87acf2f4" - ], - "optionalKeys": [ - "+a0cc39aa03e9088f132665b3d723bbd0a1da2c10e73d3bc30a60b504553e3281" - ], + "mandatoryKeys": ["+62481838ac40debd0340c9ccdbc06c779a4c126d9a07ee5654850aae87acf2f4"], + "optionalKeys": ["+a0cc39aa03e9088f132665b3d723bbd0a1da2c10e73d3bc30a60b504553e3281"], "numberOfSignatures": 1 }, "signatures": [ @@ -14539,9 +14285,7 @@ "senderPublicKey": "8909bd2a16af2e7096d3024a2f658d5eb1c7dfe1ddbb594a2959778e3c8a0e5e", "nonce": "951", "params": { - "mandatoryKeys": [ - "+15ce5c5fa981687c1babf0035d092231cfd369697911f4316c42c245e87cc0ba" - ], + "mandatoryKeys": ["+15ce5c5fa981687c1babf0035d092231cfd369697911f4316c42c245e87cc0ba"], "optionalKeys": [ "+03bd10c89bb882ed5168f34ba1729aa94bfad15d41a321afa59c083a332ae054", "dfc155dac1f211fc0aa29cb5740408610003b6ec39e43e5b23609d883d7c3f1c7695f10f1fd6777dea6512b777bd2c6a0278c3fcfb89c0d9154c75c691e9b2a8", @@ -14630,9 +14374,7 @@ "senderPublicKey": "c3110c985f1ba29377e5e874f418b8d689546b0ae7a89396bd76505f4f616790", "nonce": "439", "params": { - "mandatoryKeys": [ - "+49beed427a624b9c98e4e70d5dbc3845204b98c03fcd01f811966e6bc0090d04" - ], + "mandatoryKeys": ["+49beed427a624b9c98e4e70d5dbc3845204b98c03fcd01f811966e6bc0090d04"], "optionalKeys": [ "+5fb9376b9cb8b679cf388e5e0373854555d791882cff2cdb3237cdda469b49af", "3f0c1f54f1ece557cd6ea20998d8a765d852d58592317080db028253f0a80271113a5a5e938e96d21aa4defbc3cd1991a9569c103592f4b418362ad50a98b118", @@ -14705,12 +14447,8 @@ "senderPublicKey": "e356a607decebeae881c5428308d03376b16e7dd0eff93dc9eb390f227a0fa34", "nonce": "641", "params": { - "mandatoryKeys": [ - "+d19d7046996febb762471cbe28c35252a4f8ee768372b1253475ad22a5175c9c" - ], - "optionalKeys": [ - "+75f8a4f501bd3a16dcb296107e9a95ab2c0c23e1f526ab503534fcf796bae99c" - ], + "mandatoryKeys": ["+d19d7046996febb762471cbe28c35252a4f8ee768372b1253475ad22a5175c9c"], + "optionalKeys": ["+75f8a4f501bd3a16dcb296107e9a95ab2c0c23e1f526ab503534fcf796bae99c"], "numberOfSignatures": 0 }, "signatures": [ @@ -15006,9 +14744,7 @@ "f7cdf91fb5594f4dcb5a3ffcb91e8d6eed0d1e30414cb8f19a4f1d256cea783a9860453d77da73b6d7a0a97693f433caed471498f7a9de54f4d74c2b4b8e846b", "4408dd6a353e1ec2280e5faa56e538a9a0be71b57e76da54bc0f9ccc76bcc0ac937beaf888fc02f4ae57e2fa2bda8cd0adf6e41a6e60ab9c5bf1fcd0d62197e9" ], - "optionalKeys": [ - "+9f5a177d000091e2929f94bc1bb5c64c6cad18ad8967717bbfd9c0f241118e24" - ], + "optionalKeys": ["+9f5a177d000091e2929f94bc1bb5c64c6cad18ad8967717bbfd9c0f241118e24"], "numberOfSignatures": 4 }, "signatures": [ @@ -15104,9 +14840,7 @@ "edbeb3d387ea081f89b95b8522b88463f6d552d64be5f9b5482595f8e166b45c105a3002b99bca861f0f3562deaffd3a702e568fce14016919563f91300e4ff0", "713678ecfb707a1fa73c2859aafc66b537a7460c776ab8a7cad0fd024dff736a24e489b01fa79d189ae947bb47baabaa74432e3f6d83ef1bbdaaffd668f645ef" ], - "optionalKeys": [ - "+253548abd1f5351b5de634e373a5fd4e3b5e892f64b09f2ac8b511fe8db416c9" - ], + "optionalKeys": ["+253548abd1f5351b5de634e373a5fd4e3b5e892f64b09f2ac8b511fe8db416c9"], "numberOfSignatures": 3 }, "signatures": [ @@ -15169,9 +14903,7 @@ "+79ef8e0ac1863aa735c5c9cacb48f4825c9612302bf2bf41969d9ce456cb4d53", "e64b7114c0e2f86d266a35bf8b995ea25c32428b5ef154a2231d7deec21609a53f3c36f612632ecda725ee061d6149358233808433dab2ff10028b3205e09c4e" ], - "optionalKeys": [ - "+50b52478a21458c31c3f4800630be5b4478660606ada1f364de25fcecc3cd37b" - ], + "optionalKeys": ["+50b52478a21458c31c3f4800630be5b4478660606ada1f364de25fcecc3cd37b"], "numberOfSignatures": 2 }, "signatures": [ @@ -15247,9 +14979,7 @@ "+d815de3605523c8f8915d26246314f5b2ce69228fa72feece3ad55dea9b3a8f6", "c6392e89aff64e9c4a8597abff6e406b1097b654f674efbd6dd5943f58af68d73ee6b4df7b65c8cfa579aa048792cb5e62f38596b4d8902b40f582e89ec36a6e" ], - "optionalKeys": [ - "+1610a3026882cacc88428385dd2de4fe3368f2dbf17df0b2dacb3e0912a2c644" - ], + "optionalKeys": ["+1610a3026882cacc88428385dd2de4fe3368f2dbf17df0b2dacb3e0912a2c644"], "numberOfSignatures": 2 }, "signatures": [ @@ -15350,9 +15080,7 @@ "+80d768af4e6f9ce950779a126fd45acbb9adf13878b8c94b8fc0cd20c7c335b9", "a2d1a7bc550908804d72f6adabb25b589ae25735764ce36a123de852ab9efc08133fd9c31a2146e6111803c89dbf2eb8015cdb69553c78e876d914d825c6b487" ], - "optionalKeys": [ - "+98da026a91560c415a3c9f5afb24f7c8e72fa76296bac29bfb683b008cf0c84b" - ], + "optionalKeys": ["+98da026a91560c415a3c9f5afb24f7c8e72fa76296bac29bfb683b008cf0c84b"], "numberOfSignatures": 2 }, "signatures": [ @@ -15430,9 +15158,7 @@ "senderPublicKey": "0b47feccb00f7c3c29de12ee0a95fa3ed90f11573f15c4f07740582f60e752e7", "nonce": "889", "params": { - "mandatoryKeys": [ - "+3ed81e3bbaeddcd525621f03091cf777062e1a74662f71bfc089c532971bd83f" - ], + "mandatoryKeys": ["+3ed81e3bbaeddcd525621f03091cf777062e1a74662f71bfc089c532971bd83f"], "optionalKeys": [ "+1d1e112b2c24cec450996e5264307df50340ff866a838371a0f7c7d8fc89e79a", "c33b2531c88fe14ae6905ad0cc03d4645110e3b89addd9ddf29c59cbdaabe71d2efb14b7c83ce19ec351b796b9adb566e40a05f572a6293eb3a1fa13cdf7754e", @@ -15500,9 +15226,7 @@ "7a61c07c8a3463ef8022d33a8b084e30bece76666bea6749d7c357dbd3522a73c1066cb6ca8fd42433aa8e54d879b32718704551455087024393738c107b30ad", "2ed4c38f984dfabf40931c214e01075e42ada056dc731f1c4f92381b98c2c53ba62caf95e91608db02deb4e9b6b98e005eb6d780a4f7d02e8181d43d94cc66d5" ], - "optionalKeys": [ - "+4a9c67192bfd94c3256f54944f7e2f7f1946d93dc4f0ed76750b11387a01b603" - ], + "optionalKeys": ["+4a9c67192bfd94c3256f54944f7e2f7f1946d93dc4f0ed76750b11387a01b603"], "numberOfSignatures": 4 }, "signatures": [ @@ -15537,4 +15261,4 @@ "previousBlockId": "086e0243b752424c205e387263efcccec4f7c96362b36af03f4b3017f8f75b4a" } ] -} \ No newline at end of file +} diff --git a/services/fee-estimator/tests/blockGenerator/noTraffic.json b/services/fee-estimator/tests/blockGenerator/noTraffic.json index 1f9edc797..5a84e73d4 100644 --- a/services/fee-estimator/tests/blockGenerator/noTraffic.json +++ b/services/fee-estimator/tests/blockGenerator/noTraffic.json @@ -360,4 +360,4 @@ "previousBlockId": "cca1389d366aeb322b0b6c105388d5d4c23b7f0b9e89342b0ea8e3983577ea28" } ] -} \ No newline at end of file +} diff --git a/services/fee-estimator/tests/constants/blocks.js b/services/fee-estimator/tests/constants/blocks.js index 025cda232..c866166ad 100644 --- a/services/fee-estimator/tests/constants/blocks.js +++ b/services/fee-estimator/tests/constants/blocks.js @@ -20,7 +20,8 @@ const emptyBlock = { timestamp: 1650619396, generatorPublicKey: '307facba648e60f2aed3bc35447ef9044ccabe45015f004b65e8fcb058e0a806', transactionRoot: '0f7223e4ecd83fc073769842411df416abc12b42b4250effd0eb08f2a7beb6c9', - signature: '463a470819ab5b52bcd3c9b2f2ef20ec73dca067b864881b74fb7b48369b48c4af5cfeb670b16995c7548960451a7726aa1da69fefcdada56c1c782ee7c1742f', + signature: + '463a470819ab5b52bcd3c9b2f2ef20ec73dca067b864881b74fb7b48369b48c4af5cfeb670b16995c7548960451a7726aa1da69fefcdada56c1c782ee7c1742f', previousBlockId: 'b3becb493a4702911d9d26a96596359a2ab3826aa205a9b77055851496f602a5', reward: '200000000', asset: { @@ -38,7 +39,8 @@ const nonEmptyBlock = { timestamp: 1629113496, generatorPublicKey: '584dd9d7c7942fc7d5425706f3e39b284e655400e0ad1e91d17ee43187b71319', transactionRoot: 'c7813f5c906263c8d67451b76fec36b6fb9dda3e050e0312c6b684248bd1ae52', - signature: '02f93627ab68495cf1d55eb0238d904db6f2c812ef0e6eeec6031817a1871402209c97fed2a9c4afc45bebde1f5a0d82b437ae3629596895c0e15ec884ca1f0c', + signature: + '02f93627ab68495cf1d55eb0238d904db6f2c812ef0e6eeec6031817a1871402209c97fed2a9c4afc45bebde1f5a0d82b437ae3629596895c0e15ec884ca1f0c', previousBlockId: '5aa409c6b62b5a496cc96f4bc67dfc7fe77fe79433168425da1b471cb9bcf056', reward: '0', asset: { @@ -1393,9 +1395,7 @@ const nonEmptyBlock = { '6d6be97248928fd2ee0d7188a293e973ecd1c89d77655d09ddce8f471c006673f49a584cc37cfa8d0585bc370686c50d91bb8264ba02e6b222c08d9ac6b77ecb', 'e7e36fb3a51f161937dd7590d757e71a851ca97bc78757c6803990ca34f2265fdfbf7f5bf9c04ad1ae9822bd3f4d43338c694004316c2f361f9c5cdb15b0462e', ], - optionalKeys: [ - '+4be794e49433d81c543387f9bb3448f91e23c2bc9db9449670f278b0a6624e5a', - ], + optionalKeys: ['+4be794e49433d81c543387f9bb3448f91e23c2bc9db9449670f278b0a6624e5a'], numberOfSignatures: 3, }, signatures: [ diff --git a/services/fee-estimator/tests/functional/feeEstimates.test.js b/services/fee-estimator/tests/functional/feeEstimates.test.js index e3df0770c..91596cee0 100644 --- a/services/fee-estimator/tests/functional/feeEstimates.test.js +++ b/services/fee-estimator/tests/functional/feeEstimates.test.js @@ -13,10 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - emptyBlock, - nonEmptyBlock, -} = require('../constants/blocks'); +const { emptyBlock, nonEmptyBlock } = require('../constants/blocks'); const { calculateFeePerByte, @@ -58,14 +55,7 @@ describe('Fee estimation tests', () => { }); describe('getEstimateFeePerByteForBlock', () => { - const feeEstPerByteKeys = [ - 'low', - 'med', - 'high', - 'updated', - 'blockHeight', - 'blockID', - ]; + const feeEstPerByteKeys = ['low', 'med', 'high', 'updated', 'blockHeight', 'blockID']; describe('Zero prevFeeEstPerByte', () => { const prevFeeEstPerByte = {}; diff --git a/services/fee-estimator/tests/unit/feeEstimates.test.js b/services/fee-estimator/tests/unit/feeEstimates.test.js index cb27ae665..8fc1f81a9 100644 --- a/services/fee-estimator/tests/unit/feeEstimates.test.js +++ b/services/fee-estimator/tests/unit/feeEstimates.test.js @@ -13,11 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - emptyBlock, - nonEmptyBlock, - fullySaturatedBlock, -} = require('../constants/blocks'); +const { emptyBlock, nonEmptyBlock, fullySaturatedBlock } = require('../constants/blocks'); const { calculateBlockSize, @@ -76,10 +72,9 @@ describe('Fee estimation tests', () => { }); it('Batch of 20 blocks each having size 15', async () => { - const blocks = new Array(20).fill( - { - transactions: [{ size: 15 }], - }); + const blocks = new Array(20).fill({ + transactions: [{ size: 15 }], + }); const wavg = await calculateWeightedAvg(blocks); expect(wavg).not.toBe(0); diff --git a/services/fee-estimator/yarn.lock b/services/fee-estimator/yarn.lock index 4379323bd..9d24a23d2 100644 --- a/services/fee-estimator/yarn.lock +++ b/services/fee-estimator/yarn.lock @@ -10,46 +10,46 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -61,40 +61,40 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953" + integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -103,10 +103,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -114,7 +114,7 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -134,24 +134,24 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -171,7 +171,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -180,7 +180,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -210,20 +210,20 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" @@ -234,44 +234,52 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" + integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -320,17 +328,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -348,6 +356,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -405,9 +420,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -419,211 +434,212 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" + integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" + integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -634,198 +650,199 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.14.0": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a" + integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ== dependencies: - "@babel/compat-data" "^7.22.20" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -837,59 +854,58 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" core-js-compat "^3.31.0" semver "^6.3.1" @@ -908,13 +924,13 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.8.4": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" + integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": +"@babel/template@^7.22.15", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== @@ -923,28 +939,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -981,142 +997,164 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" "@jest/transform@^27.5.1": version "27.5.1" @@ -1139,6 +1177,27 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + "@jest/types@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" @@ -1150,6 +1209,18 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -1174,69 +1245,79 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" -"@liskhq/lisk-codec@0.4.0-rc.1", "@liskhq/lisk-codec@^0.4.0-rc.1": - version "0.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-codec/-/lisk-codec-0.4.0-rc.1.tgz#fbffec74bd54efb820758cc00ca9737d913b452e" - integrity sha512-o5vPFhh2siETT9lDWu+ZJo/Ni5/EYtvUoi3k1kWaJ/X6YF03J4L2GZoRVzZKnXPMPuUDJyT131gUjM0Z3BPgSA== +"@liskhq/lisk-codec@0.4.0", "@liskhq/lisk-codec@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-codec/-/lisk-codec-0.4.0.tgz#0b512f7bc835f921d728ead04d498b1a7a647cd1" + integrity sha512-03mgvftrWK5KfjBl/VSceEBtcr2wA4NLGnuBsoxKiwL/Bolfd1f3rdXbQgUKzeY4UJEoDGHN6jRPbXLHH/yUnw== dependencies: - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" - "@liskhq/lisk-utils" "^0.4.0-rc.0" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-cryptography" "^4.0.0" + "@liskhq/lisk-utils" "^0.4.0" + "@liskhq/lisk-validator" "^0.8.0" -"@liskhq/lisk-cryptography@4.0.0-rc.1", "@liskhq/lisk-cryptography@^4.0.0-rc.1": - version "4.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0-rc.1.tgz#b8df408aa1a94362091eda06b0a38577e4db5ead" - integrity sha512-e9ubCGSi8OzOJ21i8Mlc7Zsu+b2ofMGsC0QegzhQSf9Vf5+qAk2CHUR0X/+kT8wvSIpN6krfbz81sfzDPq/PBQ== +"@liskhq/lisk-cryptography@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0.tgz#f8752053f5512a6257a6b59a9ae45567e4ff5053" + integrity sha512-246hoey+sKx0/2GrECXfsjTmhv5PaD0z/vYpV1zTL4qPOHaDNqbKsSLg/uAt2OfM7et1KoG76jpYzaiifqCJiw== dependencies: - "@liskhq/lisk-passphrase" "^4.0.0-rc.0" + "@liskhq/lisk-passphrase" "^4.0.0" buffer-reverse "1.0.1" hash-wasm "4.9.0" tweetnacl "1.0.3" -"@liskhq/lisk-passphrase@^4.0.0-rc.0": - version "4.0.0-rc.0" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.0.0-rc.0.tgz#78fe583229c96d76258906375e34ff84a413be05" - integrity sha512-m87nhvUpOlSLr5NRV2M4INtg0IjjFF7Bte96Iq6X1dhzOjlmPg/QUQa7MFUzQu3NEWWHnpwON8QQK1FUE6ixYw== +"@liskhq/lisk-cryptography@^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.1.0.tgz#8621bcb61008adb5faee4d148a91e1da068ab3cc" + integrity sha512-5//E14nlqyvOE21uwB8zCCYe0JmeEVCQ6gg/TjboKYEct/OX0GkK5gyb6tqJr8ApaQxRaL5WqPt2VOwxf564VA== + dependencies: + "@liskhq/lisk-passphrase" "^4.1.0" + buffer-reverse "1.0.1" + hash-wasm "4.9.0" + tweetnacl "1.0.3" + +"@liskhq/lisk-passphrase@^4.0.0", "@liskhq/lisk-passphrase@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.1.0.tgz#d9a72a9c9d4cdb557a25b84bffe73d579155f723" + integrity sha512-1VdpEp+OGiyCF0Fjtgcc+SLlHeIflzya49GzIXcXjFNf19VgkUu/eIDM8XHxSdj/5KzpL+yD07OYCh+LdoAkfA== dependencies: bip39 "3.0.3" -"@liskhq/lisk-transactions@6.0.0-rc.1": - version "6.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-transactions/-/lisk-transactions-6.0.0-rc.1.tgz#4d4583487ae778aac8ffcb622227da99ef5940b7" - integrity sha512-zfgdkS0ySaiSK4j7NNcrXqatk2gViTvBqjFBgGviqA4xUlSZWFaHYIgRzxkOKvDT1EsA5YUk2Z2ARj5xMZVvzw== +"@liskhq/lisk-transactions@6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-transactions/-/lisk-transactions-6.0.0.tgz#6bcd43b1cd3a7787f98fe41d1abd8ed26c180e7b" + integrity sha512-HnvPxtoglIR1qHohIXg7K9HCiU0naMcz2+wZUH1jwgDwugCNaypLSTNat1dI7/5MHn8MpohHun0a1tWmJZYH/A== dependencies: - "@liskhq/lisk-codec" "^0.4.0-rc.1" - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-codec" "^0.4.0" + "@liskhq/lisk-cryptography" "^4.0.0" + "@liskhq/lisk-validator" "^0.8.0" -"@liskhq/lisk-utils@^0.4.0-rc.0": - version "0.4.0-rc.0" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-utils/-/lisk-utils-0.4.0-rc.0.tgz#6337e1d7e8ca766bbc7ea07408eaf34b2e51bd93" - integrity sha512-oMTRwkWWBNqZABXQTFxvo6L/vyAeYka9MlNGNZE7ObaAO8JjxHRukQDZAX36+NcrvREsp1yNQF8YW1xFs+XIvg== +"@liskhq/lisk-utils@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-utils/-/lisk-utils-0.4.0.tgz#84a8281d6f1db0605e286fcc41721965df474a71" + integrity sha512-rzZZrh36GVSqB65Y4LjaZIe2AVLUH8zXNDNBX0MXM7pI5BhBesDmDpVS2qVLoF7lhyBmUPk9SrARI0wK9/+z9g== dependencies: lodash.clonedeep "4.5.0" -"@liskhq/lisk-validator@^0.8.0-rc.1": - version "0.8.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-validator/-/lisk-validator-0.8.0-rc.1.tgz#f723bd1667e61c4c5bec680343342c1f8191ff67" - integrity sha512-gLFa+5scCVPWc6cZEx5cALx6gRmF51xH/Szg7YeWi6uJkcQBSlT3ephvAUEVOWcRQ4SL7XadM/vWE0wXvoqqeA== +"@liskhq/lisk-validator@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-validator/-/lisk-validator-0.8.0.tgz#af62c4ef9cc71b2bd696eb70dca89ca7411c96c3" + integrity sha512-aChkjwuwBBzvDIQhyCRozOvQ0fTWjzAOLZJi3i53+1op6J3f6LZYG6ffA6q/x6W1/tQbApSoc2GJWrSCjmFpFw== dependencies: - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" + "@liskhq/lisk-cryptography" "^4.0.0" ajv "8.1.0" ajv-formats "2.1.1" debug "4.3.4" @@ -1249,34 +1330,34 @@ dependencies: debug "^3.1.0" -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -1285,24 +1366,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" @@ -1312,74 +1393,73 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/node@11.11.6": version "11.11.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" accepts@~1.3.4: version "1.3.8" @@ -1389,36 +1469,6 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ajv-formats@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -1544,14 +1594,16 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.3.0, babel-jest@^27.5.1: +babel-jest@^27.3.0: version "27.5.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== @@ -1565,6 +1617,19 @@ babel-jest@^27.3.0, babel-jest@^27.5.1: graceful-fs "^4.2.9" slash "^3.0.0" +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -1586,29 +1651,39 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" + integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz#1fac2b1dcef6274e72b3c72977ed8325cb330591" - integrity sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg== +babel-plugin-polyfill-corejs3@^0.8.5: + version "0.8.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.32.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" + integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -1636,6 +1711,14 @@ babel-preset-jest@^27.5.1: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1652,9 +1735,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -1723,19 +1806,14 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.10, browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: @@ -1784,13 +1862,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1812,10 +1891,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== casual-browserify@^1.5.19: version "1.5.19" @@ -1858,9 +1937,9 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -1875,13 +1954,13 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: @@ -1955,7 +2034,7 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: +convert-source-map@^1.4.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -1970,12 +2049,12 @@ cookie@~0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.31.0, core-js-compat@^3.32.2: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" - integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.34.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.34.0.tgz#61a4931a13c52f8f08d924522bba65f8c94a5f17" + integrity sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA== dependencies: - browserslist "^4.21.10" + browserslist "^4.22.2" cors@~2.8.5: version "2.8.5" @@ -2008,6 +2087,19 @@ create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" @@ -2025,32 +2117,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -2063,7 +2129,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2082,11 +2148,6 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -2094,10 +2155,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -2109,16 +2170,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2162,17 +2223,10 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== drange@^1.0.2: version "1.1.1" @@ -2184,15 +2238,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -2212,9 +2266,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -2228,9 +2282,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -2251,25 +2305,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -2279,7 +2333,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -2293,7 +2347,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -2301,13 +2355,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -2343,32 +2397,16 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2409,15 +2447,16 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" faker@^5.3.1: version "5.5.3" @@ -2429,7 +2468,7 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -2471,7 +2510,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -2483,10 +2522,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -2521,10 +2560,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -2558,15 +2597,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -2601,7 +2640,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2653,11 +2692,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -2676,13 +2715,6 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hash-base@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" @@ -2697,12 +2729,12 @@ hash-wasm@4.9.0: resolved "https://registry.yarnpkg.com/hash-wasm/-/hash-wasm-4.9.0.tgz#7e9dcc9f7d6bd0cc802f2a58f24edce999744206" integrity sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w== -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" @@ -2720,28 +2752,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -2798,12 +2813,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -2883,11 +2898,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2931,11 +2946,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -3010,11 +3020,11 @@ isstream@^0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -3025,6 +3035,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -3051,145 +3072,130 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== jest-haste-map@^27.5.1: version "27.5.1" @@ -3211,69 +3217,66 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -3285,83 +3288,86 @@ jest-regex-util@^27.5.1: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" @@ -3373,33 +3379,31 @@ jest-serializer@^27.5.1: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" jest-util@^27.5.1: version "27.5.1" @@ -3413,29 +3417,42 @@ jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" jest-when@^3.5.1: @@ -3452,14 +3469,25 @@ jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: - "@jest/core" "^27.5.1" + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -3474,39 +3502,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3560,9 +3555,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -3611,13 +3606,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -3678,7 +3673,7 @@ lodash.isarguments@^3.1.0: resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3825,9 +3820,9 @@ mocker-data-generator@^2.12.0: tslib "^2.1.0" moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -3842,9 +3837,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.21: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -3890,9 +3885,9 @@ ms@2.1.3, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -3934,9 +3929,9 @@ negotiator@0.6.3: integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" @@ -3960,10 +3955,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" @@ -3982,20 +3977,15 @@ nuid@^1.1.4: resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -4003,12 +3993,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -4061,6 +4051,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -4095,11 +4092,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4186,14 +4178,14 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" prettyjson@^1.2.1: version "1.2.5" @@ -4222,10 +4214,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -4235,10 +4227,15 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" @@ -4254,11 +4251,6 @@ qs@^6.11.0: dependencies: side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - randexp@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.5.3.tgz#f31c2de3148b30bdeb84b7c3f59b0ebb9fec3738" @@ -4299,10 +4291,10 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" @@ -4411,11 +4403,6 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -4428,15 +4415,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.14.2, resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -4452,13 +4439,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -4496,13 +4476,6 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@7.5.2: version "7.5.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" @@ -4515,7 +4488,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.5.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -4556,6 +4529,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -4599,7 +4582,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4671,24 +4654,19 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4738,7 +4716,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4815,7 +4793,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -4829,24 +4807,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -4873,14 +4838,6 @@ tarn@^3.0.2: resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -4895,11 +4852,6 @@ text-decoding@^1.0.0: resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - tildify@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" @@ -4932,23 +4884,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -5062,6 +4997,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -5090,11 +5030,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -5115,14 +5050,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -5146,14 +5073,14 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" validator@13.7.0: version "13.7.0" @@ -5165,21 +5092,7 @@ vary@^1: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -5191,28 +5104,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -5221,15 +5112,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -5241,13 +5123,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -5283,26 +5165,19 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest-ssl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" @@ -5323,20 +5198,25 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/services/gateway/README.md b/services/gateway/README.md index 827baa12a..cc163c350 100644 --- a/services/gateway/README.md +++ b/services/gateway/README.md @@ -43,8 +43,8 @@ A list of the most commonly used environment variables is presented below: - `ENABLE_HTTP_CACHE_CONTROL`: Boolean flag to enable HTTP response caching. This includes the `Cache-Control` header within the responses. - `HTTP_CACHE_CONTROL_DIRECTIVES`: HTTP `cache-control` directives. - `WS_RATE_LIMIT_ENABLE`: Boolean flag to enable WS rate limiter. -- `WS_RATE_LIMIT_CONNECTIONS`: Maximum number of new connections allowed within a configured window, specified by `WS_RATE_LIMIT_DURATION`. -- `WS_RATE_LIMIT_DURATION`: Rate limit window in seconds. +- `WS_RATE_LIMIT_CONNECTIONS`: Maximum number of new connections allowed within a configured window, specified by `WS_RATE_LIMIT_DURATION`. +- `WS_RATE_LIMIT_DURATION`: Rate limit window in seconds. By default, it is set to 1. - `ENABLE_REQUEST_CACHING`: Boolean flag to enable RPC response caching. - `GATEWAY_DEPENDENCIES`: Services on which the gateway is dependent (can be expressed as a CSV). - `JOB_INTERVAL_UPDATE_READINESS_STATUS`: Job run interval to update the readiness status. By default, it is set to 0. diff --git a/services/gateway/apis/http-exports/methods/export.js b/services/gateway/apis/http-exports/methods/export.js index 80d7fa808..afa347c2a 100644 --- a/services/gateway/apis/http-exports/methods/export.js +++ b/services/gateway/apis/http-exports/methods/export.js @@ -29,11 +29,9 @@ module.exports = { const exportSchema = {}; exportSchema[this.swaggerApiPath] = { get: {} }; exportSchema[this.swaggerApiPath].get.tags = this.tags; - exportSchema[this.swaggerApiPath].get.parameters = transformParams( - 'export', - this.params, - ); - exportSchema[this.swaggerApiPath].get.summary = 'Requests transaction history for a given account'; + exportSchema[this.swaggerApiPath].get.parameters = transformParams('export', this.params); + exportSchema[this.swaggerApiPath].get.summary = + 'Requests transaction history for a given account'; exportSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns transaction history', diff --git a/services/gateway/apis/http-exports/methods/scheduleExport.js b/services/gateway/apis/http-exports/methods/scheduleExport.js index a1e9484d3..98af6a55e 100644 --- a/services/gateway/apis/http-exports/methods/scheduleExport.js +++ b/services/gateway/apis/http-exports/methods/scheduleExport.js @@ -39,11 +39,9 @@ module.exports = { const exportSchema = {}; exportSchema[this.swaggerApiPath] = { get: {} }; exportSchema[this.swaggerApiPath].get.tags = this.tags; - exportSchema[this.swaggerApiPath].get.parameters = transformParams( - 'export', - this.params, - ); - exportSchema[this.swaggerApiPath].get.summary = 'Requests to schedule export of transaction history for a given account'; + exportSchema[this.swaggerApiPath].get.parameters = transformParams('export', this.params); + exportSchema[this.swaggerApiPath].get.summary = + 'Requests to schedule export of transaction history for a given account'; exportSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns transaction history export scheduling information', diff --git a/services/gateway/apis/http-exports/swagger/apiJson.json b/services/gateway/apis/http-exports/swagger/apiJson.json index 0e5abe575..bc4dfe123 100644 --- a/services/gateway/apis/http-exports/swagger/apiJson.json +++ b/services/gateway/apis/http-exports/swagger/apiJson.json @@ -1,29 +1,26 @@ { - "apiJson": { - "swagger": "2.0", - "info": { - "title": "Lisk Service API", - "version": "0.7.0", - "contact": { - "email": "admin@lisk.com" - }, - "description": "# Lisk Service API Documentation\n\nLisk Service is a middleware web application that interacts with the entire Lisk ecosystem in various aspects, such as accessing blockchain data (both on-chain and off-chain information), retrieving and storing market data, and exporting account history.\n\nThe main focus of this project is to provide data to Lisk blockchain users by serving them in a standardized JSON format and exposing a public RESTful API. The project is split into several smaller components (microservices) each focused on serving a single specific purpose. \n\nAs a pure backend project, it is designed to meet the requirements of front-end developers, especially Lisk Desktop and Lisk Mobile.\n\nThe API can be accessed at `https://service.lisk.com`.\nIt is also possible to access the Testnet network at `https://testnet-service.lisk.com`.\n\nThe Lisk Service API is compatible with RESTful guidelines. The specification below contains numerous examples of how to use the API in practice.\n\n## Endpoint Logic\n\nThe logic of the endpoints are as follows:\n- the structure is always based on `///`\n\n## Responses\n\nAll responses are returned in the JSON format - `application/json`.\n\nEach API request has the following structure:\n\n```\n{\n \"data\": {}, // Contains the requested data\n \"meta\": {}, // Contains additional metadata, e.g. the values of `limit` and `offset`\n}\n```\n\nAnd, the error responses adhere to the following structure:\n\n```\n{\n \"error\": true,\n \"message\": \"Not found\", // Contains the error message\n}\n```", - "license": { - "name": "GPL v3.0", - "url": "https://www.gnu.org/licenses/gpl-3.0.en.html" - } - }, - "basePath": "/api/v3", - "tags": [ - { - "name": "Account History Export", - "description": "Lisk network transaction history export API." - } - ], - "schemes": [ - "http", - "https" - ], - "paths": {} - } + "apiJson": { + "swagger": "2.0", + "info": { + "title": "Lisk Service API", + "version": "0.7.0", + "contact": { + "email": "admin@lisk.com" + }, + "description": "# Lisk Service API Documentation\n\nLisk Service is a middleware web application that interacts with the entire Lisk ecosystem in various aspects, such as accessing blockchain data (both on-chain and off-chain information), retrieving and storing market data, and exporting account history.\n\nThe main focus of this project is to provide data to Lisk blockchain users by serving them in a standardized JSON format and exposing a public RESTful API. The project is split into several smaller components (microservices) each focused on serving a single specific purpose. \n\nAs a pure backend project, it is designed to meet the requirements of front-end developers, especially Lisk Desktop and Lisk Mobile.\n\nThe API can be accessed at `https://service.lisk.com`.\nIt is also possible to access the Testnet network at `https://testnet-service.lisk.com`.\n\nThe Lisk Service API is compatible with RESTful guidelines. The specification below contains numerous examples of how to use the API in practice.\n\n## Endpoint Logic\n\nThe logic of the endpoints are as follows:\n- the structure is always based on `///`\n\n## Responses\n\nAll responses are returned in the JSON format - `application/json`.\n\nEach API request has the following structure:\n\n```\n{\n \"data\": {}, // Contains the requested data\n \"meta\": {}, // Contains additional metadata, e.g. the values of `limit` and `offset`\n}\n```\n\nAnd, the error responses adhere to the following structure:\n\n```\n{\n \"error\": true,\n \"message\": \"Not found\", // Contains the error message\n}\n```", + "license": { + "name": "GPL v3.0", + "url": "https://www.gnu.org/licenses/gpl-3.0.en.html" + } + }, + "basePath": "/api/v3", + "tags": [ + { + "name": "Account History Export", + "description": "Lisk network transaction history export API." + } + ], + "schemes": ["http", "https"], + "paths": {} + } } diff --git a/services/gateway/apis/http-exports/swagger/definitions/export.json b/services/gateway/apis/http-exports/swagger/definitions/export.json index 7cad501fa..f21499490 100644 --- a/services/gateway/apis/http-exports/swagger/definitions/export.json +++ b/services/gateway/apis/http-exports/swagger/definitions/export.json @@ -1,120 +1,107 @@ { - "ExportScheduled": { - "type": "object", - "required": [ - "address" - ], - "properties": { - "address": { - "type": "string", - "format": "address", - "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "description": "The Lisk Address is the human readable representation of the accounts owners' public key.\nIt is 41 character long address thats begins with `lsk`.\n" - }, - "publicKey": { - "type": "string", - "format": "publicKey", - "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", - "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owners private key.\n" - }, - "interval": { - "type": "string", - "format": "interval", - "example": "2020-10-01:2020-10-31", - "description": "The date interval for which the transactions need to be exported.\n" - } - } - }, - "ExportScheduledWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "description": "Transaction history export information", - "type": "object", - "$ref": "#/definitions/ExportScheduled" - }, - "meta": { - "type": "object", - "properties": { - "ready": { - "type": "boolean", - "example": "false", - "description": "False when scheduled to export. True when already exported and available for download" - } - } - }, - "links": { - "type": "object" - } - } - }, - "ExportFile": { - "type": "object", - "required": [ - "address" - ], - "properties": { - "address": { - "type": "string", - "format": "address", - "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "description": "The Lisk Address is the human readable representation of the accounts owners' public key.\nIt is 41 character long address thats begins with `lsk`.\n" - }, - "publicKey": { - "type": "string", - "format": "publicKey", - "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", - "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owners private key.\n" - }, - "interval": { - "type": "string", - "format": "interval", - "example": "2020-10-01:2020-10-31", - "description": "The date interval for which the transactions need to be exported.\n" - }, - "fileName": { - "type": "string", - "format": "fileName", - "example": "transactions__
__.csv", - "description": "The name of the file containing the exported account transaction history.\n" - }, - "fileUrl": { - "type": "string", - "format": "fileUrl", - "example": "/api/v3/exports/transactions__
__.csv", - "description": "The file URL path containing the exported account transaction history.\n" - } - } - }, - "ExportFileUrlWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "description": "Transaction history export information", - "type": "object", - "$ref": "#/definitions/ExportFile" - }, - "meta": { - "type": "object", - "properties": { - "ready": { - "type": "boolean", - "example": "true", - "description": "True when already exported and available for download. False when scheduled to export" - } - } - }, - "links": { - "type": "object" - } - } - } + "ExportScheduled": { + "type": "object", + "required": ["address"], + "properties": { + "address": { + "type": "string", + "format": "address", + "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", + "description": "The Lisk Address is the human readable representation of the accounts owners' public key.\nIt is 41 character long address thats begins with `lsk`.\n" + }, + "publicKey": { + "type": "string", + "format": "publicKey", + "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", + "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owners private key.\n" + }, + "interval": { + "type": "string", + "format": "interval", + "example": "2020-10-01:2020-10-31", + "description": "The date interval for which the transactions need to be exported.\n" + } + } + }, + "ExportScheduledWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "description": "Transaction history export information", + "type": "object", + "$ref": "#/definitions/ExportScheduled" + }, + "meta": { + "type": "object", + "properties": { + "ready": { + "type": "boolean", + "example": "false", + "description": "False when scheduled to export. True when already exported and available for download" + } + } + }, + "links": { + "type": "object" + } + } + }, + "ExportFile": { + "type": "object", + "required": ["address"], + "properties": { + "address": { + "type": "string", + "format": "address", + "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", + "description": "The Lisk Address is the human readable representation of the accounts owners' public key.\nIt is 41 character long address thats begins with `lsk`.\n" + }, + "publicKey": { + "type": "string", + "format": "publicKey", + "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", + "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owners private key.\n" + }, + "interval": { + "type": "string", + "format": "interval", + "example": "2020-10-01:2020-10-31", + "description": "The date interval for which the transactions need to be exported.\n" + }, + "fileName": { + "type": "string", + "format": "fileName", + "example": "transactions__
__.csv", + "description": "The name of the file containing the exported account transaction history.\n" + }, + "fileUrl": { + "type": "string", + "format": "fileUrl", + "example": "/api/v3/exports/transactions__
__.csv", + "description": "The file URL path containing the exported account transaction history.\n" + } + } + }, + "ExportFileUrlWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "description": "Transaction history export information", + "type": "object", + "$ref": "#/definitions/ExportFile" + }, + "meta": { + "type": "object", + "properties": { + "ready": { + "type": "boolean", + "example": "true", + "description": "True when already exported and available for download. False when scheduled to export" + } + } + } + } + } } diff --git a/services/gateway/apis/http-exports/swagger/parameters/export.json b/services/gateway/apis/http-exports/swagger/parameters/export.json index 91a74a483..530819a87 100644 --- a/services/gateway/apis/http-exports/swagger/parameters/export.json +++ b/services/gateway/apis/http-exports/swagger/parameters/export.json @@ -1,38 +1,38 @@ { - "address": { - "name": "address", - "in": "query", - "description": "Address of the account to query", - "type": "string", - "format": "address", - "minLength": 41, - "maxLength": 41 - }, - "publicKey": { - "name": "publicKey", - "in": "query", - "description": "Public key of the account to query", - "type": "string", - "format": "publicKey", - "minLength": 64, - "maxLength": 64 - }, - "interval": { - "name": "interval", - "in": "query", - "description": "Date interval to query in YYYY-MM-DD format", - "type": "string", - "format": "interval", - "minLength": 10, - "maxLength": 21 - }, - "filename": { - "name": "filename", - "in": "query", - "description": "Filename", - "required": true, - "type": "string", - "minLength": 80, - "maxLength": 80 - } + "address": { + "name": "address", + "in": "query", + "description": "Address of the account to query", + "type": "string", + "format": "address", + "minLength": 41, + "maxLength": 41 + }, + "publicKey": { + "name": "publicKey", + "in": "query", + "description": "Public key of the account to query", + "type": "string", + "format": "publicKey", + "minLength": 64, + "maxLength": 64 + }, + "interval": { + "name": "interval", + "in": "query", + "description": "Date interval to query in YYYY-MM-DD format", + "type": "string", + "format": "interval", + "minLength": 10, + "maxLength": 21 + }, + "filename": { + "name": "filename", + "in": "query", + "description": "Filename", + "required": true, + "type": "string", + "minLength": 80, + "maxLength": 80 + } } diff --git a/services/gateway/apis/http-exports/swagger/responses.json b/services/gateway/apis/http-exports/swagger/responses.json index 0f1c7f126..eabdfb86c 100644 --- a/services/gateway/apis/http-exports/swagger/responses.json +++ b/services/gateway/apis/http-exports/swagger/responses.json @@ -1,16 +1,16 @@ { - "responses": { - "badParameter": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/badRequest" - } - }, - "notFound": { - "description": "Not found", - "schema": { - "$ref": "#/definitions/notFound" - } - } - } + "responses": { + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/badRequest" + } + }, + "404": { + "description": "Not found", + "schema": { + "$ref": "#/definitions/notFound" + } + } + } } diff --git a/services/gateway/apis/http-test/methods/helloGeneric.js b/services/gateway/apis/http-test/methods/helloGeneric.js index 3880d4730..dd9e448c8 100644 --- a/services/gateway/apis/http-test/methods/helloGeneric.js +++ b/services/gateway/apis/http-test/methods/helloGeneric.js @@ -28,10 +28,13 @@ module.exports = { method: 'template.generic.hello', params: {}, definition: { - data: ['data', { - message: '=', - name: '=', - }], + data: [ + 'data', + { + message: '=', + name: '=', + }, + ], meta: { count: 'meta.count,number', offset: '=,number', diff --git a/services/gateway/apis/http-test/methods/helloParams.js b/services/gateway/apis/http-test/methods/helloParams.js index f7f4adc9b..4c50d6178 100644 --- a/services/gateway/apis/http-test/methods/helloParams.js +++ b/services/gateway/apis/http-test/methods/helloParams.js @@ -33,10 +33,13 @@ module.exports = { name: 'path_name', }, definition: { - data: ['data', { - message: '=', - name: '=', - }], + data: [ + 'data', + { + message: '=', + name: '=', + }, + ], meta: { count: 'meta.count,number', offset: '=,number', diff --git a/services/gateway/apis/http-test/swagger/test.yaml b/services/gateway/apis/http-test/swagger/test.yaml index 26d03c7f6..8d5261024 100644 --- a/services/gateway/apis/http-test/swagger/test.yaml +++ b/services/gateway/apis/http-test/swagger/test.yaml @@ -14,22 +14,22 @@ swagger: '2.0' info: title: Lisk Service Test API - version: "1.0" + version: '1.0' # put the contact info for your development or API team contact: email: admin@lisk.com - description: | + description: | ## Endpoint Logic - + The logic of the endpoints comes as follows: - the structure is always based on `///` - + ## Responses - + All responses are returned in the JSON format - `application/json`. - + Each API request has the following structure: - + ``` { "data": {}, // Contains the requested data @@ -37,7 +37,7 @@ info: "links": {} // Contains links to connected API calls from here, e.g. pagination links } ``` - + license: name: GPL v3.0 url: https://www.gnu.org/licenses/gpl-3.0.en.html @@ -47,8 +47,8 @@ basePath: / # Tags for organizing operations tags: -- name: Generic - description: Generic endpoints + - name: Generic + description: Generic endpoints schemes: - http @@ -62,11 +62,11 @@ paths: x-swagger-router-controller: mapper get: tags: - - Generic + - Generic summary: Sample response for testing. operationId: getHello produces: - - application/json + - application/json parameters: - $ref: '#/parameters/pathName' responses: diff --git a/services/gateway/apis/http-version3/methods/blockAssets.js b/services/gateway/apis/http-version3/methods/blockAssets.js index 0d5954538..040319f80 100644 --- a/services/gateway/apis/http-version3/methods/blockAssets.js +++ b/services/gateway/apis/http-version3/methods/blockAssets.js @@ -44,7 +44,8 @@ module.exports = { blockAssetSchema[this.swaggerApiPath].get.summary = 'Requests block assets data.'; blockAssetSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, - description: 'Returns block assets data. Assets are always returned empty for the genesis height.', + description: + 'Returns block assets data. Assets are always returned empty for the genesis height.', }); blockAssetSchema[this.swaggerApiPath].get.parameters = transformParams('blocks', this.params); blockAssetSchema[this.swaggerApiPath].get.responses = { diff --git a/services/gateway/apis/http-version3/methods/blockchainApps.js b/services/gateway/apis/http-version3/methods/blockchainApps.js index e1ab6cc66..e8fcfb771 100644 --- a/services/gateway/apis/http-version3/methods/blockchainApps.js +++ b/services/gateway/apis/http-version3/methods/blockchainApps.js @@ -24,10 +24,25 @@ module.exports = { rpcMethod: 'get.blockchain.apps', tags: ['Interoperability'], params: { - chainID: { optional: true, type: 'string', pattern: regex.CHAIN_ID_CSV, altSwaggerKey: 'chainIDCSV' }, - chainName: { optional: true, type: 'string', min: 3, max: 20, pattern: regex.NAME }, - status: { optional: true, type: 'string', pattern: regex.APPLICATION_STATUS, altSwaggerKey: 'blockchainAppStatus' }, - search: { optional: true, type: 'string', pattern: regex.PARTIAL_SEARCH_NAME, altSwaggerKey: 'searchByChainName' }, + chainID: { + optional: true, + type: 'string', + pattern: regex.CHAIN_ID_CSV, + altSwaggerKey: 'chainIDCSV', + }, + chainName: { optional: true, type: 'string', pattern: regex.CHAIN_NAME }, + status: { + optional: true, + type: 'string', + pattern: regex.APPLICATION_STATUS, + altSwaggerKey: 'blockchainAppStatus', + }, + search: { + optional: true, + type: 'string', + pattern: regex.PARTIAL_SEARCH_NAME, + altSwaggerKey: 'searchByChainName', + }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10 }, offset: { optional: true, type: 'number', min: 0, default: 0 }, }, @@ -35,12 +50,16 @@ module.exports = { const blockchainAppsSchema = {}; blockchainAppsSchema[this.swaggerApiPath] = { get: {} }; blockchainAppsSchema[this.swaggerApiPath].get.tags = this.tags; - blockchainAppsSchema[this.swaggerApiPath].get.summary = 'Requests list of blockchain applications'; + blockchainAppsSchema[this.swaggerApiPath].get.summary = + 'Requests list of blockchain applications'; blockchainAppsSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns a list of blockchain applications', }); - blockchainAppsSchema[this.swaggerApiPath].get.parameters = transformParams('blockchainApps', this.params); + blockchainAppsSchema[this.swaggerApiPath].get.parameters = transformParams( + 'blockchainApps', + this.params, + ); blockchainAppsSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns a list of blockchain applications in the Lisk ecosystem', diff --git a/services/gateway/apis/http-version3/methods/blockchainAppsMetaList.js b/services/gateway/apis/http-version3/methods/blockchainAppsMetaList.js index de6f4a5ed..ad58c41ef 100644 --- a/services/gateway/apis/http-version3/methods/blockchainAppsMetaList.js +++ b/services/gateway/apis/http-version3/methods/blockchainAppsMetaList.js @@ -24,9 +24,14 @@ module.exports = { rpcMethod: 'get.blockchain.apps.meta.list', tags: ['Application Off-Chain Metadata'], params: { - chainName: { optional: true, type: 'string', min: 3, max: 20, pattern: regex.NAME }, + chainName: { optional: true, type: 'string', pattern: regex.CHAIN_NAME }, network: { optional: true, type: 'string', pattern: regex.NETWORK_CSV }, - search: { optional: true, type: 'string', pattern: regex.PARTIAL_SEARCH_NAME, altSwaggerKey: 'searchByChainName' }, + search: { + optional: true, + type: 'string', + pattern: regex.PARTIAL_SEARCH_NAME, + altSwaggerKey: 'searchByChainName', + }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10 }, offset: { optional: true, type: 'number', min: 0, default: 0 }, sort: { @@ -40,15 +45,21 @@ module.exports = { const blockchainAppsMetaListSchema = {}; blockchainAppsMetaListSchema[this.swaggerApiPath] = { get: {} }; blockchainAppsMetaListSchema[this.swaggerApiPath].get.tags = this.tags; - blockchainAppsMetaListSchema[this.swaggerApiPath].get.summary = 'Requests list of blockchain applications for which the off-chain metadata is available'; + blockchainAppsMetaListSchema[this.swaggerApiPath].get.summary = + 'Requests list of blockchain applications for which the off-chain metadata is available'; blockchainAppsMetaListSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, - description: 'Returns a list of blockchain applications for which the off-chain metadata is available', + description: + 'Returns a list of blockchain applications for which the off-chain metadata is available', }); - blockchainAppsMetaListSchema[this.swaggerApiPath].get.parameters = transformParams('blockchainAppsMetaList', this.params); + blockchainAppsMetaListSchema[this.swaggerApiPath].get.parameters = transformParams( + 'blockchainAppsMetaList', + this.params, + ); blockchainAppsMetaListSchema[this.swaggerApiPath].get.responses = { 200: { - description: 'Returns a list of blockchain applications for which the off-chain metadata is available', + description: + 'Returns a list of blockchain applications for which the off-chain metadata is available', schema: { $ref: '#/definitions/BlockchainAppsMetaListWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/blockchainAppsMetadata.js b/services/gateway/apis/http-version3/methods/blockchainAppsMetadata.js index 268da27ac..6af42d608 100644 --- a/services/gateway/apis/http-version3/methods/blockchainAppsMetadata.js +++ b/services/gateway/apis/http-version3/methods/blockchainAppsMetadata.js @@ -24,12 +24,22 @@ module.exports = { rpcMethod: 'get.blockchain.apps.meta', tags: ['Application Off-Chain Metadata'], params: { - chainName: { optional: true, type: 'string', min: 3, max: 20, pattern: regex.NAME }, + chainName: { optional: true, type: 'string', pattern: regex.CHAIN_NAME }, displayName: { optional: true, type: 'string', min: 3, max: 20, pattern: regex.NAME }, - chainID: { optional: true, type: 'string', pattern: regex.CHAIN_ID_CSV, altSwaggerKey: 'chainIDCSV' }, + chainID: { + optional: true, + type: 'string', + pattern: regex.CHAIN_ID_CSV, + altSwaggerKey: 'chainIDCSV', + }, isDefault: { optional: true, type: 'boolean' }, network: { optional: true, type: 'string', min: 1, pattern: regex.NETWORK_CSV }, - search: { optional: true, type: 'string', pattern: regex.PARTIAL_SEARCH_NAME, altSwaggerKey: 'searchByChainAndDisplayName' }, + search: { + optional: true, + type: 'string', + pattern: regex.PARTIAL_SEARCH_NAME, + altSwaggerKey: 'searchByChainAndDisplayName', + }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10 }, offset: { optional: true, type: 'number', min: 0, default: 0 }, sort: { @@ -43,12 +53,16 @@ module.exports = { const blockchainAppsMetadataSchema = {}; blockchainAppsMetadataSchema[this.swaggerApiPath] = { get: {} }; blockchainAppsMetadataSchema[this.swaggerApiPath].get.tags = this.tags; - blockchainAppsMetadataSchema[this.swaggerApiPath].get.summary = 'Requests blockchain applications off-chain metadata'; + blockchainAppsMetadataSchema[this.swaggerApiPath].get.summary = + 'Requests blockchain applications off-chain metadata'; blockchainAppsMetadataSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns a list of blockchain applications off-chain metadata', }); - blockchainAppsMetadataSchema[this.swaggerApiPath].get.parameters = transformParams('blockchainAppsMeta', this.params); + blockchainAppsMetadataSchema[this.swaggerApiPath].get.parameters = transformParams( + 'blockchainAppsMeta', + this.params, + ); blockchainAppsMetadataSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns a list of blockchain applications off-chain metadata', diff --git a/services/gateway/apis/http-version3/methods/blockchainAppsStatistics.js b/services/gateway/apis/http-version3/methods/blockchainAppsStatistics.js index 4ce793bed..2b36baa43 100644 --- a/services/gateway/apis/http-version3/methods/blockchainAppsStatistics.js +++ b/services/gateway/apis/http-version3/methods/blockchainAppsStatistics.js @@ -27,7 +27,8 @@ module.exports = { const blockchainAppsStatsSchema = {}; blockchainAppsStatsSchema[this.swaggerApiPath] = { get: {} }; blockchainAppsStatsSchema[this.swaggerApiPath].get.tags = this.tags; - blockchainAppsStatsSchema[this.swaggerApiPath].get.summary = 'Requests blockchain application statistics'; + blockchainAppsStatsSchema[this.swaggerApiPath].get.summary = + 'Requests blockchain application statistics'; blockchainAppsStatsSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns blockchain applications statistics', diff --git a/services/gateway/apis/http-version3/methods/blockchainAppsTokenMetadata.js b/services/gateway/apis/http-version3/methods/blockchainAppsTokenMetadata.js index e6a7bd627..0c172096a 100644 --- a/services/gateway/apis/http-version3/methods/blockchainAppsTokenMetadata.js +++ b/services/gateway/apis/http-version3/methods/blockchainAppsTokenMetadata.js @@ -24,12 +24,22 @@ module.exports = { rpcMethod: 'get.blockchain.apps.meta.tokens', tags: ['Application Off-Chain Metadata'], params: { - chainName: { optional: true, type: 'string', pattern: regex.NAME }, + chainName: { optional: true, type: 'string', pattern: regex.CHAIN_NAME }, chainID: { optional: true, type: 'string', pattern: regex.CHAIN_ID }, tokenName: { optional: true, type: 'string', pattern: regex.NAME_CSV }, - tokenID: { optional: true, type: 'string', pattern: regex.TOKEN_ID_CSV, altSwaggerKey: 'tokenIDCSV' }, + tokenID: { + optional: true, + type: 'string', + pattern: regex.TOKEN_ID_CSV, + altSwaggerKey: 'tokenIDCSV', + }, network: { optional: true, type: 'string', pattern: regex.NETWORK_CSV }, - search: { optional: true, type: 'string', pattern: regex.PARTIAL_SEARCH_NAME, altSwaggerKey: 'searchByChainName' }, + search: { + optional: true, + type: 'string', + pattern: regex.PARTIAL_SEARCH_NAME, + altSwaggerKey: 'searchByChainName', + }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10 }, offset: { optional: true, type: 'number', min: 0, default: 0 }, sort: { @@ -43,12 +53,16 @@ module.exports = { const blockchainAppsTokenMetadataSchema = {}; blockchainAppsTokenMetadataSchema[this.swaggerApiPath] = { get: {} }; blockchainAppsTokenMetadataSchema[this.swaggerApiPath].get.tags = this.tags; - blockchainAppsTokenMetadataSchema[this.swaggerApiPath].get.summary = 'Requests blockchain applications off-chain metadata for tokens'; + blockchainAppsTokenMetadataSchema[this.swaggerApiPath].get.summary = + 'Requests blockchain applications off-chain metadata for tokens'; blockchainAppsTokenMetadataSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns blockchain applications off-chain metadata for tokens', }); - blockchainAppsTokenMetadataSchema[this.swaggerApiPath].get.parameters = transformParams('blockchainAppsTokensMeta', this.params); + blockchainAppsTokenMetadataSchema[this.swaggerApiPath].get.parameters = transformParams( + 'blockchainAppsTokensMeta', + this.params, + ); blockchainAppsTokenMetadataSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns a list of blockchain applications off-chain metadata for tokens', diff --git a/services/gateway/apis/http-version3/methods/blockchainAppsTokenSupportedMetadata.js b/services/gateway/apis/http-version3/methods/blockchainAppsTokenSupportedMetadata.js index 49d1a8fdf..7d52be0c6 100644 --- a/services/gateway/apis/http-version3/methods/blockchainAppsTokenSupportedMetadata.js +++ b/services/gateway/apis/http-version3/methods/blockchainAppsTokenSupportedMetadata.js @@ -38,15 +38,21 @@ module.exports = { const endpointSchema = {}; endpointSchema[this.swaggerApiPath] = { get: {} }; endpointSchema[this.swaggerApiPath].get.tags = this.tags; - endpointSchema[this.swaggerApiPath].get.summary = 'Requests blockchain applications off-chain metadata for tokens supported on the specified chainID.'; + endpointSchema[this.swaggerApiPath].get.summary = + 'Requests blockchain applications off-chain metadata for tokens supported on the specified chainID.'; endpointSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, - description: 'Returns blockchain applications off-chain metadata for tokens supported on the specified chainID.', + description: + 'Returns blockchain applications off-chain metadata for tokens supported on the specified chainID.', }); - endpointSchema[this.swaggerApiPath].get.parameters = transformParams('blockchainAppsTokensSupportedMeta', this.params); + endpointSchema[this.swaggerApiPath].get.parameters = transformParams( + 'blockchainAppsTokensSupportedMeta', + this.params, + ); endpointSchema[this.swaggerApiPath].get.responses = { 200: { - description: 'Returns a list of blockchain applications off-chain metadata for tokens supported on the specified chainID.', + description: + 'Returns a list of blockchain applications off-chain metadata for tokens supported on the specified chainID.', schema: { $ref: '#/definitions/BlockchainAppsTokenMetadataWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/blocks.js b/services/gateway/apis/http-version3/methods/blocks.js index 2338884f2..ce673be08 100644 --- a/services/gateway/apis/http-version3/methods/blocks.js +++ b/services/gateway/apis/http-version3/methods/blocks.js @@ -27,7 +27,13 @@ module.exports = { blockID: { optional: true, type: 'string', min: 64, max: 64, pattern: regex.BLOCK_ID }, height: { optional: true, type: 'string', min: 0, pattern: regex.HEIGHT_RANGE }, timestamp: { optional: true, type: 'string', min: 1, pattern: regex.TIMESTAMP_RANGE }, - generatorAddress: { optional: true, type: 'string', min: 41, max: 41, pattern: regex.ADDRESS_LISK32 }, + generatorAddress: { + optional: true, + type: 'string', + min: 41, + max: 41, + pattern: regex.ADDRESS_LISK32, + }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10, pattern: regex.LIMIT }, offset: { optional: true, type: 'number', min: 0, default: 0, pattern: regex.OFFSET }, sort: { diff --git a/services/gateway/apis/http-version3/methods/events.js b/services/gateway/apis/http-version3/methods/events.js index ea40f9bff..5317fd75d 100644 --- a/services/gateway/apis/http-version3/methods/events.js +++ b/services/gateway/apis/http-version3/methods/events.js @@ -25,10 +25,22 @@ module.exports = { tags: ['Events'], params: { transactionID: { optional: true, type: 'string', min: 64, max: 64, pattern: regex.HASH_SHA256 }, - senderAddress: { optional: true, type: 'string', min: 41, max: 41, pattern: regex.ADDRESS_LISK32 }, - topic: { optional: true, type: 'string', min: 1, pattern: regex.TOPIC_CSV }, + senderAddress: { + optional: true, + type: 'string', + min: 41, + max: 41, + pattern: regex.ADDRESS_LISK32, + }, + topic: { optional: true, type: 'string', pattern: regex.TOPIC_CSV }, module: { optional: true, type: 'string', min: 1, pattern: regex.MODULE }, - name: { optional: true, type: 'string', min: 1, pattern: regex.EVENT_NAME, altSwaggerKey: 'eventName' }, + name: { + optional: true, + type: 'string', + min: 1, + pattern: regex.EVENT_NAME, + altSwaggerKey: 'eventName', + }, blockID: { optional: true, type: 'string', min: 64, max: 64, pattern: regex.BLOCK_ID }, height: { optional: true, type: 'string', min: 1, pattern: regex.HEIGHT_RANGE }, timestamp: { optional: true, type: 'string', min: 1, pattern: regex.TIMESTAMP_RANGE }, @@ -37,15 +49,15 @@ module.exports = { sort: { optional: true, type: 'string', - enum: [ - 'height:asc', - 'height:desc', - 'timestamp:asc', - 'timestamp:desc', - ], + enum: ['height:asc', 'height:desc', 'timestamp:asc', 'timestamp:desc'], default: 'timestamp:desc', }, - order: { optional: true, type: 'string', enum: ['index:asc', 'index:desc'], default: 'index:asc' }, + order: { + optional: true, + type: 'string', + enum: ['index:asc', 'index:desc'], + default: 'index:asc', + }, }, get schema() { const eventsSchema = {}; diff --git a/services/gateway/apis/http-version3/methods/generators.js b/services/gateway/apis/http-version3/methods/generators.js index efedc11fd..ff034db81 100644 --- a/services/gateway/apis/http-version3/methods/generators.js +++ b/services/gateway/apis/http-version3/methods/generators.js @@ -23,7 +23,12 @@ module.exports = { swaggerApiPath: '/generators', rpcMethod: 'get.generators', params: { - search: { optional: true, type: 'string', pattern: regex.PARTIAL_SEARCH, altSwaggerKey: 'searchByNameAddressPubKey' }, + search: { + optional: true, + type: 'string', + pattern: regex.PARTIAL_SEARCH, + altSwaggerKey: 'searchByNameAddressPubKey', + }, limit: { optional: true, type: 'number', min: 1, max: 103, default: 10 }, offset: { optional: true, type: 'number', min: 0, default: 0 }, }, @@ -37,7 +42,10 @@ module.exports = { rpcMethod: this.rpcMethod, description: 'Returns generators list', }); - generatorSchema[this.swaggerApiPath].get.parameters = transformParams('Generators', this.params); + generatorSchema[this.swaggerApiPath].get.parameters = transformParams( + 'Generators', + this.params, + ); generatorSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns a list of generators', diff --git a/services/gateway/apis/http-version3/methods/invoke.js b/services/gateway/apis/http-version3/methods/invoke.js index 5af8ddebf..9d73e27f8 100644 --- a/services/gateway/apis/http-version3/methods/invoke.js +++ b/services/gateway/apis/http-version3/methods/invoke.js @@ -30,15 +30,20 @@ module.exports = { const invokeEndpointSchema = {}; invokeEndpointSchema[this.swaggerApiPath] = { post: {} }; invokeEndpointSchema[this.swaggerApiPath].post.tags = this.tags; - invokeEndpointSchema[this.swaggerApiPath].post.summary = 'Proxy request to directly invoke application endpoint'; + invokeEndpointSchema[this.swaggerApiPath].post.summary = + 'Proxy request to directly invoke application endpoint'; invokeEndpointSchema[this.swaggerApiPath].post.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, - description: 'Returns endpoint response from the blockchain application in its original form.', + description: + 'Returns endpoint response from the blockchain application in its original form.', }); - invokeEndpointSchema[this.swaggerApiPath].post.parameters = [{ $ref: '#/parameters/invokeParams' }]; + invokeEndpointSchema[this.swaggerApiPath].post.parameters = [ + { $ref: '#/parameters/invokeParams' }, + ]; invokeEndpointSchema[this.swaggerApiPath].post.responses = { 200: { - description: 'Returns endpoint response from the blockchain application in its original form.', + description: + 'Returns endpoint response from the blockchain application in its original form.', schema: { $ref: '#/definitions/invokeWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/modules/auth/auth.js b/services/gateway/apis/http-version3/methods/modules/auth/auth.js index d8bc4fe07..2769af8ea 100644 --- a/services/gateway/apis/http-version3/methods/modules/auth/auth.js +++ b/services/gateway/apis/http-version3/methods/modules/auth/auth.js @@ -23,7 +23,14 @@ module.exports = { rpcMethod: 'get.auth', tags: ['Auth'], params: { - address: { optional: false, type: 'string', min: 41, max: 41, pattern: regex.ADDRESS_LISK32, altSwaggerKey: 'addressRequired' }, + address: { + optional: false, + type: 'string', + min: 41, + max: 41, + pattern: regex.ADDRESS_LISK32, + altSwaggerKey: 'addressRequired', + }, }, get schema() { const authSchema = {}; diff --git a/services/gateway/apis/http-version3/methods/modules/dynamicReward/rewardAnnualInflation.js b/services/gateway/apis/http-version3/methods/modules/dynamicReward/rewardAnnualInflation.js index 56ee7a513..3d5add2fc 100644 --- a/services/gateway/apis/http-version3/methods/modules/dynamicReward/rewardAnnualInflation.js +++ b/services/gateway/apis/http-version3/methods/modules/dynamicReward/rewardAnnualInflation.js @@ -23,7 +23,13 @@ module.exports = { rpcMethod: 'get.reward.annual-inflation', tags: ['(Dynamic) Reward'], params: { - height: { optional: false, type: 'number', min: 0, integer: true, altSwaggerKey: 'blockHeightRequired' }, + height: { + optional: false, + type: 'number', + min: 0, + integer: true, + altSwaggerKey: 'blockHeightRequired', + }, }, get schema() { const rewardAnnualInflationSchema = {}; @@ -34,7 +40,10 @@ module.exports = { rpcMethod: this.rpcMethod, description: 'Returns inflation rate.', }); - rewardAnnualInflationSchema[this.swaggerApiPath].get.parameters = transformParams('reward', this.params); + rewardAnnualInflationSchema[this.swaggerApiPath].get.parameters = transformParams( + 'reward', + this.params, + ); rewardAnnualInflationSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns current inflation rate.', diff --git a/services/gateway/apis/http-version3/methods/modules/dynamicReward/rewardDefault.js b/services/gateway/apis/http-version3/methods/modules/dynamicReward/rewardDefault.js index 4c8b4850b..e644161a6 100644 --- a/services/gateway/apis/http-version3/methods/modules/dynamicReward/rewardDefault.js +++ b/services/gateway/apis/http-version3/methods/modules/dynamicReward/rewardDefault.js @@ -23,18 +23,28 @@ module.exports = { rpcMethod: 'get.reward.default', tags: ['(Dynamic) Reward'], params: { - height: { optional: false, type: 'number', min: 0, integer: true, altSwaggerKey: 'blockHeightRequired' }, + height: { + optional: false, + type: 'number', + min: 0, + integer: true, + altSwaggerKey: 'blockHeightRequired', + }, }, get schema() { const rewardDefaultSchema = {}; rewardDefaultSchema[this.swaggerApiPath] = { get: {} }; rewardDefaultSchema[this.swaggerApiPath].get.tags = this.tags; - rewardDefaultSchema[this.swaggerApiPath].get.summary = 'Requests default block generation reward at a specified height.'; + rewardDefaultSchema[this.swaggerApiPath].get.summary = + 'Requests default block generation reward at a specified height.'; rewardDefaultSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns default block generation reward at the specified height.', }); - rewardDefaultSchema[this.swaggerApiPath].get.parameters = transformParams('reward', this.params); + rewardDefaultSchema[this.swaggerApiPath].get.parameters = transformParams( + 'reward', + this.params, + ); rewardDefaultSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns the default block generation reward at the specified height.', diff --git a/services/gateway/apis/http-version3/methods/modules/legacy/legacyAccounts.js b/services/gateway/apis/http-version3/methods/modules/legacy/legacyAccounts.js index 6c13777b4..c3654a6c5 100644 --- a/services/gateway/apis/http-version3/methods/modules/legacy/legacyAccounts.js +++ b/services/gateway/apis/http-version3/methods/modules/legacy/legacyAccounts.js @@ -23,7 +23,14 @@ module.exports = { rpcMethod: 'get.legacy', tags: ['Legacy'], params: { - publicKey: { optional: false, type: 'string', min: 64, max: 64, pattern: regex.PUBLIC_KEY, altSwaggerKey: 'publicKeyRequired' }, + publicKey: { + optional: false, + type: 'string', + min: 64, + max: 64, + pattern: regex.PUBLIC_KEY, + altSwaggerKey: 'publicKeyRequired', + }, }, get schema() { const legacyAccountSchema = {}; @@ -34,7 +41,10 @@ module.exports = { rpcMethod: this.rpcMethod, description: 'Returns legacy account details', }); - legacyAccountSchema[this.swaggerApiPath].get.parameters = transformParams('legacyAccount', this.params); + legacyAccountSchema[this.swaggerApiPath].get.parameters = transformParams( + 'legacyAccount', + this.params, + ); legacyAccountSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns legacy account details for the specified publicKey', diff --git a/services/gateway/apis/http-version3/methods/modules/pos/posClaimableRewards.js b/services/gateway/apis/http-version3/methods/modules/pos/posClaimableRewards.js index 37d314da4..0a67ef481 100644 --- a/services/gateway/apis/http-version3/methods/modules/pos/posClaimableRewards.js +++ b/services/gateway/apis/http-version3/methods/modules/pos/posClaimableRewards.js @@ -31,24 +31,25 @@ module.exports = { offset: { optional: true, type: 'number', min: 0, default: 0 }, }, paramsRequired: true, - validParamPairings: [ - ['address'], - ['name'], - ['publicKey'], - ], + validParamPairings: [['address'], ['name'], ['publicKey']], get schema() { const claimableRewardsSchema = {}; claimableRewardsSchema[this.swaggerApiPath] = { get: {} }; claimableRewardsSchema[this.swaggerApiPath].get.tags = this.tags; - claimableRewardsSchema[this.swaggerApiPath].get.summary = 'Requests claimable rewards data from the PoS module.'; + claimableRewardsSchema[this.swaggerApiPath].get.summary = + 'Requests claimable rewards data from the PoS module.'; claimableRewardsSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns claimable rewards data from the PoS module.', }); - claimableRewardsSchema[this.swaggerApiPath].get.parameters = transformParams('PoS', this.params); + claimableRewardsSchema[this.swaggerApiPath].get.parameters = transformParams( + 'PoS', + this.params, + ); claimableRewardsSchema[this.swaggerApiPath].get.responses = { 200: { - description: 'Returns a list of claimable rewards from the PoS module for the specified address, publicKey or validator name.', + description: + 'Returns a list of claimable rewards from the PoS module for the specified address, publicKey or validator name.', schema: { $ref: '#/definitions/posClaimableRewardsWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/modules/pos/posRewardsLocked.js b/services/gateway/apis/http-version3/methods/modules/pos/posRewardsLocked.js index 22059b942..c72b9801b 100644 --- a/services/gateway/apis/http-version3/methods/modules/pos/posRewardsLocked.js +++ b/services/gateway/apis/http-version3/methods/modules/pos/posRewardsLocked.js @@ -31,11 +31,7 @@ module.exports = { offset: { optional: true, type: 'number', min: 0, default: 0 }, }, paramsRequired: true, - validParamPairings: [ - ['address'], - ['name'], - ['publicKey'], - ], + validParamPairings: [['address'], ['name'], ['publicKey']], get schema() { const lockedRewardsSchema = {}; lockedRewardsSchema[this.swaggerApiPath] = { get: {} }; @@ -48,7 +44,8 @@ module.exports = { lockedRewardsSchema[this.swaggerApiPath].get.parameters = transformParams('PoS', this.params); lockedRewardsSchema[this.swaggerApiPath].get.responses = { 200: { - description: 'Returns a list of rewards locked by the PoS module for the specified address, publicKey or validator name.', + description: + 'Returns a list of rewards locked by the PoS module for the specified address, publicKey or validator name.', schema: { $ref: '#/definitions/posRewardsLockedWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/modules/pos/posStakers.js b/services/gateway/apis/http-version3/methods/modules/pos/posStakers.js index 2b5bd39aa..bb8b0d76f 100644 --- a/services/gateway/apis/http-version3/methods/modules/pos/posStakers.js +++ b/services/gateway/apis/http-version3/methods/modules/pos/posStakers.js @@ -27,21 +27,24 @@ module.exports = { address: { optional: true, type: 'string', pattern: regex.ADDRESS_LISK32 }, publicKey: { optional: true, type: 'string', pattern: regex.PUBLIC_KEY }, name: { optional: true, type: 'string', pattern: regex.NAME, altSwaggerKey: 'accountName' }, - search: { optional: true, type: 'string', min: 1, pattern: regex.PARTIAL_SEARCH, altSwaggerKey: 'searchByNameAddressPubKey' }, + search: { + optional: true, + type: 'string', + min: 1, + pattern: regex.PARTIAL_SEARCH, + altSwaggerKey: 'searchByNameAddressPubKey', + }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10 }, offset: { optional: true, type: 'number', min: 0, default: 0 }, }, paramsRequired: true, - validParamPairings: [ - ['address'], - ['publicKey'], - ['name'], - ], + validParamPairings: [['address'], ['publicKey'], ['name']], get schema() { const stakersSchema = {}; stakersSchema[this.swaggerApiPath] = { get: {} }; stakersSchema[this.swaggerApiPath].get.tags = this.tags; - stakersSchema[this.swaggerApiPath].get.summary = 'Requests the list of stakers for the specified validator.'; + stakersSchema[this.swaggerApiPath].get.summary = + 'Requests the list of stakers for the specified validator.'; stakersSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns a list of stakers for the specified validator.', @@ -49,7 +52,8 @@ module.exports = { stakersSchema[this.swaggerApiPath].get.parameters = transformParams('PoS', this.params); stakersSchema[this.swaggerApiPath].get.responses = { 200: { - description: 'Returns a list of stakers for the specified validator address, publicKey or name.', + description: + 'Returns a list of stakers for the specified validator address, publicKey or name.', schema: { $ref: '#/definitions/posStakersWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/modules/pos/posStakes.js b/services/gateway/apis/http-version3/methods/modules/pos/posStakes.js index 9ba4fdf09..2468766b4 100644 --- a/services/gateway/apis/http-version3/methods/modules/pos/posStakes.js +++ b/services/gateway/apis/http-version3/methods/modules/pos/posStakes.js @@ -27,19 +27,22 @@ module.exports = { address: { optional: true, type: 'string', pattern: regex.ADDRESS_LISK32 }, publicKey: { optional: true, type: 'string', pattern: regex.PUBLIC_KEY }, name: { optional: true, type: 'string', pattern: regex.NAME, altSwaggerKey: 'validatorName' }, - search: { optional: true, type: 'string', min: 1, pattern: regex.PARTIAL_SEARCH, altSwaggerKey: 'searchByNameAddressPubKey' }, + search: { + optional: true, + type: 'string', + min: 1, + pattern: regex.PARTIAL_SEARCH, + altSwaggerKey: 'searchByNameAddressPubKey', + }, }, paramsRequired: true, - validParamPairings: [ - ['address'], - ['publicKey'], - ['name'], - ], + validParamPairings: [['address'], ['publicKey'], ['name']], get schema() { const stakesSchema = {}; stakesSchema[this.swaggerApiPath] = { get: {} }; stakesSchema[this.swaggerApiPath].get.tags = this.tags; - stakesSchema[this.swaggerApiPath].get.summary = 'Requests the list of stakes for the specified staker.'; + stakesSchema[this.swaggerApiPath].get.summary = + 'Requests the list of stakes for the specified staker.'; stakesSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns a list of stakes for the specified staker.', @@ -47,7 +50,8 @@ module.exports = { stakesSchema[this.swaggerApiPath].get.parameters = transformParams('PoS', this.params); stakesSchema[this.swaggerApiPath].get.responses = { 200: { - description: 'Returns a list of stakes for the specified staker address, publicKey or name.', + description: + 'Returns a list of stakes for the specified staker address, publicKey or name.', schema: { $ref: '#/definitions/posStakesWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/modules/pos/posValidators.js b/services/gateway/apis/http-version3/methods/modules/pos/posValidators.js index e7e92b7ae..7bc1d12a6 100644 --- a/services/gateway/apis/http-version3/methods/modules/pos/posValidators.js +++ b/services/gateway/apis/http-version3/methods/modules/pos/posValidators.js @@ -24,21 +24,48 @@ module.exports = { rpcMethod: 'get.pos.validators', tags: ['PoS'], params: { - address: { optional: true, type: 'string', pattern: regex.ADDRESS_LISK32_CSV, max: 419, altSwaggerKey: 'addressCsv' }, + address: { + optional: true, + type: 'string', + pattern: regex.ADDRESS_LISK32_CSV, + max: 419, + altSwaggerKey: 'addressCsv', + }, publicKey: { optional: true, type: 'string', pattern: regex.PUBLIC_KEY }, - name: { optional: true, type: 'string', pattern: regex.NAME_CSV, max: 209, altSwaggerKey: 'validatorNameCsv' }, - status: { optional: true, type: 'string', pattern: regex.POS_VALIDATOR_STATUS, altSwaggerKey: 'validatorStatus' }, - search: { optional: true, type: 'string', min: 1, pattern: regex.PARTIAL_SEARCH, altSwaggerKey: 'searchByNameAddressPubKey' }, + name: { + optional: true, + type: 'string', + pattern: regex.NAME_CSV, + max: 209, + altSwaggerKey: 'validatorNameCsv', + }, + status: { + optional: true, + type: 'string', + pattern: regex.POS_VALIDATOR_STATUS, + altSwaggerKey: 'validatorStatus', + }, + search: { + optional: true, + type: 'string', + min: 1, + pattern: regex.PARTIAL_SEARCH, + altSwaggerKey: 'searchByNameAddressPubKey', + }, limit: { optional: true, type: 'number', min: 1, max: 103, default: 10 }, offset: { optional: true, type: 'number', min: 0, default: 0 }, sort: { optional: true, type: 'string', enum: [ - 'commission:asc', 'commission:desc', - 'validatorWeight:desc', 'validatorWeight:asc', - 'rank:asc', 'rank:desc', - 'name:asc', 'name:desc', + 'commission:asc', + 'commission:desc', + 'validatorWeight:desc', + 'validatorWeight:asc', + 'rank:asc', + 'rank:desc', + 'name:asc', + 'name:desc', ], default: 'commission:asc', }, diff --git a/services/gateway/apis/http-version3/methods/modules/token/tokenAccountExists.js b/services/gateway/apis/http-version3/methods/modules/token/tokenAccountExists.js index 4f1f6dbc7..0a4ce8ec5 100644 --- a/services/gateway/apis/http-version3/methods/modules/token/tokenAccountExists.js +++ b/services/gateway/apis/http-version3/methods/modules/token/tokenAccountExists.js @@ -27,7 +27,12 @@ module.exports = { address: { optional: true, type: 'string', pattern: regex.ADDRESS_LISK32 }, publicKey: { optional: true, type: 'string', pattern: regex.PUBLIC_KEY }, name: { optional: true, type: 'string', pattern: regex.NAME, altSwaggerKey: 'accountName' }, - tokenID: { optional: false, type: 'string', pattern: regex.TOKEN_ID, altSwaggerKey: 'tokenIDRequired' }, + tokenID: { + optional: false, + type: 'string', + pattern: regex.TOKEN_ID, + altSwaggerKey: 'tokenIDRequired', + }, }, paramsRequired: true, validParamPairings: [ @@ -39,12 +44,16 @@ module.exports = { const accountExistsSchema = {}; accountExistsSchema[this.swaggerApiPath] = { get: {} }; accountExistsSchema[this.swaggerApiPath].get.tags = this.tags; - accountExistsSchema[this.swaggerApiPath].get.summary = 'Requests to check existence of an account for the specified token.'; + accountExistsSchema[this.swaggerApiPath].get.summary = + 'Requests to check existence of an account for the specified token.'; accountExistsSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns existence of an account for the specified token.', }); - accountExistsSchema[this.swaggerApiPath].get.parameters = transformParams('tokens', this.params); + accountExistsSchema[this.swaggerApiPath].get.parameters = transformParams( + 'tokens', + this.params, + ); accountExistsSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns existence of an account for the specified token.', diff --git a/services/gateway/apis/http-version3/methods/modules/token/tokenAvailableIDs.js b/services/gateway/apis/http-version3/methods/modules/token/tokenAvailableIDs.js index 765f8ee79..347620a1b 100644 --- a/services/gateway/apis/http-version3/methods/modules/token/tokenAvailableIDs.js +++ b/services/gateway/apis/http-version3/methods/modules/token/tokenAvailableIDs.js @@ -36,12 +36,16 @@ module.exports = { const tokenAvailableIDsSchema = {}; tokenAvailableIDsSchema[this.swaggerApiPath] = { get: {} }; tokenAvailableIDsSchema[this.swaggerApiPath].get.tags = this.tags; - tokenAvailableIDsSchema[this.swaggerApiPath].get.summary = 'Requests the list of available tokens identifiers.'; + tokenAvailableIDsSchema[this.swaggerApiPath].get.summary = + 'Requests the list of available tokens identifiers.'; tokenAvailableIDsSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns all the available token identifiers.', }); - tokenAvailableIDsSchema[this.swaggerApiPath].get.parameters = transformParams('tokens', this.params); + tokenAvailableIDsSchema[this.swaggerApiPath].get.parameters = transformParams( + 'tokens', + this.params, + ); tokenAvailableIDsSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns all the available token identifiers.', diff --git a/services/gateway/apis/http-version3/methods/modules/token/tokenBalances.js b/services/gateway/apis/http-version3/methods/modules/token/tokenBalances.js index 95334c524..05eb691fa 100644 --- a/services/gateway/apis/http-version3/methods/modules/token/tokenBalances.js +++ b/services/gateway/apis/http-version3/methods/modules/token/tokenBalances.js @@ -25,7 +25,12 @@ module.exports = { tags: ['Token'], eTag: false, params: { - address: { optional: false, type: 'string', pattern: regex.ADDRESS_LISK32 }, + address: { + optional: false, + type: 'string', + pattern: regex.ADDRESS_LISK32, + altSwaggerKey: 'addressRequired', + }, tokenID: { optional: true, type: 'string', pattern: regex.TOKEN_ID }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10, pattern: regex.LIMIT }, offset: { optional: true, type: 'number', min: 0, default: 0, pattern: regex.OFFSET }, diff --git a/services/gateway/apis/http-version3/methods/modules/token/tokenSummary.js b/services/gateway/apis/http-version3/methods/modules/token/tokenSummary.js index d87acf319..ae6b2b0f7 100644 --- a/services/gateway/apis/http-version3/methods/modules/token/tokenSummary.js +++ b/services/gateway/apis/http-version3/methods/modules/token/tokenSummary.js @@ -27,15 +27,18 @@ module.exports = { const tokenSummarySchema = {}; tokenSummarySchema[this.swaggerApiPath] = { get: {} }; tokenSummarySchema[this.swaggerApiPath].get.tags = this.tags; - tokenSummarySchema[this.swaggerApiPath].get.summary = 'Requests the tokens summary for the current blockchain application.'; + tokenSummarySchema[this.swaggerApiPath].get.summary = + 'Requests the tokens summary for the current blockchain application.'; tokenSummarySchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, - description: 'Returns the token summary. The \'supportedTokens\' is an empty list when all the tokens are supported on the blockchain application.', + description: + "Returns the token summary. The 'supportedTokens' is an empty list when all the tokens are supported on the blockchain application.", }); tokenSummarySchema[this.swaggerApiPath].get.parameters = transformParams('tokens', this.params); tokenSummarySchema[this.swaggerApiPath].get.responses = { 200: { - description: 'Returns the token summary. The \'supportedTokens\' is an empty list when all the tokens are supported on the blockchain application.', + description: + "Returns the token summary. The 'supportedTokens' is an empty list when all the tokens are supported on the blockchain application.", schema: { $ref: '#/definitions/tokenSummaryWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/modules/token/tokenTopBalances.js b/services/gateway/apis/http-version3/methods/modules/token/tokenTopBalances.js index 229cc083f..0d50dfdce 100644 --- a/services/gateway/apis/http-version3/methods/modules/token/tokenTopBalances.js +++ b/services/gateway/apis/http-version3/methods/modules/token/tokenTopBalances.js @@ -24,8 +24,19 @@ module.exports = { rpcMethod: 'get.token.balances.top', tags: ['Token'], params: { - tokenID: { optional: false, type: 'string', pattern: regex.TOKEN_ID, altSwaggerKey: 'tokenIDRequired' }, - search: { optional: true, type: 'string', min: 1, pattern: regex.PARTIAL_SEARCH, altSwaggerKey: 'searchByNameAddressPubKey' }, + tokenID: { + optional: false, + type: 'string', + pattern: regex.TOKEN_ID, + altSwaggerKey: 'tokenIDRequired', + }, + search: { + optional: true, + type: 'string', + min: 1, + pattern: regex.PARTIAL_SEARCH, + altSwaggerKey: 'searchByNameAddressPubKey', + }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10 }, offset: { optional: true, type: 'number', min: 0, default: 0 }, sort: { @@ -39,12 +50,16 @@ module.exports = { const tokenTopBalancesSchema = {}; tokenTopBalancesSchema[this.swaggerApiPath] = { get: {} }; tokenTopBalancesSchema[this.swaggerApiPath].get.tags = this.tags; - tokenTopBalancesSchema[this.swaggerApiPath].get.summary = 'Requests the list of top accounts for the specified tokenID.'; + tokenTopBalancesSchema[this.swaggerApiPath].get.summary = + 'Requests the list of top accounts for the specified tokenID.'; tokenTopBalancesSchema[this.swaggerApiPath].get.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns the list of top accounts for the specified tokenID.', }); - tokenTopBalancesSchema[this.swaggerApiPath].get.parameters = transformParams('tokens', this.params); + tokenTopBalancesSchema[this.swaggerApiPath].get.parameters = transformParams( + 'tokens', + this.params, + ); tokenTopBalancesSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns the list of top accounts for the specified tokenID.', diff --git a/services/gateway/apis/http-version3/methods/modules/validators/validator.js b/services/gateway/apis/http-version3/methods/modules/validators/validator.js index 996a1c9c5..19f63f400 100644 --- a/services/gateway/apis/http-version3/methods/modules/validators/validator.js +++ b/services/gateway/apis/http-version3/methods/modules/validators/validator.js @@ -23,7 +23,14 @@ module.exports = { rpcMethod: 'get.validator', tags: ['Validator'], params: { - address: { optional: false, type: 'string', min: 41, max: 41, pattern: regex.ADDRESS_LISK32, altSwaggerKey: 'addressRequired' }, + address: { + optional: false, + type: 'string', + min: 41, + max: 41, + pattern: regex.ADDRESS_LISK32, + altSwaggerKey: 'addressRequired', + }, }, get schema() { const validatorSchema = {}; diff --git a/services/gateway/apis/http-version3/methods/modules/validators/validatorValidateBLSKey.js b/services/gateway/apis/http-version3/methods/modules/validators/validatorValidateBLSKey.js index 6776be6e8..d4c82a037 100644 --- a/services/gateway/apis/http-version3/methods/modules/validators/validatorValidateBLSKey.js +++ b/services/gateway/apis/http-version3/methods/modules/validators/validatorValidateBLSKey.js @@ -32,15 +32,19 @@ module.exports = { const validateBLSKeySchema = {}; validateBLSKeySchema[this.swaggerApiPath] = { post: {} }; validateBLSKeySchema[this.swaggerApiPath].post.tags = this.tags; - validateBLSKeySchema[this.swaggerApiPath].post.summary = 'Validates a BLS key against its corresponding Proof of Possession.'; + validateBLSKeySchema[this.swaggerApiPath].post.summary = + 'Validates a BLS key against its corresponding Proof of Possession.'; validateBLSKeySchema[this.swaggerApiPath].post.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Validates a BLS key against its corresponding Proof of Possession.', }); - validateBLSKeySchema[this.swaggerApiPath].post.parameters = [{ $ref: '#/parameters/validateBLSKeyParams' }]; + validateBLSKeySchema[this.swaggerApiPath].post.parameters = [ + { $ref: '#/parameters/validateBLSKeyParams' }, + ]; validateBLSKeySchema[this.swaggerApiPath].post.responses = { 200: { - description: 'Returns a boolean representing the validity of the supplied BLS key and Proof of Possession.', + description: + 'Returns a boolean representing the validity of the supplied BLS key and Proof of Possession.', schema: { $ref: '#/definitions/blsKeyValidationWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/networkPeers.js b/services/gateway/apis/http-version3/methods/networkPeers.js index e10bc75d2..29e7d71c5 100644 --- a/services/gateway/apis/http-version3/methods/networkPeers.js +++ b/services/gateway/apis/http-version3/methods/networkPeers.js @@ -26,11 +26,28 @@ module.exports = { params: { ip: { optional: true, type: 'string', pattern: regex.IP }, networkVersion: { optional: true, type: 'string', pattern: regex.NETWORK_VERSION }, - state: { optional: true, type: 'string', enum: ['connected', 'disconnected', 'any'], default: 'any', lowercase: true }, - height: { optional: true, min: 0, type: 'number', integer: true }, + state: { + optional: true, + type: 'string', + enum: ['connected', 'disconnected', 'any'], + default: 'any', + lowercase: true, + }, + height: { + optional: true, + min: 0, + type: 'number', + integer: true, + altSwaggerKey: 'heightWithoutRange', + }, limit: { optional: true, min: 1, max: 100, type: 'number', integer: true, default: 10 }, offset: { optional: true, min: 0, type: 'number', integer: true, default: 0 }, - sort: { optional: true, type: 'string', enum: ['height:asc', 'height:desc', 'networkVersion:asc', 'networkVersion:desc'], default: 'height:desc' }, + sort: { + optional: true, + type: 'string', + enum: ['height:asc', 'height:desc', 'networkVersion:asc', 'networkVersion:desc'], + default: 'height:desc', + }, }, get schema() { const networkPeerSchema = {}; diff --git a/services/gateway/apis/http-version3/methods/postTransactions.js b/services/gateway/apis/http-version3/methods/postTransactions.js index 42c9258a5..2d071b17d 100644 --- a/services/gateway/apis/http-version3/methods/postTransactions.js +++ b/services/gateway/apis/http-version3/methods/postTransactions.js @@ -35,7 +35,9 @@ module.exports = { rpcMethod: this.rpcMethod, description: 'Post transactions and return transactionID', }); - postTransactionSchema[this.swaggerApiPath].post.parameters = [{ $ref: '#/parameters/transaction' }]; + postTransactionSchema[this.swaggerApiPath].post.parameters = [ + { $ref: '#/parameters/transaction' }, + ]; postTransactionSchema[this.swaggerApiPath].post.responses = { 200: { description: 'Broadcast transaction', diff --git a/services/gateway/apis/http-version3/methods/transactions.js b/services/gateway/apis/http-version3/methods/transactions.js index 464b6c6d1..789b63551 100644 --- a/services/gateway/apis/http-version3/methods/transactions.js +++ b/services/gateway/apis/http-version3/methods/transactions.js @@ -26,9 +26,29 @@ module.exports = { params: { transactionID: { optional: true, type: 'string', min: 64, max: 64, pattern: regex.HASH_SHA256 }, moduleCommand: { optional: true, type: 'string', min: 1, pattern: regex.MODULE_COMMAND }, - senderAddress: { optional: true, type: 'string', min: 41, max: 41, pattern: regex.ADDRESS_LISK32 }, - address: { optional: true, type: 'string', min: 41, max: 41, pattern: regex.ADDRESS_LISK32, altSwaggerKey: 'senderAndRecipientAddress' }, - recipientAddress: { optional: true, type: 'string', min: 41, max: 41, pattern: regex.ADDRESS_LISK32 }, + senderAddress: { + optional: true, + type: 'string', + min: 41, + max: 41, + pattern: regex.ADDRESS_LISK32, + }, + address: { + optional: true, + type: 'string', + min: 41, + max: 41, + pattern: regex.ADDRESS_LISK32, + altSwaggerKey: 'senderAndRecipientAddress', + }, + recipientAddress: { + optional: true, + type: 'string', + min: 41, + max: 41, + pattern: regex.ADDRESS_LISK32, + }, + receivingChainID: { optional: true, type: 'string', pattern: regex.CHAIN_ID }, blockID: { optional: true, type: 'string', min: 64, max: 64, pattern: regex.HASH_SHA256 }, height: { optional: true, type: 'string', min: 1, pattern: regex.HEIGHT_RANGE }, timestamp: { optional: true, type: 'string', min: 1, pattern: regex.TIMESTAMP_RANGE }, @@ -36,6 +56,7 @@ module.exports = { optional: true, type: 'string', pattern: regex.TRANSACTION_EXECUTION_STATUS, + default: 'pending,successful,failed', }, nonce: { optional: true, type: 'string', min: 1, pattern: regex.NONCE }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10 }, @@ -46,7 +67,12 @@ module.exports = { enum: ['height:asc', 'height:desc', 'timestamp:asc', 'timestamp:desc'], default: 'timestamp:desc', }, - order: { optional: true, type: 'string', enum: ['index:asc', 'index:desc'], default: 'index:asc' }, + order: { + optional: true, + type: 'string', + enum: ['index:asc', 'index:desc'], + default: 'index:asc', + }, }, get schema() { const transactionSchema = {}; @@ -57,7 +83,10 @@ module.exports = { rpcMethod: this.rpcMethod, description: 'Returns transactions data', }); - transactionSchema[this.swaggerApiPath].get.parameters = transformParams('transactions', this.params); + transactionSchema[this.swaggerApiPath].get.parameters = transformParams( + 'transactions', + this.params, + ); transactionSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns a list of transactions', diff --git a/services/gateway/apis/http-version3/methods/transactionsDryRun.js b/services/gateway/apis/http-version3/methods/transactionsDryRun.js index 37513de10..1b216e1c8 100644 --- a/services/gateway/apis/http-version3/methods/transactionsDryRun.js +++ b/services/gateway/apis/http-version3/methods/transactionsDryRun.js @@ -37,7 +37,12 @@ module.exports = { fee: { type: 'string', pattern: regex.FEE }, nonce: { type: 'string', min: 1, pattern: regex.NONCE }, senderPublicKey: { type: 'string', pattern: regex.PUBLIC_KEY }, - signatures: { type: 'array', optional: true, min: 0, items: { type: 'string', pattern: regex.HASH_SHA512 } }, + signatures: { + type: 'array', + optional: true, + min: 0, + items: { type: 'string', pattern: regex.HASH_SHA512 }, + }, params: { type: 'object', optional: false, minProps: 0 }, }, }, @@ -55,10 +60,12 @@ module.exports = { rpcMethod: this.rpcMethod, description: 'Dry run transactions.', }); - dryRunTransactionSchema[this.swaggerApiPath].post.parameters = [{ $ref: '#/parameters/dryrunTransaction' }]; + dryRunTransactionSchema[this.swaggerApiPath].post.parameters = [ + { $ref: '#/parameters/dryrunTransaction' }, + ]; dryRunTransactionSchema[this.swaggerApiPath].post.responses = { 200: { - description: 'Dry run transactions. \'errorMessage\' is available only when \'result: -1\'.', + description: "Dry run transactions. 'errorMessage' is available only when 'result: -1'.", schema: { $ref: '#/definitions/dryTransactionWithEnvelope', }, diff --git a/services/gateway/apis/http-version3/methods/transactionsEstimateFees.js b/services/gateway/apis/http-version3/methods/transactionsEstimateFees.js index da539d54a..4f0893dca 100644 --- a/services/gateway/apis/http-version3/methods/transactionsEstimateFees.js +++ b/services/gateway/apis/http-version3/methods/transactionsEstimateFees.js @@ -35,7 +35,12 @@ module.exports = { fee: { optional: true, type: 'string', pattern: regex.FEE }, nonce: { optional: false, type: 'string', pattern: regex.NONCE }, senderPublicKey: { optional: false, type: 'string', pattern: regex.PUBLIC_KEY }, - signatures: { optional: true, type: 'array', min: 0, items: { type: 'string', pattern: regex.HASH_SHA512 } }, + signatures: { + optional: true, + type: 'array', + min: 0, + items: { type: 'string', pattern: regex.HASH_SHA512 }, + }, params: { optional: false, type: 'object', minProps: 0 }, }, altSwaggerKey: 'transactionEstimateFees', @@ -45,12 +50,15 @@ module.exports = { const transactionsEstimateFeesSchema = {}; transactionsEstimateFeesSchema[this.swaggerApiPath] = { post: {} }; transactionsEstimateFeesSchema[this.swaggerApiPath].post.tags = this.tags; - transactionsEstimateFeesSchema[this.swaggerApiPath].post.summary = 'Requests estimated fees for the transaction.'; + transactionsEstimateFeesSchema[this.swaggerApiPath].post.summary = + 'Requests estimated fees for the transaction.'; transactionsEstimateFeesSchema[this.swaggerApiPath].post.description = getSwaggerDescription({ rpcMethod: this.rpcMethod, description: 'Returns estimated fees for the transaction.', }); - transactionsEstimateFeesSchema[this.swaggerApiPath].post.parameters = [{ $ref: '#/parameters/transactionEstimateFees' }]; + transactionsEstimateFeesSchema[this.swaggerApiPath].post.parameters = [ + { $ref: '#/parameters/transactionEstimateFees' }, + ]; transactionsEstimateFeesSchema[this.swaggerApiPath].post.responses = { 200: { description: 'Returns estimated fees for the given transaction.', diff --git a/services/gateway/apis/http-version3/methods/transactionsStatistics.js b/services/gateway/apis/http-version3/methods/transactionsStatistics.js index 44320ba04..1418e44d2 100644 --- a/services/gateway/apis/http-version3/methods/transactionsStatistics.js +++ b/services/gateway/apis/http-version3/methods/transactionsStatistics.js @@ -36,7 +36,10 @@ module.exports = { rpcMethod: this.rpcMethod, description: 'Returns transaction statistics', }); - transactionSchema[this.swaggerApiPath].get.parameters = transformParams('transactions', this.params); + transactionSchema[this.swaggerApiPath].get.parameters = transformParams( + 'transactions', + this.params, + ); transactionSchema[this.swaggerApiPath].get.responses = { 200: { description: 'Returns a list of transactions statistics by date or month', diff --git a/services/gateway/apis/http-version3/swagger/apiJson.json b/services/gateway/apis/http-version3/swagger/apiJson.json index b8ddc4210..8664baf7f 100644 --- a/services/gateway/apis/http-version3/swagger/apiJson.json +++ b/services/gateway/apis/http-version3/swagger/apiJson.json @@ -1,105 +1,102 @@ { - "apiJson": { - "swagger": "2.0", - "info": { - "title": "Lisk Service API", - "version": "0.7.0", - "contact": { - "email": "admin@lisk.com" - }, - "description": "# Lisk Service API Documentation\n\nLisk Service is a middleware web application that interacts with the entire Lisk ecosystem in various aspects, such as accessing blockchain data (both on-chain and off-chain information), retrieving and storing market data, and exporting account history.\n\nThe main focus of this project is to provide data to Lisk blockchain users by serving them in a standardized JSON format and exposing a public RESTful API. The project is split into several smaller components (microservices) each focused on serving a single specific purpose. \n\nAs a pure backend project, it is designed to meet the requirements of front-end developers, especially Lisk Desktop and Lisk Mobile.\n\nThe API can be accessed at `https://service.lisk.com`.\nIt is also possible to access the Testnet network at `https://testnet-service.lisk.com`.\n\nThe Lisk Service API is compatible with RESTful guidelines. The specification below contains numerous examples of how to use the API in practice.\n\n## Endpoint Logic\n\nThe logic of the endpoints are as follows:\n- the structure is always based on `///`\n\n## Responses\n\nAll responses are returned in the JSON format - `application/json`.\n\nEach API request has the following structure:\n\n```\n{\n \"data\": {}, // Contains the requested data\n \"meta\": {}, // Contains additional metadata, e.g. the values of `limit` and `offset`\n}\n```\n\nAnd, the error responses adhere to the following structure:\n\n```\n{\n \"error\": true,\n \"message\": \"Not found\", // Contains the error message\n}\n```", - "license": { - "name": "GPL v3.0", - "url": "https://www.gnu.org/licenses/gpl-3.0.en.html" - } - }, - "basePath": "/api/v3", - "tags": [ - { - "name": "Blocks", - "description": "API calls for blocks from the Lisk network." - }, - { - "name": "Transactions", - "description": "API calls for the transactions on the Lisk network." - }, - { - "name": "Events", - "description": "Lisk Events API calls." - }, - { - "name": "Generators", - "description": "Lisk Generators API calls." - }, - { - "name": "Auth", - "description": "Lisk Auth module API calls." - }, - { - "name": "Validator", - "description": "Lisk Validators module API calls." - }, - { - "name": "Token", - "description": "Lisk Token module API calls." - }, - { - "name": "Fee", - "description": "Lisk transaction fee recommendation API calls." - }, - { - "name": "PoS", - "description": "Lisk PoS module API calls." - }, - { - "name": "(Dynamic) Reward", - "description": "Lisk (Dynamic) Reward module API calls." - }, - { - "name": "Legacy", - "description": "Lisk Legacy module API calls." - }, - { - "name": "Network", - "description": "Lisk Network utility API calls." - }, - { - "name": "Schemas", - "description": "Lisk Schema API calls." - }, - { - "name": "Interoperability", - "description": "Lisk blockchain Interoperability related API calls." - }, - { - "name": "Application Off-Chain Metadata", - "description": "Available application off-chain metadata API calls." - }, - { - "name": "Index Status", - "description": "Lisk Service real-time indexing status API calls." - }, - { - "name": "Proxy", - "description": "Proxy application endpoint invocations via Lisk Service." - }, - { - "name": "Market", - "description": "Market prices related API calls." - }, - { - "name": "Badge", - "description": "Badge module related API calls." - }, - { - "name": "Anchor", - "description": "Anchor module related API calls." - } - ], - "schemes": [ - "http", - "https" - ], - "paths": {} - } + "apiJson": { + "swagger": "2.0", + "info": { + "title": "Lisk Service API", + "version": "0.7.0", + "contact": { + "email": "admin@lisk.com" + }, + "description": "# Lisk Service API Documentation\n\nLisk Service is a middleware web application that interacts with the entire Lisk ecosystem in various aspects, such as accessing blockchain data (both on-chain and off-chain information), retrieving and storing market data, and exporting account history.\n\nThe main focus of this project is to provide data to Lisk blockchain users by serving them in a standardized JSON format and exposing a public RESTful API. The project is split into several smaller components (microservices) each focused on serving a single specific purpose. \n\nAs a pure backend project, it is designed to meet the requirements of front-end developers, especially Lisk Desktop and Lisk Mobile.\n\nThe API can be accessed at `https://service.lisk.com`.\nIt is also possible to access the Testnet network at `https://testnet-service.lisk.com`.\n\nThe Lisk Service API is compatible with RESTful guidelines. The specification below contains numerous examples of how to use the API in practice.\n\n## Endpoint Logic\n\nThe logic of the endpoints are as follows:\n- the structure is always based on `///`\n\n## Responses\n\nAll responses are returned in the JSON format - `application/json`.\n\nEach API request has the following structure:\n\n```\n{\n \"data\": {}, // Contains the requested data\n \"meta\": {}, // Contains additional metadata, e.g. the values of `limit` and `offset`\n}\n```\n\nAnd, the error responses adhere to the following structure:\n\n```\n{\n \"error\": true,\n \"message\": \"Not found\", // Contains the error message\n}\n```", + "license": { + "name": "GPL v3.0", + "url": "https://www.gnu.org/licenses/gpl-3.0.en.html" + } + }, + "basePath": "/api/v3", + "tags": [ + { + "name": "Blocks", + "description": "API calls for blocks from the Lisk network." + }, + { + "name": "Transactions", + "description": "API calls for the transactions on the Lisk network." + }, + { + "name": "Events", + "description": "Lisk Events API calls." + }, + { + "name": "Generators", + "description": "Lisk Generators API calls." + }, + { + "name": "Auth", + "description": "Lisk Auth module API calls." + }, + { + "name": "Validator", + "description": "Lisk Validators module API calls." + }, + { + "name": "Token", + "description": "Lisk Token module API calls." + }, + { + "name": "Fee", + "description": "Lisk transaction fee recommendation API calls." + }, + { + "name": "PoS", + "description": "Lisk PoS module API calls." + }, + { + "name": "(Dynamic) Reward", + "description": "Lisk (Dynamic) Reward module API calls." + }, + { + "name": "Legacy", + "description": "Lisk Legacy module API calls." + }, + { + "name": "Network", + "description": "Lisk Network utility API calls." + }, + { + "name": "Schemas", + "description": "Lisk Schema API calls." + }, + { + "name": "Interoperability", + "description": "Lisk blockchain Interoperability related API calls." + }, + { + "name": "Application Off-Chain Metadata", + "description": "Available application off-chain metadata API calls." + }, + { + "name": "Index Status", + "description": "Lisk Service real-time indexing status API calls." + }, + { + "name": "Proxy", + "description": "Proxy application endpoint invocations via Lisk Service." + }, + { + "name": "Market", + "description": "Market prices related API calls." + }, + { + "name": "Badge", + "description": "Badge module related API calls." + }, + { + "name": "Anchor", + "description": "Anchor module related API calls." + } + ], + "schemes": ["http", "https"], + "paths": {} + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/auth.json b/services/gateway/apis/http-version3/swagger/definitions/auth.json index be12ca713..faea4596c 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/auth.json +++ b/services/gateway/apis/http-version3/swagger/definitions/auth.json @@ -1,68 +1,63 @@ { - "authWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "description": "Auth information for a given address.", - "type": "object", - "properties": { - "nonce": { - "type": "string", - "example": "1" - }, - "numberOfSignatures": { - "type": "integer", - "format": "int32", - "example": "1", - "description": "The number of private keys that must sign a transaction." - }, - "mandatoryKeys": { - "type": "array", - "items": { - "type": "string", - "example": "689b9a40aa11cbc8327d5eeebed9a1052940730f9c34cffb33ae591131141349", - "description": "Keys that must necessarily sign the transaction." - } - }, - "optionalKeys": { - "type": "array", - "items": { - "type": "string", - "example": "478842a844914f18a1c620a6494bf9931d0a862e96212bf5fc6f3ca18658febe", - "description": "Keys that can optionally sign the transaction." - } - } - } - }, - "meta": { - "type": "object", - "required": [ - "address" - ], - "properties": { - "address": { - "type": "string", - "format": "address", - "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is 41 character long identifier that begins with `lsk`." - }, - "publicKey": { - "type": "string", - "format": "publicKey", - "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", - "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owner's private key." - }, - "name": { - "type": "string", - "example": "genesis_84", - "description": "Registered name of account" - } - } - } - } - } + "authWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "description": "Auth information for a given address.", + "type": "object", + "properties": { + "nonce": { + "type": "string", + "example": "1" + }, + "numberOfSignatures": { + "type": "integer", + "format": "int32", + "example": "1", + "description": "The number of private keys that must sign a transaction." + }, + "mandatoryKeys": { + "type": "array", + "items": { + "type": "string", + "example": "689b9a40aa11cbc8327d5eeebed9a1052940730f9c34cffb33ae591131141349", + "description": "Keys that must necessarily sign the transaction." + } + }, + "optionalKeys": { + "type": "array", + "items": { + "type": "string", + "example": "478842a844914f18a1c620a6494bf9931d0a862e96212bf5fc6f3ca18658febe", + "description": "Keys that can optionally sign the transaction." + } + } + } + }, + "meta": { + "type": "object", + "required": ["address"], + "properties": { + "address": { + "type": "string", + "format": "address", + "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", + "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is 41 character long identifier that begins with `lsk`." + }, + "publicKey": { + "type": "string", + "format": "publicKey", + "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", + "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owner's private key." + }, + "name": { + "type": "string", + "example": "genesis_84", + "description": "Registered name of account" + } + } + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/blockchainApps.json b/services/gateway/apis/http-version3/swagger/definitions/blockchainApps.json index ea43a3c1a..161926c9f 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/blockchainApps.json +++ b/services/gateway/apis/http-version3/swagger/definitions/blockchainApps.json @@ -1,12 +1,7 @@ { "BlockchainApp": { "type": "object", - "required": [ - "chainName", - "chainID", - "state", - "address" - ], + "required": ["chainName", "chainID", "state", "address"], "properties": { "chainName": { "type": "string", @@ -49,10 +44,7 @@ }, "escrow": { "type": "array", - "required": [ - "tokenID", - "amount" - ], + "required": ["tokenID", "amount"], "items": { "type": "object", "properties": { @@ -73,10 +65,7 @@ }, "BlockchainAppsWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of blockchain applications", @@ -92,10 +81,7 @@ }, "blockchainAppsStatsEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "Blockchain applications statistics", @@ -137,11 +123,7 @@ }, "BlockchainAppMetaList": { "type": "object", - "required": [ - "chainName", - "chainID", - "networkType" - ], + "required": ["chainName", "chainID", "networkType"], "properties": { "chainName": { "type": "string", @@ -162,10 +144,7 @@ }, "BlockchainAppsMetaListWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of blockchain applications for which off-chain data is available", @@ -246,10 +225,7 @@ "type": "array", "items": { "type": "object", - "required": [ - "http", - "ws" - ], + "required": ["http", "ws"], "properties": { "http": { "type": "string", @@ -271,10 +247,7 @@ }, "logo": { "type": "object", - "required": [ - "png", - "svg" - ], + "required": ["png", "svg"], "properties": { "png": { "type": "string", @@ -300,10 +273,7 @@ }, "explorers": { "type": "array", - "required": [ - "url", - "txnPage" - ], + "required": ["url", "txnPage"], "items": { "type": "object", "properties": { @@ -324,10 +294,7 @@ "type": "array", "items": { "type": "object", - "required": [ - "url", - "maintainer" - ], + "required": ["url", "maintainer"], "properties": { "url": { "type": "string", @@ -351,10 +318,7 @@ }, "BlockchainAppsMetadataWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of blockchain applications with off-chain metadata", @@ -469,10 +433,7 @@ }, "BlockchainAppsTokenMetadataWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of blockchain applications off-chain metadata for tokens", diff --git a/services/gateway/apis/http-version3/swagger/definitions/blocks.json b/services/gateway/apis/http-version3/swagger/definitions/blocks.json index 90e0aced2..903e0428c 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/blocks.json +++ b/services/gateway/apis/http-version3/swagger/definitions/blocks.json @@ -1,260 +1,251 @@ { - "Block": { - "type": "object", - "required": [ - "id", - "version", - "height", - "timestamp", - "generatorAddress", - "transactionRoot", - "assetsRoot", - "stateRoot", - "maxHeightPrevoted", - "maxHeightGenerated", - "validatorsHash", - "aggregateCommit", - "signature", - "isFinal" - ], - "properties": { - "id": { - "type": "string", - "format": "id", - "minLength": 64, - "maxLength": 64, - "example": "01967dba384998026fe028119bd099ecf073c05c045381500a93d1a7c7307e5b", - "description": "Unique identifier of the block.\nDerived from the block signature." - }, - "version": { - "type": "integer", - "example": 0, - "minimum": 0, - "description": "Lisk protocol version to which this block adheres to." - }, - "height": { - "type": "integer", - "example": 8344448, - "minimum": 0, - "description": "Height of the network, when the block got forged.\nThe height of the networks represents the number of blocks, that have been forged on the network since Genesis Block." - }, - "timestamp": { - "type": "integer", - "example": 85944650, - "description": "UNIX Timestamp" - }, - "previousBlockId": { - "type": "string", - "format": "id", - "example": "827080df7829cd2757501a85f80a0767fcb40615304b701c2890dbbaf214bb89", - "description": "ID of the parent block." - }, - "generator": { - "type": "object", - "required": [ - "address", - "name" - ], - "properties": { - "address": { - "type": "string", - "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "description": "Address of the block generator." - }, - "name": { - "type": "string", - "example": "genesis_3", - "description": "Name of the block generator." - }, - "publicKey": { - "type": "string", - "example": "32ddb97e8d7e607a14fef8449c2a2180cd74a51f67b04a50a4b1917d3ca8a52e", - "description": "Public key of the block generator." - } - } - }, - "transactionRoot": { - "type": "string", - "format": "hex", - "example": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "description": "Merkle root of the block payload.\nThe block payload comprises the transactions contained within the block." - }, - "assetsRoot": { - "type": "string", - "example": "6e904b2f678eb3b6c3042acb188a607d903d441d61508d047fe36b3c982995c8", - "description": "Merkle root of the block assets array." - }, - "stateRoot": { - "type": "string", - "example": "95d9b1773b78034b8df9ac741c903b881da761d8ba002a939de28a4b86982c04", - "description": "The root of the Sparse Merkle Tree that is computed from the state of the blockchain." - }, - "maxHeightGenerated": { - "type": "integer", - "example": 559421 - }, - "maxHeightPrevoted": { - "type": "integer", - "example": 559434 - }, - "validatorsHash": { - "type": "string", - "example": "ad0076aa444f6cda608bb163c3bd77d9bf172f1d2803d53095bc0f277db6bcb3", - "description": "Hash to authenticate the active set of validators." - }, - "aggregateCommit": { - "type": "object", - "properties": { - "height": { - "type": "number", - "example": 166 - }, - "aggregationBits": { - "type": "string", - "example": "ffffffffffffffffffffffff1f" - }, - "certificateSignature": { - "type": "string", - "example": "a7db952f87db29718c40afca9a9fb2f6b605f8588c1c99e41e92f26ec005e6d14327c33051fa383fe903b7040d16c7441570167a73d9468aa16a6720c765b3f22aeca42102c45b4616fd7543d7a0649e0fa934e0de1973486eede9d56f014f9f" - } - } - }, - "numberOfTransactions": { - "type": "number", - "description": "The number of transactions processed in the block.", - "example": 10 - }, - "numberOfAssets": { - "type": "number", - "description": "The number of assets in the block.", - "example": 10 - }, - "numberOfEvents": { - "type": "number", - "description": "The number of events in the block.", - "example": 10 - }, - "totalBurnt": { - "type": "string", - "example": "0", - "description": "The total amount of Lisk (in Beddows) that was burnt in this block. It is the sum total of minimum fees for each transaction contained within the block." - }, - "networkFee": { - "type": "string", - "example": "15000000", - "description": "TThe total amount of Lisk (in Beddows) that the block generator makes from the transaction fees after burning the minimum fees." - }, - "totalForged": { - "type": "string", - "example": "65000000", - "description": "Total amount of Lisk (in Beddows) that has been forged in this block. It is a sum of all the transaction fees and the block reward." - }, - "reward": { - "type": "string", - "example": "50000000", - "description": "The amount of Lisk (in Beddows) that was rewarded to the block generator." - }, - "signature": { - "type": "string", - "format": "signature", - "example": "a3733254aad600fa787d6223002278c3400be5e8ed4763ae27f9a15b80e20c22ac9259dc926f4f4cabdf0e4f8cec49308fa8296d71c288f56b9d1e11dfe81e07", - "description": "Derived from a SHA-256 hash of the block header,\nthat is signed by the private key of the delegate who forged the block." - }, - "isFinal": { - "type": "boolean", - "example": "true" - } - } - }, - "BlocksWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "description": "List of blocks", - "type": "array", - "items": { - "$ref": "#/definitions/Block" - } - }, - "meta": { - "$ref": "#/definitions/pagination" - } - } - }, - "BlockAsset": { - "type": "object", - "required": [ - "block", - "assets" - ], - "properties": { - "block": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "01967dba384998026fe028119bd099ecf073c05c045381500a93d1a7c7307e5b" - }, - "height": { - "type": "string", - "example": "166" - }, - "timestamp": { - "type": "integer", - "example": 85944650 - } - } - }, - "assets": { - "type": "array", - "required": [ - "module", - "data" - ], - "items": { - "type": "object", - "properties": { - "module": { - "type": "string", - "example": "random", - "description": "Name of the blockchain module associated with the assets." - }, - "data": { - "type": "object", - "properties": { - "seedReveal": { - "type": "string", - "example": "c555338417025a5b2b9278304f8a96be" - } - }, - "description": "The data object schema varies by module. The exact schema can be found from the `/schemas` endpoint." - } - } - } - } - } - }, - "BlocksAssetsWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "description": "List of block assets", - "type": "array", - "items": { - "$ref": "#/definitions/BlockAsset" - } - }, - "meta": { - "$ref": "#/definitions/pagination" - } - } - } + "Block": { + "type": "object", + "required": [ + "id", + "version", + "height", + "timestamp", + "generatorAddress", + "transactionRoot", + "assetsRoot", + "stateRoot", + "eventRoot", + "maxHeightPrevoted", + "maxHeightGenerated", + "validatorsHash", + "aggregateCommit", + "signature", + "isFinal" + ], + "properties": { + "id": { + "type": "string", + "format": "id", + "minLength": 64, + "maxLength": 64, + "example": "01967dba384998026fe028119bd099ecf073c05c045381500a93d1a7c7307e5b", + "description": "Unique identifier of the block.\nDerived from the block signature." + }, + "version": { + "type": "integer", + "example": 0, + "minimum": 0, + "description": "Lisk protocol version to which this block adheres to." + }, + "height": { + "type": "integer", + "example": 8344448, + "minimum": 0, + "description": "Height of the network, when the block got forged.\nThe height of the networks represents the number of blocks, that have been forged on the network since Genesis Block." + }, + "timestamp": { + "type": "integer", + "example": 85944650, + "description": "UNIX Timestamp" + }, + "previousBlockId": { + "type": "string", + "format": "id", + "example": "827080df7829cd2757501a85f80a0767fcb40615304b701c2890dbbaf214bb89", + "description": "ID of the parent block." + }, + "generator": { + "type": "object", + "required": ["address", "name"], + "properties": { + "address": { + "type": "string", + "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", + "description": "Address of the block generator." + }, + "name": { + "type": "string", + "example": "genesis_3", + "description": "Name of the block generator." + }, + "publicKey": { + "type": "string", + "example": "32ddb97e8d7e607a14fef8449c2a2180cd74a51f67b04a50a4b1917d3ca8a52e", + "description": "Public key of the block generator." + } + } + }, + "transactionRoot": { + "type": "string", + "format": "hex", + "example": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "description": "Merkle root of the block payload.\nThe block payload comprises the transactions contained within the block." + }, + "assetsRoot": { + "type": "string", + "example": "6e904b2f678eb3b6c3042acb188a607d903d441d61508d047fe36b3c982995c8", + "description": "Merkle root of the block assets array." + }, + "stateRoot": { + "type": "string", + "example": "95d9b1773b78034b8df9ac741c903b881da761d8ba002a939de28a4b86982c04", + "description": "The root of the Sparse Merkle Tree that is computed from the state of the blockchain." + }, + "eventRoot": { + "type": "string", + "example": "7dee8ae1899582aabb0c4b967ceda6874329dba57b5eb23d7c62890917a55cbd", + "description": "Merkle root of the events array." + }, + "maxHeightGenerated": { + "type": "integer", + "example": 559421 + }, + "maxHeightPrevoted": { + "type": "integer", + "example": 559434 + }, + "validatorsHash": { + "type": "string", + "example": "ad0076aa444f6cda608bb163c3bd77d9bf172f1d2803d53095bc0f277db6bcb3", + "description": "Hash to authenticate the active set of validators." + }, + "aggregateCommit": { + "type": "object", + "properties": { + "height": { + "type": "number", + "example": 166 + }, + "aggregationBits": { + "type": "string", + "example": "ffffffffffffffffffffffff1f" + }, + "certificateSignature": { + "type": "string", + "example": "a7db952f87db29718c40afca9a9fb2f6b605f8588c1c99e41e92f26ec005e6d14327c33051fa383fe903b7040d16c7441570167a73d9468aa16a6720c765b3f22aeca42102c45b4616fd7543d7a0649e0fa934e0de1973486eede9d56f014f9f" + } + } + }, + "numberOfTransactions": { + "type": "number", + "description": "The number of transactions processed in the block.", + "example": 10 + }, + "numberOfAssets": { + "type": "number", + "description": "The number of assets in the block.", + "example": 10 + }, + "numberOfEvents": { + "type": "number", + "description": "The number of events in the block.", + "example": 10 + }, + "totalBurnt": { + "type": "string", + "example": "0", + "description": "The total amount of Lisk (in Beddows) that was burnt in this block. It is the sum total of minimum fees for each transaction contained within the block." + }, + "networkFee": { + "type": "string", + "example": "15000000", + "description": "TThe total amount of Lisk (in Beddows) that the block generator makes from the transaction fees after burning the minimum fees." + }, + "totalForged": { + "type": "string", + "example": "65000000", + "description": "Total amount of Lisk (in Beddows) that has been forged in this block. It is a sum of all the transaction fees and the block reward." + }, + "reward": { + "type": "string", + "example": "50000000", + "description": "The amount of Lisk (in Beddows) that was rewarded to the block generator." + }, + "signature": { + "type": "string", + "format": "signature", + "example": "a3733254aad600fa787d6223002278c3400be5e8ed4763ae27f9a15b80e20c22ac9259dc926f4f4cabdf0e4f8cec49308fa8296d71c288f56b9d1e11dfe81e07", + "description": "Derived from a SHA-256 hash of the block header,\nthat is signed by the private key of the delegate who forged the block." + }, + "isFinal": { + "type": "boolean", + "example": "true" + } + } + }, + "BlocksWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "description": "List of blocks", + "type": "array", + "items": { + "$ref": "#/definitions/Block" + } + }, + "meta": { + "$ref": "#/definitions/pagination" + } + } + }, + "BlockAsset": { + "type": "object", + "required": ["block", "assets"], + "properties": { + "block": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "01967dba384998026fe028119bd099ecf073c05c045381500a93d1a7c7307e5b" + }, + "height": { + "type": "number", + "example": 166 + }, + "timestamp": { + "type": "integer", + "example": 85944650 + } + } + }, + "assets": { + "type": "array", + "required": ["module", "data"], + "items": { + "type": "object", + "properties": { + "module": { + "type": "string", + "example": "random", + "description": "Name of the blockchain module associated with the assets." + }, + "data": { + "type": "object", + "properties": { + "seedReveal": { + "type": "string", + "example": "c555338417025a5b2b9278304f8a96be" + } + }, + "description": "The data object schema varies by module. The exact schema can be found from the `/schemas` endpoint." + } + } + } + } + } + }, + "BlocksAssetsWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "description": "List of block assets", + "type": "array", + "items": { + "$ref": "#/definitions/BlockAsset" + } + }, + "meta": { + "$ref": "#/definitions/pagination" + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/dynamicReward.json b/services/gateway/apis/http-version3/swagger/definitions/dynamicReward.json index e51830bb1..9cf78b36f 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/dynamicReward.json +++ b/services/gateway/apis/http-version3/swagger/definitions/dynamicReward.json @@ -1,18 +1,12 @@ { "rewardDefaultWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "Default reward for a block height.", "type": "object", - "required": [ - "tokenID", - "defaultReward" - ], + "required": ["tokenID", "defaultReward"], "properties": { "tokenID": { "type": "string", @@ -34,17 +28,12 @@ }, "rewardConstantsWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "Reward constants.", "type": "object", - "required": [ - "rewardTokenID" - ], + "required": ["rewardTokenID"], "properties": { "rewardTokenID": { "type": "string", @@ -61,10 +50,7 @@ }, "rewardInflationWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "Current inflation rate for the specified reward token.", diff --git a/services/gateway/apis/http-version3/swagger/definitions/error.json b/services/gateway/apis/http-version3/swagger/definitions/error.json index f32617b0f..4f06190ec 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/error.json +++ b/services/gateway/apis/http-version3/swagger/definitions/error.json @@ -1,41 +1,41 @@ { - "badRequest": { - "type": "object", - "properties": { - "error": { - "type": "boolean", - "example": true - }, - "message": { - "type": "string", - "example": "Unknown input parameter(s): id" - } - } - }, - "notFound": { - "type": "object", - "properties": { - "error": { - "type": "boolean", - "example": true - }, - "message": { - "type": "string", - "example": "Not found" - } - } - }, - "serviceUnavailable": { - "type": "object", - "properties": { - "error": { - "type": "boolean", - "example": true - }, - "message": { - "type": "string", - "example": "Service Unavailable" - } - } - } + "badRequest": { + "type": "object", + "properties": { + "error": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Unknown input parameter(s): id" + } + } + }, + "notFound": { + "type": "object", + "properties": { + "error": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Not found" + } + } + }, + "serviceUnavailable": { + "type": "object", + "properties": { + "error": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Service Unavailable" + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/events.json b/services/gateway/apis/http-version3/swagger/definitions/events.json index b623c8742..8fedeea04 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/events.json +++ b/services/gateway/apis/http-version3/swagger/definitions/events.json @@ -1,15 +1,7 @@ { "events": { "type": "object", - "required": [ - "id", - "module", - "name", - "data", - "topics", - "index", - "block" - ], + "required": ["id", "module", "name", "data", "topics", "index", "block"], "properties": { "id": { "type": "string", @@ -46,10 +38,7 @@ "items": { "type": "string" }, - "example": [ - "03", - "lsksod8bj35gmndy94yehxm25nybg5os6ycysejsm" - ] + "example": ["03", "lsksod8bj35gmndy94yehxm25nybg5os6ycysejsm"] }, "index": { "type": "number", @@ -58,11 +47,7 @@ }, "block": { "type": "object", - "required": [ - "id", - "height", - "timestamp" - ], + "required": ["id", "height", "timestamp"], "properties": { "id": { "type": "string", @@ -89,10 +74,7 @@ }, "eventsWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of events.", diff --git a/services/gateway/apis/http-version3/swagger/definitions/fees.json b/services/gateway/apis/http-version3/swagger/definitions/fees.json index 8342421c1..f45f0e71e 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/fees.json +++ b/services/gateway/apis/http-version3/swagger/definitions/fees.json @@ -1,72 +1,65 @@ { - "FeeEstimateEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "description": "Number of items returned in the request.", - "properties": { - "feeEstimatePerByte": { - "type": "object", - "description": "Estimated fees per byte based on priority.", - "properties": { - "low": { - "type": "integer", - "description": "low estimated fees.", - "example": 0 - }, - "medium": { - "type": "integer", - "description": "medium estimated fees.", - "example": 1000 - }, - "high": { - "type": "integer", - "description": "high estimated fees.", - "example": 2000 - } - } - }, - "feeTokenID": { - "type": "string", - "description": "ID of the token used to pay transaction fee.", - "example": "0000000000000000" - }, - "minFeePerByte": { - "type": "integer", - "example": 1000 - } - } - }, - "meta": { - "type": "object", - "required": [ - "lastUpdate", - "lastBlockHeight", - "lastBlockID" - ], - "properties": { - "lastUpdate": { - "type": "integer", - "example": 1616008148, - "description": "Timestamp of the block for which the estimates were last calculated." - }, - "lastBlockHeight": { - "type": "integer", - "example": 25, - "description": "Height of the block for which the estimates were last calculated." - }, - "lastBlockID": { - "type": "string", - "example": "01967dba384998026fe028119bd099ecf073c05c045381500a93d1a7c7307e5b", - "description": "ID of the block for which the estimates were last calculated." - } - } - } - } - } + "FeeEstimateEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "description": "Number of items returned in the request.", + "properties": { + "feeEstimatePerByte": { + "type": "object", + "description": "Estimated fees per byte based on priority.", + "properties": { + "low": { + "type": "integer", + "description": "low estimated fees.", + "example": 0 + }, + "medium": { + "type": "integer", + "description": "medium estimated fees.", + "example": 1000 + }, + "high": { + "type": "integer", + "description": "high estimated fees.", + "example": 2000 + } + } + }, + "feeTokenID": { + "type": "string", + "description": "ID of the token used to pay transaction fee.", + "example": "0000000000000000" + }, + "minFeePerByte": { + "type": "integer", + "example": 1000 + } + } + }, + "meta": { + "type": "object", + "required": ["lastUpdate", "lastBlockHeight", "lastBlockID"], + "properties": { + "lastUpdate": { + "type": "integer", + "example": 1616008148, + "description": "Timestamp of the block for which the estimates were last calculated." + }, + "lastBlockHeight": { + "type": "integer", + "example": 25, + "description": "Height of the block for which the estimates were last calculated." + }, + "lastBlockID": { + "type": "string", + "example": "01967dba384998026fe028119bd099ecf073c05c045381500a93d1a7c7307e5b", + "description": "ID of the block for which the estimates were last calculated." + } + } + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/generators.json b/services/gateway/apis/http-version3/swagger/definitions/generators.json index a4f1f631c..64134be88 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/generators.json +++ b/services/gateway/apis/http-version3/swagger/definitions/generators.json @@ -1,53 +1,50 @@ { - "generators": { - "type": "object", - "properties": { - "address": { - "type": "string", - "format": "address", - "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is 41 character long identifier that begins with `lsk`." - }, - "name": { - "type": "string", - "example": "genesis_84", - "description": "Generator name." - }, - "publicKey": { - "type": "string", - "format": "publicKey", - "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", - "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owner's private key." - }, - "nextAllocatedTime": { - "type": "integer", - "example": 1616058987, - "description": "UNIX Timestamp." - }, - "status": { - "type": "string", - "example": "active", - "description": "Validator status." - } - } - }, - "generatorsWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "description": "List of generators", - "type": "array", - "items": { - "$ref": "#/definitions/generators" - } - }, - "meta": { - "$ref": "#/definitions/pagination" - } - } - } + "generators": { + "type": "object", + "properties": { + "address": { + "type": "string", + "format": "address", + "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", + "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is 41 character long identifier that begins with `lsk`." + }, + "name": { + "type": "string", + "example": "genesis_84", + "description": "Generator name." + }, + "publicKey": { + "type": "string", + "format": "publicKey", + "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", + "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owner's private key." + }, + "nextAllocatedTime": { + "type": "integer", + "example": 1616058987, + "description": "UNIX Timestamp." + }, + "status": { + "type": "string", + "example": "active", + "description": "Validator status." + } + } + }, + "generatorsWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "description": "List of generators", + "type": "array", + "items": { + "$ref": "#/definitions/generators" + } + }, + "meta": { + "$ref": "#/definitions/pagination" + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/indexStatus.json b/services/gateway/apis/http-version3/swagger/definitions/indexStatus.json index 1a7ec3430..2a14a5c8b 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/indexStatus.json +++ b/services/gateway/apis/http-version3/swagger/definitions/indexStatus.json @@ -1,67 +1,62 @@ { - "IndexStatus": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "description": "Number of items returned in the request.", - "properties": { - "genesisHeight": { - "type": "number", - "example": "0", - "description": "Height of the genesis block." - }, - "lastBlockHeight": { - "type": "number", - "example": 2330, - "description": "Latest block height." - }, - "lastIndexedBlockHeight": { - "type": "number", - "example": 2330, - "description": "Latest block height indexed." - }, - "chainLength": { - "type": "number", - "example": 2331, - "description": "Number of blocks in the chain." - }, - "numBlocksIndexed": { - "type": "number", - "example": 2330, - "minimum": 0, - "description": "Number of blocks currently indexed." - }, - "percentageIndexed": { - "type": "number", - "example": 99.96, - "minimum": 0, - "description": "Percentage of blocks indexed." - }, - "isIndexingInProgress": { - "type": "boolean", - "example": true, - "description": "A boolean flag indicating if the indexing process is currently under progress." - } - } - }, - "meta": { - "type": "object", - "required": [ - "lastUpdate" - ], - "properties": { - "lastUpdate": { - "type": "number", - "example": 1632471013, - "description": "Last status update timestamp." - } - } - } - } - } + "IndexStatus": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "description": "Number of items returned in the request.", + "properties": { + "genesisHeight": { + "type": "number", + "example": "0", + "description": "Height of the genesis block." + }, + "lastBlockHeight": { + "type": "number", + "example": 2330, + "description": "Latest block height." + }, + "lastIndexedBlockHeight": { + "type": "number", + "example": 2330, + "description": "Latest block height indexed." + }, + "chainLength": { + "type": "number", + "example": 2331, + "description": "Number of blocks in the chain." + }, + "numBlocksIndexed": { + "type": "number", + "example": 2330, + "minimum": 0, + "description": "Number of blocks currently indexed." + }, + "percentageIndexed": { + "type": "number", + "example": 99.96, + "minimum": 0, + "description": "Percentage of blocks indexed." + }, + "isIndexingInProgress": { + "type": "boolean", + "example": true, + "description": "A boolean flag indicating if the indexing process is currently under progress." + } + } + }, + "meta": { + "type": "object", + "required": ["lastUpdate"], + "properties": { + "lastUpdate": { + "type": "number", + "example": 1632471013, + "description": "Last status update timestamp." + } + } + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/invoke.json b/services/gateway/apis/http-version3/swagger/definitions/invoke.json index 7883095c4..70d362b5c 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/invoke.json +++ b/services/gateway/apis/http-version3/swagger/definitions/invoke.json @@ -1,10 +1,7 @@ { "invokeWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "type": "object", diff --git a/services/gateway/apis/http-version3/swagger/definitions/legacyAccount.json b/services/gateway/apis/http-version3/swagger/definitions/legacyAccount.json index 06ed8a05e..060582c3a 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/legacyAccount.json +++ b/services/gateway/apis/http-version3/swagger/definitions/legacyAccount.json @@ -1,48 +1,42 @@ { - "legacyAccountWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "description": "Legacy balance information for a given public key.", - "properties": { - "legacyAddress": { - "type": "string", - "format": "address", - "example": "3057001998458191401L", - "description": "Lisk account address (Legacy address)" - }, - "balance": { - "type": "string", - "example": "10000000", - "description": "Legacy account balance" - } - } - }, - "meta": { - "type": "object", - "required": [ - "address", - "publicKey" - ], - "properties": { - "address": { - "type": "string", - "format": "address", - "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is 41 character long identifier that begins with `lsk`." - }, - "publicKey": { - "type": "string", - "format": "publicKey", - "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd" - } - } - } - } - } + "legacyAccountWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "description": "Legacy balance information for a given public key.", + "properties": { + "legacyAddress": { + "type": "string", + "format": "address", + "example": "3057001998458191401L", + "description": "Lisk account address (Legacy address)" + }, + "balance": { + "type": "string", + "example": "10000000", + "description": "Legacy account balance" + } + } + }, + "meta": { + "type": "object", + "required": ["address", "publicKey"], + "properties": { + "address": { + "type": "string", + "format": "address", + "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", + "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is 41 character long identifier that begins with `lsk`." + }, + "publicKey": { + "type": "string", + "format": "publicKey", + "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd" + } + } + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/market.json b/services/gateway/apis/http-version3/swagger/definitions/market.json index afd72a0f3..4d2d17dfe 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/market.json +++ b/services/gateway/apis/http-version3/swagger/definitions/market.json @@ -1,75 +1,63 @@ { - "market": { - "type": "object", - "required": [ - "code", - "from", - "rate", - "to", - "updateTimestamp", - "sources" - ], - "properties": { - "code": { - "type": "string", - "example": "LSK_CHF" - }, - "from": { - "type": "string", - "example": "LSK", - "description": "from" - }, - "rate": { - "type": "string", - "example": "2.4058", - "description": "Current rate" - }, - "to": { - "type": "string", - "example": "CHF", - "description": "to" - }, - "sources": { - "type": "array", - "items": { - "type": "string", - "example": "kraken" - } - }, - "updateTimestamp": { - "type": "integer", - "example": 1623053809, - "description": "Last updated timestamp." - } - } - }, - "MarketPricesWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "description": "Market price by currency pairs", - "type": "array", - "items": { - "$ref": "#/definitions/market" - } - }, - "meta": { - "type": "object", - "required": [ - "count" - ], - "properties": { - "count": { - "type": "integer", - "example": 1, - "description": "count" - } - } - } - } - } + "market": { + "type": "object", + "required": ["code", "from", "rate", "to", "updateTimestamp", "sources"], + "properties": { + "code": { + "type": "string", + "example": "LSK_CHF" + }, + "from": { + "type": "string", + "example": "LSK", + "description": "from" + }, + "rate": { + "type": "string", + "example": "2.4058", + "description": "Current rate" + }, + "to": { + "type": "string", + "example": "CHF", + "description": "to" + }, + "sources": { + "type": "array", + "items": { + "type": "string", + "example": "kraken" + } + }, + "updateTimestamp": { + "type": "integer", + "example": 1623053809, + "description": "Last updated timestamp." + } + } + }, + "MarketPricesWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "description": "Market price by currency pairs", + "type": "array", + "items": { + "$ref": "#/definitions/market" + } + }, + "meta": { + "type": "object", + "required": ["count"], + "properties": { + "count": { + "type": "integer", + "example": 1, + "description": "count" + } + } + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/meta.json b/services/gateway/apis/http-version3/swagger/definitions/meta.json index 33f299cdd..944c30f93 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/meta.json +++ b/services/gateway/apis/http-version3/swagger/definitions/meta.json @@ -1,10 +1,7 @@ { "pagination": { "type": "object", - "required": [ - "count", - "offset" - ], + "required": ["count", "offset"], "properties": { "count": { "type": "integer", diff --git a/services/gateway/apis/http-version3/swagger/definitions/networkStatistics.json b/services/gateway/apis/http-version3/swagger/definitions/networkStatistics.json index d784340fd..3b7b3c476 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/networkStatistics.json +++ b/services/gateway/apis/http-version3/swagger/definitions/networkStatistics.json @@ -1,94 +1,91 @@ { - "NetworkStatistics": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "description": "Network statistics information.", - "properties": { - "basic": { - "type": "object", - "properties": { - "connectedPeers": { - "type": "integer", - "description": "Number of connected peers", - "example": 134 - }, - "disconnectedPeers": { - "type": "integer", - "description": "Number of disconnected peers", - "example": 48 - }, - "totalPeers": { - "type": "integer", - "description": "Total number of peers", - "example": 181 - } - } - }, - "height": { - "type": "object", - "description": "Number of nodes at the given height.", - "properties": { - "7982598": { - "type": "integer", - "example": 24 - } - } - }, - "networkVersion": { - "type": "object", - "description": "Number of nodes on the given Lisk Core network versions.", - "properties": { - "2.0": { - "type": "integer", - "example": 12 - }, - "2.1": { - "type": "integer", - "example": 41 - } - } - }, - "totalLocked": { - "type": "array", - "description": "An array representing total of locked tokens.", - "items": { - "$ref": "#/definitions/AmountEntry" - } - }, - "totalStaked": { - "description": "An object representing total staked amount for the PoS token ID.", - "$ref": "#/definitions/AmountEntry" - }, - "totalSelfStaked": { - "description": "An object representing total self staked amount for the PoS token ID.", - "$ref": "#/definitions/AmountEntry" - } - } - }, - "meta": { - "type": "object" - } - } - }, - "AmountEntry": { - "type": "object", - "properties": { - "tokenID": { - "type": "string", - "description": "Universal ID of the token.", - "example":"0000000000000000" - }, - "amount": { - "type": "string", - "description": "Amount of total token.", - "example": "10000000000" - } - } - } + "NetworkStatistics": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "description": "Network statistics information.", + "properties": { + "basic": { + "type": "object", + "properties": { + "connectedPeers": { + "type": "integer", + "description": "Number of connected peers", + "example": 134 + }, + "disconnectedPeers": { + "type": "integer", + "description": "Number of disconnected peers", + "example": 48 + }, + "totalPeers": { + "type": "integer", + "description": "Total number of peers", + "example": 181 + } + } + }, + "height": { + "type": "object", + "description": "Number of nodes at the given height.", + "properties": { + "7982598": { + "type": "integer", + "example": 24 + } + } + }, + "networkVersion": { + "type": "object", + "description": "Number of nodes on the given Lisk Core network versions.", + "properties": { + "2.0": { + "type": "integer", + "example": 12 + }, + "2.1": { + "type": "integer", + "example": 41 + } + } + }, + "totalLocked": { + "type": "array", + "description": "An array representing total of locked tokens.", + "items": { + "$ref": "#/definitions/AmountEntry" + } + }, + "totalStaked": { + "description": "An object representing total staked amount for the PoS token ID.", + "$ref": "#/definitions/AmountEntry" + }, + "totalSelfStaked": { + "description": "An object representing total self staked amount for the PoS token ID.", + "$ref": "#/definitions/AmountEntry" + } + } + }, + "meta": { + "type": "object" + } + } + }, + "AmountEntry": { + "type": "object", + "properties": { + "tokenID": { + "type": "string", + "description": "Universal ID of the token.", + "example": "0000000000000000" + }, + "amount": { + "type": "string", + "description": "Amount of total token.", + "example": "10000000000" + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/networkStatus.json b/services/gateway/apis/http-version3/swagger/definitions/networkStatus.json index 263696497..aa087d7b9 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/networkStatus.json +++ b/services/gateway/apis/http-version3/swagger/definitions/networkStatus.json @@ -1,193 +1,190 @@ { - "NetworkStatus": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "description": "Number of items returned in the request.", - "properties": { - "version": { - "type": "string", - "format": "App version", - "example": "4.0.0", - "description": "Current application version." - }, - "networkVersion": { - "type": "string", - "format": "networkVersion", - "example": "3.0", - "description": "Current network version." - }, - "chainID": { - "type": "string", - "example": "00000000", - "description": "Chain ID of the blockchain application." - }, - "lastBlockID": { - "type": "string", - "format": "id", - "minLength": 64, - "maxLength": 64, - "example": "01967dba384998026fe028119bd099ecf073c05c045381500a93d1a7c7307e5b", - "description": "Current block ID." - }, - "height": { - "type": "integer", - "example": 16550779, - "minimum": 0, - "description": "Current block height." - }, - "finalizedHeight": { - "type": "integer", - "example": 16550609, - "minimum": 0, - "description": "Last finalized block height." - }, - "syncing": { - "type": "boolean", - "example": "true" - }, - "unconfirmedTransactions": { - "type": "integer", - "example": 0, - "description": "Unconfirmed transactions count." - }, - "genesis": { - "type": "object", - "properties": { - "block": { - "type": "object", - "properties": { - "fromFile": { - "type": "string", - "example": "./config/genesis_block.blob" - } - } - }, - "blockTime": { - "type": "integer", - "example": 10 - }, - "chainID": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "example": "00000000" - }, - "maxTransactionsSize": { - "type": "integer", - "example": 15360 - }, - "bftBatchSize": { - "type": "integer", - "example": 10 - } - } - }, - "genesisHeight": { - "type": "integer", - "example": 0, - "minimum": 0, - "description": "Genesis block height." - }, - "registeredModules": { - "type": "array", - "items": { - "type": "string", - "description": "List of all the current registered modules." - }, - "example": [ - "token", - "reward", - "validators", - "auth", - "pos", - "fee", - "random", - "legacy", - "interoperability" - ] - }, - "moduleCommands": { - "type": "array", - "items": { - "type": "string", - "description": "List of all current supported transaction types." - }, - "example": [ - "auth:registerMultisignature", - "interoperability:submitMainchainCrossChainUpdate", - "interoperability:initializeMessageRecovery", - "interoperability:recoverMessage", - "interoperability:registerSidechain", - "interoperability:recoverState", - "interoperability:terminateSidechainForLiveness", - "legacy:reclaimLSK", - "legacy:registerKeys", - "pos:registerValidator", - "pos:reportMisbehavior", - "pos:unlock", - "pos:updateGeneratorKey", - "pos:stake", - "pos:changeCommission", - "pos:claimRewards", - "token:transfer", - "token:transferCrossChain" - ] - }, - "network": { - "type": "object", - "properties": { - "version": { - "type": "string", - "example": "1.0" - }, - "port": { - "type": "integer", - "example": 10 - }, - "seedPeers": { - "type": "array", - "items": { - "example": { - "ip": "127.0.0.1", - "port": 7667 - } - } - } - } - } - } - }, - "meta": { - "type": "object", - "required": [ - "lastUpdate", - "lastBlockHeight", - "lastBlockID" - ], - "properties": { - "lastUpdate": { - "type": "string", - "example": "1632471013", - "description": "Current timestamp." - }, - "lastBlockHeight": { - "type": "integer", - "example": 16550779, - "description": "Height of the current block." - }, - "lastBlockID": { - "type": "string", - "example": "6266b07d18ef072896b79110a59fab4b0635796e870dba1783b21e296aaac36f", - "description": "ID of the current block." - } - } - } - } - } + "NetworkStatus": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "description": "Number of items returned in the request.", + "properties": { + "version": { + "type": "string", + "format": "App version", + "example": "4.0.0", + "description": "Current application version." + }, + "networkVersion": { + "type": "string", + "format": "networkVersion", + "example": "3.0", + "description": "Current network version." + }, + "chainID": { + "type": "string", + "example": "00000000", + "description": "Chain ID of the blockchain application." + }, + "lastBlockID": { + "type": "string", + "format": "id", + "minLength": 64, + "maxLength": 64, + "example": "01967dba384998026fe028119bd099ecf073c05c045381500a93d1a7c7307e5b", + "description": "Current block ID." + }, + "height": { + "type": "integer", + "example": 16550779, + "minimum": 0, + "description": "Current block height." + }, + "finalizedHeight": { + "type": "integer", + "example": 16550609, + "minimum": 0, + "description": "Last finalized block height." + }, + "syncing": { + "type": "boolean", + "example": "true" + }, + "unconfirmedTransactions": { + "type": "integer", + "example": 0, + "description": "Unconfirmed transactions count." + }, + "genesis": { + "type": "object", + "properties": { + "block": { + "type": "object", + "properties": { + "fromFile": { + "type": "string", + "example": "./config/genesis_block.blob" + } + } + }, + "blockTime": { + "type": "integer", + "example": 10 + }, + "chainID": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "example": "00000000" + }, + "maxTransactionsSize": { + "type": "integer", + "example": 15360 + }, + "minimumCertifyHeight": { + "type": "integer", + "example": 20520176 + }, + "bftBatchSize": { + "type": "integer", + "example": 10 + } + } + }, + "genesisHeight": { + "type": "integer", + "example": 0, + "minimum": 0, + "description": "Genesis block height." + }, + "registeredModules": { + "type": "array", + "items": { + "type": "string", + "description": "List of all the current registered modules." + }, + "example": [ + "token", + "reward", + "validators", + "auth", + "pos", + "fee", + "random", + "legacy", + "interoperability" + ] + }, + "moduleCommands": { + "type": "array", + "items": { + "type": "string", + "description": "List of all current supported transaction types." + }, + "example": [ + "auth:registerMultisignature", + "interoperability:submitMainchainCrossChainUpdate", + "interoperability:initializeMessageRecovery", + "interoperability:recoverMessage", + "interoperability:registerSidechain", + "interoperability:recoverState", + "interoperability:terminateSidechainForLiveness", + "legacy:reclaimLSK", + "legacy:registerKeys", + "pos:registerValidator", + "pos:reportMisbehavior", + "pos:unlock", + "pos:updateGeneratorKey", + "pos:stake", + "pos:changeCommission", + "pos:claimRewards", + "token:transfer", + "token:transferCrossChain" + ] + }, + "network": { + "type": "object", + "properties": { + "version": { + "type": "string", + "example": "1.0" + }, + "port": { + "type": "integer", + "example": 10 + }, + "seedPeers": { + "type": "array", + "items": { + "example": { + "ip": "127.0.0.1", + "port": 7667 + } + } + } + } + } + } + }, + "meta": { + "type": "object", + "required": ["lastUpdate", "lastBlockHeight", "lastBlockID"], + "properties": { + "lastUpdate": { + "type": "string", + "example": "1632471013", + "description": "Current timestamp." + }, + "lastBlockHeight": { + "type": "integer", + "example": 16550779, + "description": "Height of the current block." + }, + "lastBlockID": { + "type": "string", + "example": "6266b07d18ef072896b79110a59fab4b0635796e870dba1783b21e296aaac36f", + "description": "ID of the current block." + } + } + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/peers.json b/services/gateway/apis/http-version3/swagger/definitions/peers.json index 012b7e1f8..2bc690d39 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/peers.json +++ b/services/gateway/apis/http-version3/swagger/definitions/peers.json @@ -1,10 +1,7 @@ { "Peer": { "type": "object", - "required": [ - "wsPort", - "state" - ], + "required": ["wsPort", "state"], "properties": { "ip": { "type": "string", @@ -50,10 +47,7 @@ }, "PeersWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of peers.", diff --git a/services/gateway/apis/http-version3/swagger/definitions/pos.json b/services/gateway/apis/http-version3/swagger/definitions/pos.json index ea6592864..9a3c98623 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/pos.json +++ b/services/gateway/apis/http-version3/swagger/definitions/pos.json @@ -153,10 +153,7 @@ }, "validatorsWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of validators.", @@ -172,11 +169,7 @@ }, "unlock": { "type": "object", - "required": [ - "address", - "publicKey", - "name" - ], + "required": ["address", "publicKey", "name"], "properties": { "address": { "type": "string", @@ -197,11 +190,7 @@ }, "unlocking": { "type": "array", - "required": [ - "validatorAddress", - "amount", - "unvoteHeight" - ], + "required": ["validatorAddress", "amount", "unvoteHeight"], "items": { "type": "object", "properties": { @@ -215,10 +204,7 @@ }, "unvoteHeight": { "type": "object", - "required": [ - "start", - "end" - ], + "required": ["start", "end"], "properties": { "start": { "type": "integer", @@ -237,10 +223,7 @@ }, "unlocksWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of validator unlocks.", @@ -256,11 +239,7 @@ }, "posUnlock": { "type": "object", - "required": [ - "address", - "publicKey", - "pendingUnlocks" - ], + "required": ["address", "publicKey", "pendingUnlocks"], "properties": { "address": { "type": "string", @@ -335,10 +314,7 @@ }, "posUnlocksWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "Array of PoS unlocks data.", @@ -351,11 +327,7 @@ }, "posStake": { "type": "object", - "required": [ - "address", - "amount", - "name" - ], + "required": ["address", "amount", "name"], "properties": { "address": { "type": "string", @@ -378,10 +350,7 @@ }, "posStakesMeta": { "type": "object", - "required": [ - "staker", - "count" - ], + "required": ["staker", "count"], "properties": { "staker": { "type": "object", @@ -416,10 +385,7 @@ }, "posStakesWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of stakes for the queried staker.", @@ -440,10 +406,7 @@ }, "posStaker": { "type": "object", - "required": [ - "address", - "amount" - ], + "required": ["address", "amount"], "properties": { "address": { "type": "string", @@ -466,20 +429,11 @@ }, "posStakersMeta": { "type": "object", - "required": [ - "validator", - "count", - "offset", - "total" - ], + "required": ["validator", "count", "offset", "total"], "properties": { "validator": { "type": "object", - "required": [ - "address", - "publicKey", - "name" - ], + "required": ["address", "publicKey", "name"], "properties": { "address": { "type": "string", @@ -522,17 +476,12 @@ }, "posStakersWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of stakers for the queried validator.", "type": "object", - "required": [ - "stakers" - ], + "required": ["stakers"], "properties": { "stakers": { "type": "array", @@ -549,10 +498,7 @@ }, "posConstantsWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "PoS module constants.", @@ -702,9 +648,7 @@ "extraCommandFees": { "description": "Extra fees associated (beyond the usual transaction fees) for the listed commands.", "type": "object", - "required": [ - "validatorRegistrationFee" - ], + "required": ["validatorRegistrationFee"], "properties": { "validatorRegistrationFee": { "type": "string", @@ -722,20 +666,14 @@ }, "posRewardsLockedWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "PoS Locked Rewards.", "type": "array", "items": { "type": "object", - "required": [ - "tokenID", - "reward" - ], + "required": ["tokenID", "reward"], "properties": { "tokenID": { "type": "string", @@ -757,20 +695,14 @@ }, "posClaimableRewardsWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "PoS claimable Rewards.", "type": "array", "items": { "type": "object", - "required": [ - "tokenID", - "reward" - ], + "required": ["tokenID", "reward"], "properties": { "tokenID": { "type": "string", diff --git a/services/gateway/apis/http-version3/swagger/definitions/schemas.json b/services/gateway/apis/http-version3/swagger/definitions/schemas.json index ddb644527..84cf498a7 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/schemas.json +++ b/services/gateway/apis/http-version3/swagger/definitions/schemas.json @@ -1,1538 +1,1440 @@ { - "CommandsParamsSchema": { - "type": "object", - "required": [ - "moduleCommand", - "schema" - ], - "properties": { - "moduleCommand": { - "type": "string", - "example": "token:transfer", - "description": "Combination of transaction moduleName:commandName.\n" - }, - "schema": { - "type": "object", - "properties": { - "$id": { - "type": "string", - "format": "id", - "minLength": 1, - "example": "lisk/transfer-asset", - "description": "Unique identifier of the transaction schema\n" - }, - "title": { - "type": "string", - "minimum": 1, - "example": "Transfer transaction asset", - "description": "Title of schema\n" - }, - "type": { - "type": "string", - "example": "object", - "description": "type of schema" - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "amount", - "recipientAddress", - "data" - ] - }, - "properties": { - "type": "object", - "properties": { - "amount": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint64" - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - }, - "recipientAddress": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 2 - }, - "minLength": { - "type": "integer", - "example": 20 - }, - "maxLength": { - "type": "integer", - "example": 20 - } - } - }, - "data": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 3 - }, - "minLength": { - "type": "integer", - "example": 0 - }, - "maxLength": { - "type": "integer", - "example": 64 - } - } - } - } - } - } - } - } - }, - "BlockSchema": { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "type": "object", - "properties": { - "$id": { - "type": "string", - "example": "/block", - "description": "Unique identifier of the block schema\n" - }, - "type": { - "type": "string", - "example": "object", - "description": "type of schema" - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "header", - "transactions", - "assets" - ] - }, - "properties": { - "type": "object", - "properties": { - "header": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint64" - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - }, - "transactions": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "array" - }, - "items": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - } - } - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - }, - "assets": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "array" - }, - "items": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - } - } - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - } - } - } - } - } - } - }, - "HeaderSchema": { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "type": "object", - "properties": { - "$id": { - "type": "string", - "example": "/block/header/3", - "description": "Unique identifier of the block schema." - }, - "type": { - "type": "string", - "example": "object", - "description": "Type of schema." - }, - "properties": { - "type": "object", - "required": [ - "version", - "timestamp", - "height", - "previousBlockID", - "generatorAddress", - "transactionRoot", - "assetRoot", - "eventRoot", - "stateRoot", - "maxHeightPrevoted", - "maxHeightGenerated", - "impliesMaxPrevotes", - "validatorsHash", - "aggregateCommit", - "signature" - ], - "properties": { - "version": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint32" - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - }, - "timestamp": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint32" - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - }, - "height": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint32" - }, - "fieldNumber": { - "type": "integer", - "example": 3 - } - } - }, - "previousBlockID": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 4 - } - } - }, - "generatorAddress": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 5 - }, - "format": { - "type": "string", - "example": "lisk32" - } - } - }, - "transactionRoot": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 6 - } - } - }, - "assetRoot": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 7 - } - } - }, - "eventRoot": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 8 - } - } - }, - "stateRoot": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 9 - } - } - }, - "maxHeightPrevoted": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint32" - }, - "fieldNumber": { - "type": "integer", - "example": 10 - } - } - }, - "maxHeightGenerated": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint32" - }, - "fieldNumber": { - "type": "integer", - "example": 11 - } - } - }, - "impliesMaxPrevotes": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "boolean" - }, - "fieldNumber": { - "type": "integer", - "example": 12 - } - } - }, - "validatorsHash": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 13 - } - } - }, - "aggregateCommit": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "object" - }, - "fieldNumber": { - "type": "integer", - "example": 14 - }, - "properties": { - "type": "object", - "required": [ - "height", - "aggregationBits", - "certificateSignature" - ], - "properties": { - "height": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint32" - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - }, - "aggregationBits": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - }, - "certificateSignature": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 3 - } - } - } - } - } - } - }, - "signature": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 15 - } - } - } - } - } - } - } - } - }, - "AssetSchema": { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "type": "object", - "properties": { - "$id": { - "type": "string", - "example": "/block/asset/3", - "description": "Unique identifier of the block asset schema\n" - }, - "type": { - "type": "string", - "example": "object", - "description": "type of schema" - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "module", - "data" - ] - }, - "properties": { - "type": "object", - "properties": { - "module": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint64" - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - }, - "data": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "string" - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - } - } - } - } - } - } - }, - "EventSchema": { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "type": "object", - "properties": { - "$id": { - "type": "string", - "example": "/block/asset/3", - "description": "Unique identifier of the event schema\n" - }, - "type": { - "type": "string", - "example": "object", - "description": "type of schema" - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "module", - "name", - "data", - "topics", - "height", - "index" - ] - }, - "properties": { - "type": "object", - "properties": { - "module": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "string" - }, - "minLength": { - "type": "integer", - "example": 1 - }, - "maxLength": { - "type": "integer", - "example": 32 - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - }, - "name": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "string" - }, - "minLength": { - "type": "integer", - "example": 1 - }, - "maxLength": { - "type": "integer", - "example": 32 - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - }, - "data": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 3 - } - } - }, - "topics": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "array" - }, - "items": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - } - } - }, - "fieldNumber": { - "type": "integer", - "example": 4 - } - } - }, - "height": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 5 - } - } - }, - "index": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "integer" - }, - "fieldNumber": { - "type": "integer", - "example": 5 - } - } - } - } - } - } - } - } - }, - "StandardEventSchema": { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "type": "object", - "required": [ - "$id", - "type", - "required", - "properties" - ], - "properties": { - "$id": { - "type": "string", - "example": "/block/event/standard", - "description": "Unique identifier of the event schema." - }, - "type": { - "type": "string", - "example": "object", - "description": "type of schema" - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "success" - ] - }, - "properties": { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "boolean" - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - } - } - } - } - } - } - }, - "CcmSchema": { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "type": "object", - "required": [ - "$id", - "type", - "required", - "properties" - ], - "properties": { - "$id": { - "type": "string", - "example": "/modules/interoperability/ccm", - "description": "Unique identifier of the event schema." - }, - "type": { - "type": "string", - "example": "object", - "description": "type of schema" - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "module", - "crossChainCommand", - "nonce", - "fee", - "sendingChainID", - "receivingChainID", - "params", - "status" - ] - }, - "properties": { - "type": "object", - "properties": { - "module": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "string" - }, - "minLength": { - "type": "integer", - "example": 1 - }, - "maxLength": { - "type": "integer", - "example": 32 - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - }, - "crossChainCommand": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "string" - }, - "minLength": { - "type": "integer", - "example": 1 - }, - "maxLength": { - "type": "integer", - "example": 32 - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - }, - "nonce": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint64" - }, - "fieldNumber": { - "type": "integer", - "example": 3 - } - } - }, - "fee": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint64" - }, - "fieldNumber": { - "type": "integer", - "example": 4 - } - } - }, - "sendingChainID": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "minLength": { - "type": "integer", - "example": 4 - }, - "maxLength": { - "type": "integer", - "example": 4 - }, - "fieldNumber": { - "type": "integer", - "example": 5 - } - } - }, - "receivingChainID": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "minLength": { - "type": "integer", - "example": 4 - }, - "maxLength": { - "type": "integer", - "example": 4 - }, - "fieldNumber": { - "type": "integer", - "example": 6 - } - } - }, - "params": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 7 - } - } - }, - "status": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint32" - }, - "fieldNumber": { - "type": "integer", - "example": 8 - } - } - } - } - } - } - } - } - }, - "AssetsSchema": { - "type": "object", - "required": [ - "module", - "version", - "schema" - ], - "properties": { - "module": { - "type": "string", - "example": "random" - }, - "version": { - "type": "string", - "example": "2" - }, - "schema": { - "type": "object", - "properties": { - "$id": { - "type": "string", - "example": "/modules/random/block/header/asset", - "description": "Unique identifier of the assets schema\n" - }, - "type": { - "type": "string", - "example": "object", - "description": "type of schema" - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "seedReveal" - ] - }, - "properties": { - "type": "object", - "properties": { - "seedReveal": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "minLength": { - "type": "integer", - "example": 16 - }, - "maxLength": { - "type": "integer", - "example": 16 - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - } - } - } - } - } - } - }, - "EventsSchema": { - "type": "object", - "required": [ - "module", - "name", - "schema" - ], - "properties": { - "module": { - "type": "string", - "example": "token" - }, - "name": { - "type": "string", - "example": "transferEvent" - }, - "schema": { - "type": "object", - "properties": { - "$id": { - "type": "string", - "example": "/token/events/transfer", - "description": "Unique identifier of the assets schema\n" - }, - "type": { - "type": "string", - "example": "object", - "description": "type of schema" - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "senderAddress", - "recipientAddress", - "tokenID", - "amount", - "result" - ] - }, - "properties": { - "type": "object", - "properties": { - "senderAddress": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - }, - "recipientAddress": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - }, - "tokenID": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 3 - } - } - }, - "amount": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint64" - }, - "fieldNumber": { - "type": "integer", - "example": 4 - } - } - }, - "result": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint32" - }, - "fieldNumber": { - "type": "integer", - "example": 5 - } - } - } - } - } - } - } - } - }, - "TransactionSchema": { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "type": "object", - "properties": { - "$id": { - "type": "string", - "example": "/token/events/transfer", - "description": "Unique identifier of the transaction schema\n" - }, - "type": { - "type": "string", - "example": "object", - "description": "type of schema" - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "module", - "command", - "nonce", - "fee", - "senderPublicKey", - "params" - ] - }, - "properties": { - "type": "object", - "properties": { - "module": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "string" - }, - "minLength": { - "type": "integer", - "example": 1 - }, - "maxLength": { - "type": "integer", - "example": 32 - }, - "fieldNumber": { - "type": "integer", - "example": 1 - } - } - }, - "command": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "string" - }, - "minLength": { - "type": "integer", - "example": 1 - }, - "maxLength": { - "type": "integer", - "example": 32 - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - }, - "nonce": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint64" - }, - "fieldNumber": { - "type": "integer", - "example": 3 - } - } - }, - "fee": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint64" - }, - "fieldNumber": { - "type": "integer", - "example": 4 - } - } - }, - "senderPublicKey": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "minLength": { - "type": "integer", - "example": 32 - }, - "maxLength": { - "type": "integer", - "example": 32 - }, - "fieldNumber": { - "type": "integer", - "example": 5 - } - } - }, - "params": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 6 - } - } - }, - "signatures": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "array" - }, - "items": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - } - } - }, - "fieldNumber": { - "type": "integer", - "example": 7 - } - } - } - } - } - } - } - } - }, - "MessageSchema": { - "type": "object", - "required": [ - "moduleCommand", - "param", - "schema" - ], - "properties": { - "moduleCommand": { - "type": "string", - "example": "auth:registerMultisignature", - "description": "Combination of transaction moduleName:commandName." - }, - "param": { - "type": "string", - "example": "signatures", - "description": "The property within the params of the corresponding moduleCommand type transaction for which the corresponding schema is to be used to serialize the information.\nExample: The schema with `\"$id\": \"/auth/command/regMultisigMsg\"` is to be used to serialize the `signatures` data within the transaction params for the `auth:registerMultisignature` command." - }, - "schema": { - "type": "object", - "required": [ - "$id", - "type", - "required", - "properties" - ], - "properties": { - "$id": { - "type": "string", - "format": "id", - "minLength": 1, - "example": "/auth/command/regMultisigMsg", - "description": "Unique identifier of the message schema." - }, - "type": { - "type": "string", - "example": "object", - "description": "Type of schema." - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "address", - "nonce", - "numberOfSignatures", - "mandatoryKeys", - "optionalKeys" - ] - }, - "properties": { - "type": "object", - "required": [ - "address", - "nonce", - "numberOfSignatures", - "mandatoryKeys", - "optionalKeys" - ], - "properties": { - "address": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "fieldNumber": { - "type": "integer", - "example": 1 - }, - "minLength": { - "type": "integer", - "example": 20 - }, - "maxLength": { - "type": "integer", - "example": 20 - } - } - }, - "nonce": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint64" - }, - "fieldNumber": { - "type": "integer", - "example": 2 - } - } - }, - "numberOfSignatures": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "uint32" - }, - "fieldNumber": { - "type": "integer", - "example": 3 - } - } - }, - "mandatoryKeys": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "array" - }, - "items": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "minLength": { - "type": "integer", - "example": 32 - }, - "maxLength": { - "type": "integer", - "example": 32 - } - } - }, - "fieldNumber": { - "type": "integer", - "example": 4 - } - } - }, - "optionalKeys": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "array" - }, - "items": { - "type": "object", - "properties": { - "dataType": { - "type": "string", - "example": "bytes" - }, - "minLength": { - "type": "integer", - "example": 32 - }, - "maxLength": { - "type": "integer", - "example": 32 - } - } - }, - "fieldNumber": { - "type": "integer", - "example": 5 - } - } - } - } - } - } - } - } - }, - "SchemaWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "description": "List of schemas", - "type": "object", - "properties": { - "block": { - "$ref": "#/definitions/BlockSchema" - }, - "header": { - "$ref": "#/definitions/HeaderSchema" - }, - "asset": { - "$ref": "#/definitions/AssetSchema" - }, - "transaction": { - "$ref": "#/definitions/TransactionSchema" - }, - "standardEvent": { - "$ref": "#/definitions/StandardEventSchema" - }, - "ccm": { - "$ref": "#/definitions/CcmSchema" - }, - "event": { - "$ref": "#/definitions/EventSchema" - }, - "events": { - "type": "array", - "items": { - "$ref": "#/definitions/EventsSchema" - } - }, - "assets": { - "type": "array", - "items": { - "$ref": "#/definitions/AssetsSchema" - } - }, - "commands": { - "type": "array", - "items": { - "$ref": "#/definitions/CommandsParamsSchema" - } - }, - "messages": { - "type": "array", - "items": { - "$ref": "#/definitions/MessageSchema" - } - } - } - }, - "meta": { - "type": "object" - } - } - } + "CommandsParamsSchema": { + "type": "object", + "required": ["moduleCommand", "schema"], + "properties": { + "moduleCommand": { + "type": "string", + "example": "token:transfer", + "description": "Combination of transaction moduleName:commandName.\n" + }, + "schema": { + "type": "object", + "properties": { + "$id": { + "type": "string", + "format": "id", + "minLength": 1, + "example": "lisk/transfer-asset", + "description": "Unique identifier of the transaction schema\n" + }, + "title": { + "type": "string", + "minimum": 1, + "example": "Transfer transaction asset", + "description": "Title of schema\n" + }, + "type": { + "type": "string", + "example": "object", + "description": "type of schema" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["amount", "recipientAddress", "data"] + }, + "properties": { + "type": "object", + "properties": { + "amount": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint64" + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + }, + "recipientAddress": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 2 + }, + "minLength": { + "type": "integer", + "example": 20 + }, + "maxLength": { + "type": "integer", + "example": 20 + } + } + }, + "data": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 3 + }, + "minLength": { + "type": "integer", + "example": 0 + }, + "maxLength": { + "type": "integer", + "example": 64 + } + } + } + } + } + } + } + } + }, + "BlockSchema": { + "type": "object", + "required": ["schema"], + "properties": { + "schema": { + "type": "object", + "properties": { + "$id": { + "type": "string", + "example": "/block", + "description": "Unique identifier of the block schema\n" + }, + "type": { + "type": "string", + "example": "object", + "description": "type of schema" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["header", "transactions", "assets"] + }, + "properties": { + "type": "object", + "properties": { + "header": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint64" + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + }, + "transactions": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "array" + }, + "items": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + } + } + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + }, + "assets": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "array" + }, + "items": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + } + } + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + } + } + } + } + } + } + }, + "HeaderSchema": { + "type": "object", + "required": ["schema"], + "properties": { + "schema": { + "type": "object", + "properties": { + "$id": { + "type": "string", + "example": "/block/header/3", + "description": "Unique identifier of the block schema." + }, + "type": { + "type": "string", + "example": "object", + "description": "Type of schema." + }, + "properties": { + "type": "object", + "required": [ + "version", + "timestamp", + "height", + "previousBlockID", + "generatorAddress", + "transactionRoot", + "assetRoot", + "eventRoot", + "stateRoot", + "maxHeightPrevoted", + "maxHeightGenerated", + "impliesMaxPrevotes", + "validatorsHash", + "aggregateCommit", + "signature" + ], + "properties": { + "version": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint32" + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + }, + "timestamp": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint32" + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + }, + "height": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint32" + }, + "fieldNumber": { + "type": "integer", + "example": 3 + } + } + }, + "previousBlockID": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 4 + } + } + }, + "generatorAddress": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 5 + }, + "format": { + "type": "string", + "example": "lisk32" + } + } + }, + "transactionRoot": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 6 + } + } + }, + "assetRoot": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 7 + } + } + }, + "eventRoot": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 8 + } + } + }, + "stateRoot": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 9 + } + } + }, + "maxHeightPrevoted": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint32" + }, + "fieldNumber": { + "type": "integer", + "example": 10 + } + } + }, + "maxHeightGenerated": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint32" + }, + "fieldNumber": { + "type": "integer", + "example": 11 + } + } + }, + "impliesMaxPrevotes": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "boolean" + }, + "fieldNumber": { + "type": "integer", + "example": 12 + } + } + }, + "validatorsHash": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 13 + } + } + }, + "aggregateCommit": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "object" + }, + "fieldNumber": { + "type": "integer", + "example": 14 + }, + "properties": { + "type": "object", + "required": ["height", "aggregationBits", "certificateSignature"], + "properties": { + "height": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint32" + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + }, + "aggregationBits": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + }, + "certificateSignature": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 3 + } + } + } + } + } + } + }, + "signature": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 15 + } + } + } + } + } + } + } + } + }, + "AssetSchema": { + "type": "object", + "required": ["schema"], + "properties": { + "schema": { + "type": "object", + "properties": { + "$id": { + "type": "string", + "example": "/block/asset/3", + "description": "Unique identifier of the block asset schema\n" + }, + "type": { + "type": "string", + "example": "object", + "description": "type of schema" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["module", "data"] + }, + "properties": { + "type": "object", + "properties": { + "module": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint64" + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + }, + "data": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "string" + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + } + } + } + } + } + } + }, + "EventSchema": { + "type": "object", + "required": ["schema"], + "properties": { + "schema": { + "type": "object", + "properties": { + "$id": { + "type": "string", + "example": "/block/asset/3", + "description": "Unique identifier of the event schema\n" + }, + "type": { + "type": "string", + "example": "object", + "description": "type of schema" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["module", "name", "data", "topics", "height", "index"] + }, + "properties": { + "type": "object", + "properties": { + "module": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "string" + }, + "minLength": { + "type": "integer", + "example": 1 + }, + "maxLength": { + "type": "integer", + "example": 32 + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + }, + "name": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "string" + }, + "minLength": { + "type": "integer", + "example": 1 + }, + "maxLength": { + "type": "integer", + "example": 32 + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + }, + "data": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 3 + } + } + }, + "topics": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "array" + }, + "items": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + } + } + }, + "fieldNumber": { + "type": "integer", + "example": 4 + } + } + }, + "height": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 5 + } + } + }, + "index": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "integer" + }, + "fieldNumber": { + "type": "integer", + "example": 5 + } + } + } + } + } + } + } + } + }, + "StandardEventSchema": { + "type": "object", + "required": ["schema"], + "properties": { + "schema": { + "type": "object", + "required": ["$id", "type", "required", "properties"], + "properties": { + "$id": { + "type": "string", + "example": "/block/event/standard", + "description": "Unique identifier of the event schema." + }, + "type": { + "type": "string", + "example": "object", + "description": "type of schema" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["success"] + }, + "properties": { + "type": "object", + "properties": { + "success": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "boolean" + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + } + } + } + } + } + } + }, + "CcmSchema": { + "type": "object", + "required": ["schema"], + "properties": { + "schema": { + "type": "object", + "required": ["$id", "type", "required", "properties"], + "properties": { + "$id": { + "type": "string", + "example": "/modules/interoperability/ccm", + "description": "Unique identifier of the event schema." + }, + "type": { + "type": "string", + "example": "object", + "description": "type of schema" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "module", + "crossChainCommand", + "nonce", + "fee", + "sendingChainID", + "receivingChainID", + "params", + "status" + ] + }, + "properties": { + "type": "object", + "properties": { + "module": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "string" + }, + "minLength": { + "type": "integer", + "example": 1 + }, + "maxLength": { + "type": "integer", + "example": 32 + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + }, + "crossChainCommand": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "string" + }, + "minLength": { + "type": "integer", + "example": 1 + }, + "maxLength": { + "type": "integer", + "example": 32 + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + }, + "nonce": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint64" + }, + "fieldNumber": { + "type": "integer", + "example": 3 + } + } + }, + "fee": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint64" + }, + "fieldNumber": { + "type": "integer", + "example": 4 + } + } + }, + "sendingChainID": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "minLength": { + "type": "integer", + "example": 4 + }, + "maxLength": { + "type": "integer", + "example": 4 + }, + "fieldNumber": { + "type": "integer", + "example": 5 + } + } + }, + "receivingChainID": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "minLength": { + "type": "integer", + "example": 4 + }, + "maxLength": { + "type": "integer", + "example": 4 + }, + "fieldNumber": { + "type": "integer", + "example": 6 + } + } + }, + "params": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 7 + } + } + }, + "status": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint32" + }, + "fieldNumber": { + "type": "integer", + "example": 8 + } + } + } + } + } + } + } + } + }, + "AssetsSchema": { + "type": "object", + "required": ["module", "version", "schema"], + "properties": { + "module": { + "type": "string", + "example": "random" + }, + "version": { + "type": "string", + "example": "2" + }, + "schema": { + "type": "object", + "properties": { + "$id": { + "type": "string", + "example": "/modules/random/block/header/asset", + "description": "Unique identifier of the assets schema\n" + }, + "type": { + "type": "string", + "example": "object", + "description": "type of schema" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["seedReveal"] + }, + "properties": { + "type": "object", + "properties": { + "seedReveal": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "minLength": { + "type": "integer", + "example": 16 + }, + "maxLength": { + "type": "integer", + "example": 16 + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + } + } + } + } + } + } + }, + "EventsSchema": { + "type": "object", + "required": ["module", "name", "schema"], + "properties": { + "module": { + "type": "string", + "example": "token" + }, + "name": { + "type": "string", + "example": "transferEvent" + }, + "schema": { + "type": "object", + "properties": { + "$id": { + "type": "string", + "example": "/token/events/transfer", + "description": "Unique identifier of the assets schema\n" + }, + "type": { + "type": "string", + "example": "object", + "description": "type of schema" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["senderAddress", "recipientAddress", "tokenID", "amount", "result"] + }, + "properties": { + "type": "object", + "properties": { + "senderAddress": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + }, + "recipientAddress": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + }, + "tokenID": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 3 + } + } + }, + "amount": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint64" + }, + "fieldNumber": { + "type": "integer", + "example": 4 + } + } + }, + "result": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint32" + }, + "fieldNumber": { + "type": "integer", + "example": 5 + } + } + } + } + } + } + } + } + }, + "TransactionSchema": { + "type": "object", + "required": ["schema"], + "properties": { + "schema": { + "type": "object", + "properties": { + "$id": { + "type": "string", + "example": "/token/events/transfer", + "description": "Unique identifier of the transaction schema\n" + }, + "type": { + "type": "string", + "example": "object", + "description": "type of schema" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["module", "command", "nonce", "fee", "senderPublicKey", "params"] + }, + "properties": { + "type": "object", + "properties": { + "module": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "string" + }, + "minLength": { + "type": "integer", + "example": 1 + }, + "maxLength": { + "type": "integer", + "example": 32 + }, + "fieldNumber": { + "type": "integer", + "example": 1 + } + } + }, + "command": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "string" + }, + "minLength": { + "type": "integer", + "example": 1 + }, + "maxLength": { + "type": "integer", + "example": 32 + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + }, + "nonce": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint64" + }, + "fieldNumber": { + "type": "integer", + "example": 3 + } + } + }, + "fee": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint64" + }, + "fieldNumber": { + "type": "integer", + "example": 4 + } + } + }, + "senderPublicKey": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "minLength": { + "type": "integer", + "example": 32 + }, + "maxLength": { + "type": "integer", + "example": 32 + }, + "fieldNumber": { + "type": "integer", + "example": 5 + } + } + }, + "params": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 6 + } + } + }, + "signatures": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "array" + }, + "items": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + } + } + }, + "fieldNumber": { + "type": "integer", + "example": 7 + } + } + } + } + } + } + } + } + }, + "MessageSchema": { + "type": "object", + "required": ["moduleCommand", "param", "schema"], + "properties": { + "moduleCommand": { + "type": "string", + "example": "auth:registerMultisignature", + "description": "Combination of transaction moduleName:commandName." + }, + "param": { + "type": "string", + "example": "signatures", + "description": "The property within the params of the corresponding moduleCommand type transaction for which the corresponding schema is to be used to serialize the information.\nExample: The schema with `\"$id\": \"/auth/command/regMultisigMsg\"` is to be used to serialize the `signatures` data within the transaction params for the `auth:registerMultisignature` command." + }, + "schema": { + "type": "object", + "required": ["$id", "type", "required", "properties"], + "properties": { + "$id": { + "type": "string", + "format": "id", + "minLength": 1, + "example": "/auth/command/regMultisigMsg", + "description": "Unique identifier of the message schema." + }, + "type": { + "type": "string", + "example": "object", + "description": "Type of schema." + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["address", "nonce", "numberOfSignatures", "mandatoryKeys", "optionalKeys"] + }, + "properties": { + "type": "object", + "required": ["address", "nonce", "numberOfSignatures", "mandatoryKeys", "optionalKeys"], + "properties": { + "address": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "fieldNumber": { + "type": "integer", + "example": 1 + }, + "minLength": { + "type": "integer", + "example": 20 + }, + "maxLength": { + "type": "integer", + "example": 20 + } + } + }, + "nonce": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint64" + }, + "fieldNumber": { + "type": "integer", + "example": 2 + } + } + }, + "numberOfSignatures": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "uint32" + }, + "fieldNumber": { + "type": "integer", + "example": 3 + } + } + }, + "mandatoryKeys": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "array" + }, + "items": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "minLength": { + "type": "integer", + "example": 32 + }, + "maxLength": { + "type": "integer", + "example": 32 + } + } + }, + "fieldNumber": { + "type": "integer", + "example": 4 + } + } + }, + "optionalKeys": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "array" + }, + "items": { + "type": "object", + "properties": { + "dataType": { + "type": "string", + "example": "bytes" + }, + "minLength": { + "type": "integer", + "example": 32 + }, + "maxLength": { + "type": "integer", + "example": 32 + } + } + }, + "fieldNumber": { + "type": "integer", + "example": 5 + } + } + } + } + } + } + } + } + }, + "SchemaWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "description": "List of schemas", + "type": "object", + "properties": { + "block": { + "$ref": "#/definitions/BlockSchema" + }, + "header": { + "$ref": "#/definitions/HeaderSchema" + }, + "asset": { + "$ref": "#/definitions/AssetSchema" + }, + "transaction": { + "$ref": "#/definitions/TransactionSchema" + }, + "standardEvent": { + "$ref": "#/definitions/StandardEventSchema" + }, + "ccm": { + "$ref": "#/definitions/CcmSchema" + }, + "event": { + "$ref": "#/definitions/EventSchema" + }, + "events": { + "type": "array", + "items": { + "$ref": "#/definitions/EventsSchema" + } + }, + "assets": { + "type": "array", + "items": { + "$ref": "#/definitions/AssetsSchema" + } + }, + "commands": { + "type": "array", + "items": { + "$ref": "#/definitions/CommandsParamsSchema" + } + }, + "messages": { + "type": "array", + "items": { + "$ref": "#/definitions/MessageSchema" + } + } + } + }, + "meta": { + "type": "object" + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/tokens.json b/services/gateway/apis/http-version3/swagger/definitions/tokens.json index 8952bc922..501206460 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/tokens.json +++ b/services/gateway/apis/http-version3/swagger/definitions/tokens.json @@ -1,370 +1,314 @@ { - "tokenWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "array", - "description": "Information for a given token.", - "items": { - "type": "object", - "required": [ - "tokenID", - "availableBalance", - "lockedBalances" - ], - "properties": { - "tokenID": { - "type": "string", - "format": "id", - "example": "0000000000000000", - "description": "Token unique identifier." - }, - "availableBalance": { - "type": "string", - "example": "10000000", - "description": "Available balance." - }, - "lockedBalances": { - "type": "array", - "items": { - "type": "object", - "required": [ - "module", - "amount" - ], - "properties": { - "module": { - "type": "string", - "example": "token", - "description": "The module for which the current balance is locked." - }, - "amount": { - "type": "string", - "example": "10000" - } - } - } - } - } - } - }, - "meta": { - "type": "object", - "required": [ - "address", - "count", - "offset", - "total" - ], - "properties": { - "address": { - "type": "string", - "format": "address", - "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is a 41 characters long identifier that begins with `lsk`." - }, - "count": { - "type": "integer", - "example": 10, - "minimum": 0, - "description": "Number of items returned in the request." - }, - "offset": { - "type": "integer", - "example": 10, - "minimum": 0, - "description": "Number of items skipped in the response." - }, - "total": { - "type": "integer", - "example": 100, - "minimum": 0, - "description": "Total number of items matching the request query." - } - } - } - } - }, - "escrowedAmount": { - "type": "object", - "required": [ - "escrowChainID", - "tokenID", - "amount" - ], - "properties": { - "escrowChainID": { - "type": "string", - "example": "00000000", - "description": "ID of the chain to which the specified token is escrowed." - }, - "tokenID": { - "type": "string", - "example": "0000000010000000", - "description": "The universal token identifier for the escrowed tokens within the Lisk ecosystem." - }, - "amount": { - "type": "string", - "example": "50000000000", - "description": "The escrowed amount." - } - } - }, - "supportedToken": { - "type": "object", - "required": [ - "tokenID" - ], - "properties": { - "isSupportAllTokens": { - "type": "boolean", - "example": "true", - "description": "Boolean indicating if the chain supports all kinds of tokens." - }, - "patternTokenIDs": { - "type": "array", - "items": { - "type": "string", - "description": "A tokenID pattern for matching all the tokens from a specific chain." - }, - "description": "List of tokenID patterns supported on the current chain.", - "example": [ - "00000000******" - ] - }, - "exactTokenIDs": { - "type": "array", - "items": { - "type": "string", - "description": "A universal token identifier within the Lisk ecosystem." - }, - "description": "List of supported token identifiers.", - "example": [ - "0000000000000000" - ] - } - } - }, - "totalSupply": { - "type": "object", - "required": [ - "tokenID", - "amount" - ], - "properties": { - "tokenID": { - "type": "string", - "example": "0000000000000000", - "description": "The universal token identifier for the token within the Lisk ecosystem." - }, - "amount": { - "type": "string", - "example": "50000000000", - "description": "Total supply of the token on the current blockchain. The supply includes the escrowed token amount as well." - } - } - }, - "tokenSummaryWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "description": "List of supported tokens.", - "properties": { - "escrowedAmounts": { - "type": "array", - "items": { - "$ref": "#/definitions/escrowedAmount" - } - }, - "supportedTokens": { - "type": "array", - "items": { - "$ref": "#/definitions/supportedToken" - } - }, - "totalSupply": { - "type": "array", - "items": { - "$ref": "#/definitions/totalSupply" - } - } - } - }, - "meta": { - "type": "object" - } - } - }, - "tokenAvailableIDsWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "description": "List of token identifiers.", - "properties": { - "tokenIDs": { - "type": "array", - "items": { - "type": "string", - "description": "A universal token identifier within the Lisk ecosystem." - }, - "description": "List of available token identifiers.", - "example": [ - "0000000000000000" - ] - } - } - }, - "meta": { - "$ref": "#/definitions/pagination" - } - } - }, - "tokenTopBalancesWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "description": "List of list of top accounts by tokenID.", - "properties": { - "0000000000000000": { - "type": "array", - "items": { - "type": "object", - "required": [ - "address", - "balance", - "knowledge" - ], - "properties": { - "address": { - "type": "string", - "format": "address", - "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is a 41 characters long identifier that begins with `lsk`." - }, - "publicKey": { - "type": "string", - "format": "publicKey", - "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", - "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owner's private key." - }, - "name": { - "type": "string", - "example": "genesis_84", - "description": "Registered name of account." - }, - "balance": { - "type": "string", - "example": "10000000", - "description": "Account balance." - }, - "knowledge": { - "type": "object", - "properties": { - "owner": { - "type": "string", - "example": "Genesis Account", - "description": "Name of account owner." - }, - "description": { - "type": "string", - "example": "Initial supply", - "description": "Account description." - } - } - } - } - } - } - } - }, - "meta": { - "$ref": "#/definitions/pagination" - } - } - }, - "tokenConstantsWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "description": "Token module constants.", - "type": "object", - "required": [ - "extraCommandFees" - ], - "properties": { - "extraCommandFees": { - "description": "Extra fees associated (beyond the usual transaction fees) for the listed commands.", - "type": "object", - "required": [ - "userAccountInitializationFee", - "escrowAccountInitializationFee" - ], - "properties": { - "userAccountInitializationFee": { - "type": "string", - "example": "5000000", - "description": "The extra fee to be supplied for initializing a new user account." - }, - "escrowAccountInitializationFee": { - "type": "string", - "example": "5000000", - "description": "The extra fee to be supplied for initializing a new escrow account." - } - } - } - } - }, - "meta": { - "type": "object" - } - } - }, - "tokenAccountExistsWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "required": [ - "isExists" - ], - "properties": { - "isExists": { - "type": "boolean", - "example": "true", - "description": "Represents existence of the address in blockchain for the specified token." - } - } - }, - "meta": { - "type": "object" - } - } - } + "tokenWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "array", + "description": "Information for a given token.", + "items": { + "type": "object", + "required": ["tokenID", "availableBalance", "lockedBalances"], + "properties": { + "tokenID": { + "type": "string", + "format": "id", + "example": "0000000000000000", + "description": "Token unique identifier." + }, + "availableBalance": { + "type": "string", + "example": "10000000", + "description": "Available balance." + }, + "lockedBalances": { + "type": "array", + "items": { + "type": "object", + "required": ["module", "amount"], + "properties": { + "module": { + "type": "string", + "example": "token", + "description": "The module for which the current balance is locked." + }, + "amount": { + "type": "string", + "example": "10000" + } + } + } + } + } + } + }, + "meta": { + "type": "object", + "required": ["address", "count", "offset", "total"], + "properties": { + "address": { + "type": "string", + "format": "address", + "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", + "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is a 41 characters long identifier that begins with `lsk`." + }, + "count": { + "type": "integer", + "example": 10, + "minimum": 0, + "description": "Number of items returned in the request." + }, + "offset": { + "type": "integer", + "example": 10, + "minimum": 0, + "description": "Number of items skipped in the response." + }, + "total": { + "type": "integer", + "example": 100, + "minimum": 0, + "description": "Total number of items matching the request query." + } + } + } + } + }, + "escrowedAmount": { + "type": "object", + "required": ["escrowChainID", "tokenID", "amount"], + "properties": { + "escrowChainID": { + "type": "string", + "example": "00000000", + "description": "ID of the chain to which the specified token is escrowed." + }, + "tokenID": { + "type": "string", + "example": "0000000010000000", + "description": "The universal token identifier for the escrowed tokens within the Lisk ecosystem." + }, + "amount": { + "type": "string", + "example": "50000000000", + "description": "The escrowed amount." + } + } + }, + "supportedToken": { + "type": "object", + "required": ["tokenID"], + "properties": { + "isSupportAllTokens": { + "type": "boolean", + "example": "true", + "description": "Boolean indicating if the chain supports all kinds of tokens." + }, + "patternTokenIDs": { + "type": "array", + "items": { + "type": "string", + "description": "A tokenID pattern for matching all the tokens from a specific chain." + }, + "description": "List of tokenID patterns supported on the current chain.", + "example": ["00000000******"] + }, + "exactTokenIDs": { + "type": "array", + "items": { + "type": "string", + "description": "A universal token identifier within the Lisk ecosystem." + }, + "description": "List of supported token identifiers.", + "example": ["0000000000000000"] + } + } + }, + "totalSupply": { + "type": "object", + "required": ["tokenID", "amount"], + "properties": { + "tokenID": { + "type": "string", + "example": "0000000000000000", + "description": "The universal token identifier for the token within the Lisk ecosystem." + }, + "amount": { + "type": "string", + "example": "50000000000", + "description": "Total supply of the token on the current blockchain. The supply includes the escrowed token amount as well." + } + } + }, + "tokenSummaryWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "description": "List of supported tokens.", + "properties": { + "escrowedAmounts": { + "type": "array", + "items": { + "$ref": "#/definitions/escrowedAmount" + } + }, + "supportedTokens": { + "type": "array", + "items": { + "$ref": "#/definitions/supportedToken" + } + }, + "totalSupply": { + "type": "array", + "items": { + "$ref": "#/definitions/totalSupply" + } + } + } + }, + "meta": { + "type": "object" + } + } + }, + "tokenAvailableIDsWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "description": "List of token identifiers.", + "properties": { + "tokenIDs": { + "type": "array", + "items": { + "type": "string", + "description": "A universal token identifier within the Lisk ecosystem." + }, + "description": "List of available token identifiers.", + "example": ["0000000000000000"] + } + } + }, + "meta": { + "$ref": "#/definitions/pagination" + } + } + }, + "tokenTopBalancesWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "description": "List of list of top accounts by tokenID.", + "properties": { + "0000000000000000": { + "type": "array", + "items": { + "type": "object", + "required": ["address", "balance", "knowledge"], + "properties": { + "address": { + "type": "string", + "format": "address", + "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", + "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is a 41 characters long identifier that begins with `lsk`." + }, + "publicKey": { + "type": "string", + "format": "publicKey", + "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd", + "description": "The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owner's private key." + }, + "name": { + "type": "string", + "example": "genesis_84", + "description": "Registered name of account." + }, + "balance": { + "type": "string", + "example": "10000000", + "description": "Account balance." + }, + "knowledge": { + "type": "object", + "properties": { + "owner": { + "type": "string", + "example": "Genesis Account", + "description": "Name of account owner." + }, + "description": { + "type": "string", + "example": "Initial supply", + "description": "Account description." + } + } + } + } + } + } + } + }, + "meta": { + "$ref": "#/definitions/pagination" + } + } + }, + "tokenConstantsWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "description": "Token module constants.", + "type": "object", + "required": ["extraCommandFees"], + "properties": { + "extraCommandFees": { + "description": "Extra fees associated (beyond the usual transaction fees) for the listed commands.", + "type": "object", + "required": ["userAccountInitializationFee", "escrowAccountInitializationFee"], + "properties": { + "userAccountInitializationFee": { + "type": "string", + "example": "5000000", + "description": "The extra fee to be supplied for initializing a new user account." + }, + "escrowAccountInitializationFee": { + "type": "string", + "example": "5000000", + "description": "The extra fee to be supplied for initializing a new escrow account." + } + } + } + } + }, + "meta": { + "type": "object" + } + } + }, + "tokenAccountExistsWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "required": ["isExists"], + "properties": { + "isExists": { + "type": "boolean", + "example": "true", + "description": "Represents existence of the address in blockchain for the specified token." + } + } + }, + "meta": { + "type": "object" + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/definitions/transactions.json b/services/gateway/apis/http-version3/swagger/definitions/transactions.json index 39eb39cdf..6866a41b2 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/transactions.json +++ b/services/gateway/apis/http-version3/swagger/definitions/transactions.json @@ -1,10 +1,7 @@ { "TransactionsStatisticsWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "$ref": "#/definitions/TransactionsStatistics" @@ -16,13 +13,7 @@ }, "TransactionStatisticsMeta": { "type": "object", - "required": [ - "count", - "offset", - "total", - "duration", - "info" - ], + "required": ["count", "offset", "total", "duration", "info"], "properties": { "count": { "type": "integer", @@ -67,11 +58,7 @@ "TransactionsStatistics": { "type": "object", "description": "Transactions statistics", - "required": [ - "distributionByType", - "distributionByAmount", - "timeline" - ], + "required": ["distributionByType", "distributionByAmount", "timeline"], "properties": { "distributionByType": { "type": "object", @@ -105,12 +92,7 @@ "type": "array", "items": { "type": "object", - "required": [ - "timestamp", - "date", - "transactionCount", - "volume" - ], + "required": ["timestamp", "date", "transactionCount", "volume"], "properties": { "timestamp": { "type": "integer", @@ -260,6 +242,16 @@ } } }, + "signatures": { + "type": "array", + "description": "An array representing signature(s) of the transaction sender.", + "items": { + "type": "string" + }, + "example": [ + "48425002226745847e155cf5480478c2336a43bb178439e9058cc2b50e26335cf7c8360b6c6a49793d7ae8d087bc746cab9618655e6a0adba4694cce2015b50f" + ] + }, "executionStatus": { "type": "string", "example": "successful", @@ -300,10 +292,7 @@ }, "TransactionsWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "description": "List of transactions", @@ -455,17 +444,11 @@ }, "dryTransactionWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "type": "object", - "required": [ - "result", - "events" - ], + "required": ["result", "events"], "properties": { "result": { "type": "integer", @@ -564,20 +547,12 @@ }, "transactionEstimateFeesRequestBody": { "type": "object", - "required": [ - "transaction" - ], + "required": ["transaction"], "properties": { "transaction": { "type": "object", "description": "Transaction object.\n\n Note: The transaction object must contain the following properties: module, command, nonce, senderPublicKey and params.\nWhen estimating 'token:transferCrossChain' transactions do not include 'messageFee' and 'messageFeeTokenID' in the params.", - "required": [ - "module", - "command", - "nonce", - "senderPublicKey", - "params" - ], + "required": ["module", "command", "nonce", "senderPublicKey", "params"], "properties": { "id": { "type": "string", @@ -664,29 +639,19 @@ }, "txEstimateFeesWithEnvelope": { "type": "object", - "required": [ - "data", - "meta" - ], + "required": ["data", "meta"], "properties": { "data": { "type": "object", - "required": [ - "transaction" - ], + "required": ["transaction"], "properties": { "transaction": { "type": "object", - "required": [ - "fee" - ], + "required": ["fee"], "properties": { "fee": { "type": "object", - "required": [ - "tokenID", - "minimum" - ], + "required": ["tokenID", "minimum"], "properties": { "tokenID": { "type": "string", @@ -700,11 +665,7 @@ }, "priority": { "type": "object", - "required": [ - "low", - "medium", - "high" - ], + "required": ["low", "medium", "high"], "description": "Transaction fee recommendations by priority based on the dynamic fees algorithm.", "properties": { "low": { @@ -728,16 +689,11 @@ }, "params": { "type": "object", - "required": [ - "messageFee" - ], + "required": ["messageFee"], "properties": { "messageFee": { "type": "object", - "required": [ - "tokenID", - "amount" - ], + "required": ["tokenID", "amount"], "properties": { "tokenID": { "type": "string", @@ -759,27 +715,19 @@ }, "meta": { "type": "object", - "required": [ - "breakdown" - ], + "required": ["breakdown"], "properties": { "breakdown": { "type": "object", - "required": [ - "fee" - ], + "required": ["fee"], "properties": { "fee": { "type": "object", - "required": [ - "minimum" - ], + "required": ["minimum"], "properties": { "minimum": { "type": "object", - "required": [ - "byteFee" - ], + "required": ["byteFee"], "properties": { "byteFee": { "type": "string", @@ -822,15 +770,11 @@ }, "params": { "type": "object", - "required": [ - "messageFee" - ], + "required": ["messageFee"], "properties": { "messageFee": { "type": "object", - "required": [ - "ccmByteFee" - ], + "required": ["ccmByteFee"], "properties": { "ccmByteFee": { "type": "string", diff --git a/services/gateway/apis/http-version3/swagger/definitions/validators.json b/services/gateway/apis/http-version3/swagger/definitions/validators.json index bd185c3b2..1a1190eb8 100644 --- a/services/gateway/apis/http-version3/swagger/definitions/validators.json +++ b/services/gateway/apis/http-version3/swagger/definitions/validators.json @@ -1,102 +1,90 @@ { - "validatorWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "required": [ - "generatorKey", - "blsKey" - ], - "description": "Validator information for a given address.", - "properties": { - "generatorKey": { - "type": "string", - "format": "id", - "example": "59274923432b74133be4def9c9f8e544bf032184a2153b0ca34b1dd5669f5fdf", - "description": "Generator key" - }, - "blsKey": { - "type": "string", - "format": "id", - "example": "8aeba1cc038ad2cf1ba6ae1479f293f1e3c074369c3afe623e6921ac4cd6c959647ca85fe197228c38dda1df18812d32", - "description": "BLS key." - }, - "proofOfPossession": { - "type": "string", - "example": "abb6c31f5885022765301fbfcc6c34686ef9a9b0eec34cb487433558071ab57fd28852752f81dda00447e69d61f63f48174c10a0a0a2d34d230b9a75d903a0befdef82708e5f869ff75090c1b5ce85565e8a17e5e06c4cae305c5efb1f37d996", - "description": "The Proof of Possession corresponding the BLS key." - } - } - }, - "meta": { - "type": "object", - "required": [ - "address", - "publicKey" - ], - "properties": { - "address": { - "type": "string", - "format": "address", - "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", - "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is 41 character long identifier that begins with `lsk`." - }, - "publicKey": { - "type": "string", - "format": "publicKey", - "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd" - }, - "name": { - "type": "string", - "example": "genesis_84", - "description": "Validator name" - } - } - } - } - }, - "blsKeyValidationWithEnvelope": { - "type": "object", - "required": [ - "data", - "meta" - ], - "properties": { - "data": { - "type": "object", - "description": "Validity of the supplied BLS key and Proof of Possession.", - "properties": { - "isValid": { - "type": "boolean", - "example": "true", - "description": "Returns a boolean representing the validity of the supplied BLS key and Proof of Possession." - } - } - }, - "meta": { - "type": "object", - "properties": {} - } - } - }, - "blsKeyValidationParamEnvelope": { - "type": "object", - "properties": { - "blsKey": { - "type": "string", - "example": "b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81", - "description": "The BLS key." - }, - "proofOfPossession": { - "type": "string", - "example": "88bb31b27eae23038e14f9d9d1b628a39f5881b5278c3c6f0249f81ba0deb1f68aa5f8847854d6554051aa810fdf1cdb02df4af7a5647b1aa4afb60ec6d446ee17af24a8a50876ffdaf9bf475038ec5f8ebeda1c1c6a3220293e23b13a9a5d26", - "description": "The Proof of Possession corresponding to the specified BLS key." - } - } - } + "validatorWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "required": ["generatorKey", "blsKey"], + "description": "Validator information for a given address.", + "properties": { + "generatorKey": { + "type": "string", + "format": "id", + "example": "59274923432b74133be4def9c9f8e544bf032184a2153b0ca34b1dd5669f5fdf", + "description": "Generator key" + }, + "blsKey": { + "type": "string", + "format": "id", + "example": "8aeba1cc038ad2cf1ba6ae1479f293f1e3c074369c3afe623e6921ac4cd6c959647ca85fe197228c38dda1df18812d32", + "description": "BLS key." + }, + "proofOfPossession": { + "type": "string", + "example": "abb6c31f5885022765301fbfcc6c34686ef9a9b0eec34cb487433558071ab57fd28852752f81dda00447e69d61f63f48174c10a0a0a2d34d230b9a75d903a0befdef82708e5f869ff75090c1b5ce85565e8a17e5e06c4cae305c5efb1f37d996", + "description": "The Proof of Possession corresponding the BLS key." + } + } + }, + "meta": { + "type": "object", + "required": ["address", "publicKey"], + "properties": { + "address": { + "type": "string", + "format": "address", + "example": "lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99", + "description": "The Lisk Address is the human-readable representation of a blockchain account.\nIt is 41 character long identifier that begins with `lsk`." + }, + "publicKey": { + "type": "string", + "format": "publicKey", + "example": "b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd" + }, + "name": { + "type": "string", + "example": "genesis_84", + "description": "Validator name" + } + } + } + } + }, + "blsKeyValidationWithEnvelope": { + "type": "object", + "required": ["data", "meta"], + "properties": { + "data": { + "type": "object", + "description": "Validity of the supplied BLS key and Proof of Possession.", + "properties": { + "isValid": { + "type": "boolean", + "example": "true", + "description": "Returns a boolean representing the validity of the supplied BLS key and Proof of Possession." + } + } + }, + "meta": { + "type": "object", + "properties": {} + } + } + }, + "blsKeyValidationParamEnvelope": { + "type": "object", + "properties": { + "blsKey": { + "type": "string", + "example": "b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81", + "description": "The BLS key." + }, + "proofOfPossession": { + "type": "string", + "example": "88bb31b27eae23038e14f9d9d1b628a39f5881b5278c3c6f0249f81ba0deb1f68aa5f8847854d6554051aa810fdf1cdb02df4af7a5647b1aa4afb60ec6d446ee17af24a8a50876ffdaf9bf475038ec5f8ebeda1c1c6a3220293e23b13a9a5d26", + "description": "The Proof of Possession corresponding to the specified BLS key." + } + } + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/blockchainApps.json b/services/gateway/apis/http-version3/swagger/parameters/blockchainApps.json index 2deaf70e6..e4b66e353 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/blockchainApps.json +++ b/services/gateway/apis/http-version3/swagger/parameters/blockchainApps.json @@ -1,78 +1,78 @@ { - "name": { - "name": "name", - "in": "query", - "description": "Blockchain application name.", - "type": "string", - "minLength": 3, - "maxLength": 20 - }, - "chainID": { - "name": "chainID", - "in": "query", - "description": "Chain ID to query.", - "type": "string", - "format": "id", - "minLength": 8, - "maxLength": 8 - }, - "chainIDCSV": { - "name": "chainID", - "in": "query", - "description": "Chain ID to query (can be expressed as CSV).", - "type": "string", - "format": "id", - "minLength": 8 - }, - "blockchainAppStatus": { - "name": "status", - "in": "query", - "description": "Status of the blockchain application. Can be expressed as CSV.\nAccepted values: 'registered', 'activated', 'terminated', 'unregistered'.", - "type": "string" - }, - "network": { - "name": "network", - "in": "query", - "description": "Network for which the application metadata is to be queried (can be expressed as CSV).\n\nAccepted values: mainnet, testnet, betanet, devnet.", - "type": "string", - "minLength": 1 - }, - "blockchainAppSearch": { - "name": "search", - "in": "query", - "description": "Search by name. Supports both partial and full text search.", - "type": "string", - "minLength": 1, - "maxLength": 20 - }, - "chainName": { - "name": "chainName", - "in": "query", - "description": "Chain name to query. Supports case-insensitive chain name.", - "type": "string", - "minLength": 3 - }, - "displayName": { - "name": "displayName", - "in": "query", - "description": "Display name to query. Supports case-insensitive display name.", - "type": "string", - "minLength": 3 - }, - "searchByChainName": { - "name": "search", - "in": "query", - "description": "Case-insensitive search by chain name. Supports both partial and full text search.", - "type": "string", - "minLength": 1, - "maxLength": 20 - }, - "searchByChainAndDisplayName": { - "name": "search", - "in": "query", - "description": "Case-insensitive search by chain name or display name. Supports both partial and full text search.", - "type": "string", - "minLength": 1, - "maxLength": 20 - } + "name": { + "name": "name", + "in": "query", + "description": "Blockchain application name.", + "type": "string", + "minLength": 3, + "maxLength": 20 + }, + "chainID": { + "name": "chainID", + "in": "query", + "description": "Chain ID to query.", + "type": "string", + "format": "id", + "minLength": 8, + "maxLength": 8 + }, + "chainIDCSV": { + "name": "chainID", + "in": "query", + "description": "Chain ID to query (can be expressed as CSV).", + "type": "string", + "format": "id", + "minLength": 8 + }, + "blockchainAppStatus": { + "name": "status", + "in": "query", + "description": "Status of the blockchain application. Can be expressed as CSV.\nAccepted values: 'registered', 'activated', 'terminated', 'unregistered'.", + "type": "string" + }, + "network": { + "name": "network", + "in": "query", + "description": "Network for which the application metadata is to be queried (can be expressed as CSV).\n\nAccepted values: mainnet, testnet, betanet, devnet.", + "type": "string", + "minLength": 1 + }, + "blockchainAppSearch": { + "name": "search", + "in": "query", + "description": "Search by name. Supports both partial and full text search.", + "type": "string", + "minLength": 1, + "maxLength": 20 + }, + "chainName": { + "name": "chainName", + "in": "query", + "description": "Chain name to query. Supports case-insensitive chain name.", + "type": "string", + "minLength": 3 + }, + "displayName": { + "name": "displayName", + "in": "query", + "description": "Display name to query. Supports case-insensitive display name.", + "type": "string", + "minLength": 3 + }, + "searchByChainName": { + "name": "search", + "in": "query", + "description": "Case-insensitive search by chain name. Supports both partial and full text search.", + "type": "string", + "minLength": 1, + "maxLength": 20 + }, + "searchByChainAndDisplayName": { + "name": "search", + "in": "query", + "description": "Case-insensitive search by chain name or display name. Supports both partial and full text search.", + "type": "string", + "minLength": 1, + "maxLength": 20 + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/blockchainAppsMeta.json b/services/gateway/apis/http-version3/swagger/parameters/blockchainAppsMeta.json index 09b7323a8..3ed367b8f 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/blockchainAppsMeta.json +++ b/services/gateway/apis/http-version3/swagger/parameters/blockchainAppsMeta.json @@ -1,9 +1,9 @@ { - "isDefault": { - "name": "isDefault", - "in": "query", - "description": "Filter default blockchain application.", - "type": "boolean", - "minLength": 1 - } + "isDefault": { + "name": "isDefault", + "in": "query", + "description": "Filter default blockchain application.", + "type": "boolean", + "minLength": 1 + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/blocks.json b/services/gateway/apis/http-version3/swagger/parameters/blocks.json index 9e403bfa3..b4a81d6ad 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/blocks.json +++ b/services/gateway/apis/http-version3/swagger/parameters/blocks.json @@ -1,27 +1,27 @@ { - "blockID": { - "name": "blockID", - "in": "query", - "description": "Block ID to query", - "type": "string", - "format": "id", - "minLength": 64, - "maxLength": 64 - }, - "generatorAddress": { - "name": "generatorAddress", - "in": "query", - "description": "Lisk account address", - "type": "string", - "format": "address", - "minLength": 41, - "maxLength": 41 - }, - "module": { - "name": "module", - "in": "query", - "description": "Module name to query", - "type": "string", - "minLength": 1 - } + "blockID": { + "name": "blockID", + "in": "query", + "description": "Block ID to query", + "type": "string", + "format": "id", + "minLength": 64, + "maxLength": 64 + }, + "generatorAddress": { + "name": "generatorAddress", + "in": "query", + "description": "Lisk account address", + "type": "string", + "format": "address", + "minLength": 41, + "maxLength": 41 + }, + "module": { + "name": "module", + "in": "query", + "description": "Module name to query", + "type": "string", + "minLength": 1 + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/commandsParamsSchemas.json b/services/gateway/apis/http-version3/swagger/parameters/commandsParamsSchemas.json index d38048af1..bcdc4629c 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/commandsParamsSchemas.json +++ b/services/gateway/apis/http-version3/swagger/parameters/commandsParamsSchemas.json @@ -1,9 +1,9 @@ { - "moduleCommand": { - "name": "moduleCommand", - "in": "query", - "description": "Combination of moduleName:commandName", - "type": "string", - "minLength": 1 - } + "moduleCommand": { + "name": "moduleCommand", + "in": "query", + "description": "Combination of moduleName:commandName", + "type": "string", + "minLength": 1 + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/common.json b/services/gateway/apis/http-version3/swagger/parameters/common.json index d0f1fac48..c6c440864 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/common.json +++ b/services/gateway/apis/http-version3/swagger/parameters/common.json @@ -42,6 +42,23 @@ "type": "string", "minimum": 0 }, + "heightWithoutRange": { + "name": "height", + "in": "query", + "description": "Query by height.", + "type": "string", + "minimum": 0 + }, + "addressRequired": { + "name": "address", + "required": true, + "in": "query", + "description": "Lisk account address.", + "type": "string", + "format": "address", + "minLength": 41, + "maxLength": 41 + }, "blockHeight": { "name": "height", "in": "query", diff --git a/services/gateway/apis/http-version3/swagger/parameters/dynamicReward.json b/services/gateway/apis/http-version3/swagger/parameters/dynamicReward.json index 8fe34fd56..764fff6ac 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/dynamicReward.json +++ b/services/gateway/apis/http-version3/swagger/parameters/dynamicReward.json @@ -1,10 +1,10 @@ { - "blockHeightRequired": { - "name": "height", - "in": "query", - "description": "Block height to query.", - "type": "number", - "minimum": 0, - "required": true - } + "blockHeightRequired": { + "name": "height", + "in": "query", + "description": "Block height to query.", + "type": "number", + "minimum": 0, + "required": true + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/events.json b/services/gateway/apis/http-version3/swagger/parameters/events.json index 00fffeb9f..71c30d8ac 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/events.json +++ b/services/gateway/apis/http-version3/swagger/parameters/events.json @@ -1,16 +1,16 @@ { - "topic": { - "name": "topic", - "in": "query", - "description": "Event topic to query (can be expressed as CSV).", - "type": "string", - "minLength": 1 - }, - "eventName": { - "name": "name", - "in": "query", - "description": "Event name to query.", - "type": "string", - "minLength": 1 - } + "topic": { + "name": "topic", + "in": "query", + "description": "Event topic to query (can be expressed as CSV). For performance reasons, we do not allow users to query default topics such as `03`.", + "type": "string", + "minLength": 1 + }, + "eventName": { + "name": "name", + "in": "query", + "description": "Event name to query.", + "type": "string", + "minLength": 1 + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/invoke.json b/services/gateway/apis/http-version3/swagger/parameters/invoke.json index 22acf5f3f..67a420186 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/invoke.json +++ b/services/gateway/apis/http-version3/swagger/parameters/invoke.json @@ -1,11 +1,11 @@ { - "invokeParams": { - "name": "body", - "in": "body", - "required": true, - "description": "The request body can contain 2 properties:\n- endpoint (required): Blockchain application endpoint to invoke\n- params (optional): Parameters to be passed to the application endpoint", - "schema": { - "$ref": "#/definitions/invokeParamsEnvelope" - } - } -} \ No newline at end of file + "invokeParams": { + "name": "body", + "in": "body", + "required": true, + "description": "The request body can contain 2 properties:\n- endpoint (required): Blockchain application endpoint to invoke\n- params (optional): Parameters to be passed to the application endpoint", + "schema": { + "$ref": "#/definitions/invokeParamsEnvelope" + } + } +} diff --git a/services/gateway/apis/http-version3/swagger/parameters/legacy.json b/services/gateway/apis/http-version3/swagger/parameters/legacy.json index 1a5656a40..0280a0d58 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/legacy.json +++ b/services/gateway/apis/http-version3/swagger/parameters/legacy.json @@ -1,11 +1,11 @@ { - "publicKeyRequired": { - "name": "publicKey", - "in": "query", - "description": "Public key of the account to query.", - "type": "number", - "minLength": 64, - "maxLength": 64, - "required": true - } + "publicKeyRequired": { + "name": "publicKey", + "in": "query", + "description": "Public key of the account to query.", + "type": "number", + "minLength": 64, + "maxLength": 64, + "required": true + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/peers.json b/services/gateway/apis/http-version3/swagger/parameters/peers.json index 86f6c14c8..be44f4536 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/peers.json +++ b/services/gateway/apis/http-version3/swagger/parameters/peers.json @@ -1,25 +1,25 @@ { - "ip": { - "name": "ip", - "in": "query", - "description": "IP of the node.", - "type": "string", - "format": "ip" - }, - "networkVersion": { - "name": "networkVersion", - "in": "query", - "description": "Network version.", - "type": "string", - "format": "version" - }, - "state": { - "name": "state", - "in": "query", - "description": "Current state of the network.", - "type": "integer", - "format": "int32", - "minimum": 0, - "maximum": 2 - } + "ip": { + "name": "ip", + "in": "query", + "description": "IP of the node.", + "type": "string", + "format": "ip" + }, + "networkVersion": { + "name": "networkVersion", + "in": "query", + "description": "Network version.", + "type": "string", + "format": "version" + }, + "state": { + "name": "state", + "in": "query", + "description": "Current state of the network.", + "type": "integer", + "format": "int32", + "minimum": 0, + "maximum": 2 + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/tokens.json b/services/gateway/apis/http-version3/swagger/parameters/tokens.json index d81459968..a47a89ccb 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/tokens.json +++ b/services/gateway/apis/http-version3/swagger/parameters/tokens.json @@ -1,36 +1,36 @@ { - "tokenID": { - "name": "tokenID", - "in": "query", - "description": "Token ID to query.", - "type": "string", - "format": "id", - "minLength": 16, - "maxLength": 16 - }, - "tokenIDCSV": { - "name": "tokenID", - "in": "query", - "description": "Token ID to query (can be expressed as CSV).", - "type": "string", - "format": "id", - "minLength": 16 - }, - "tokenName": { - "name": "tokenName", - "in": "query", - "description": "Token name to query (can be expressed as CSV).", - "type": "string", - "minLength": 1 - }, - "tokenIDRequired": { - "name": "tokenID", - "in": "query", - "description": "Token ID to query.", - "type": "string", - "format": "id", - "minLength": 16, - "maxLength": 16, - "required": true - } + "tokenID": { + "name": "tokenID", + "in": "query", + "description": "Token ID to query.", + "type": "string", + "format": "id", + "minLength": 16, + "maxLength": 16 + }, + "tokenIDCSV": { + "name": "tokenID", + "in": "query", + "description": "Token ID to query (can be expressed as CSV).", + "type": "string", + "format": "id", + "minLength": 16 + }, + "tokenName": { + "name": "tokenName", + "in": "query", + "description": "Token name to query (can be expressed as CSV).", + "type": "string", + "minLength": 1 + }, + "tokenIDRequired": { + "name": "tokenID", + "in": "query", + "description": "Token ID to query.", + "type": "string", + "format": "id", + "minLength": 16, + "maxLength": 16, + "required": true + } } diff --git a/services/gateway/apis/http-version3/swagger/parameters/transactions.json b/services/gateway/apis/http-version3/swagger/parameters/transactions.json index adf68f75e..cc6f0ab81 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/transactions.json +++ b/services/gateway/apis/http-version3/swagger/parameters/transactions.json @@ -40,6 +40,14 @@ "minLength": 41, "maxLength": 41 }, + "receivingChainID": { + "name": "receivingChainID", + "in": "query", + "description": "Chain ID for the receiving chain in the case of cross-chain token transfers.", + "type": "string", + "minLength": 8, + "maxLength": 8 + }, "senderAddress": { "name": "senderAddress", "in": "query", diff --git a/services/gateway/apis/http-version3/swagger/parameters/validator.json b/services/gateway/apis/http-version3/swagger/parameters/validator.json index 02e09d5e5..25e54c658 100644 --- a/services/gateway/apis/http-version3/swagger/parameters/validator.json +++ b/services/gateway/apis/http-version3/swagger/parameters/validator.json @@ -1,21 +1,21 @@ { - "validateBLSKeyParams": { - "name": "body", - "in": "body", - "required": true, - "description": "The request body must contain two properties:\n- blsKey (required): The BLS key.\n- proofOfPossession (required): The Proof of Possession corresponding to the BLS key.", - "schema": { - "$ref": "#/definitions/blsKeyValidationParamEnvelope" - } - }, - "addressRequired": { - "name": "address", - "in": "query", - "description": "Lisk account address.", - "type": "string", - "format": "address", - "minLength": 41, - "maxLength": 41, - "required": true - } + "validateBLSKeyParams": { + "name": "body", + "in": "body", + "required": true, + "description": "The request body must contain two properties:\n- blsKey (required): The BLS key.\n- proofOfPossession (required): The Proof of Possession corresponding to the BLS key.", + "schema": { + "$ref": "#/definitions/blsKeyValidationParamEnvelope" + } + }, + "addressRequired": { + "name": "address", + "in": "query", + "description": "Lisk account address.", + "type": "string", + "format": "address", + "minLength": 41, + "maxLength": 41, + "required": true + } } diff --git a/services/gateway/apis/http-version3/swagger/responses.json b/services/gateway/apis/http-version3/swagger/responses.json index 0f1c7f126..eabdfb86c 100644 --- a/services/gateway/apis/http-version3/swagger/responses.json +++ b/services/gateway/apis/http-version3/swagger/responses.json @@ -1,16 +1,16 @@ { - "responses": { - "badParameter": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/badRequest" - } - }, - "notFound": { - "description": "Not found", - "schema": { - "$ref": "#/definitions/notFound" - } - } - } + "responses": { + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/badRequest" + } + }, + "404": { + "description": "Not found", + "schema": { + "$ref": "#/definitions/notFound" + } + } + } } diff --git a/services/gateway/app.js b/services/gateway/app.js index 8825c5a75..c16cf4e54 100644 --- a/services/gateway/app.js +++ b/services/gateway/app.js @@ -14,12 +14,7 @@ * */ const path = require('path'); -const { - Microservice, - Logger, - LoggerConfig, - Libs, -} = require('lisk-service-framework'); +const { Microservice, Logger, LoggerConfig, Libs } = require('lisk-service-framework'); const config = require('./config'); @@ -43,6 +38,7 @@ const { definition: blocksDefinition } = require('./sources/version3/blocks'); const { definition: feesDefinition } = require('./sources/version3/fees'); const { definition: generatorsDefinition } = require('./sources/version3/generators'); const { definition: transactionsDefinition } = require('./sources/version3/transactions'); +const { definition: indexStatusUpdateDefinition } = require('./sources/version3/indexStatus'); const { host, port } = config; @@ -71,8 +67,8 @@ const tempApp = Microservice({ tempApp.run().then(async () => { // Prepare routes const { modules: registeredModules } = await tempApp.requestRpc('connector.getSystemMetadata'); - const registeredModuleNames = registeredModules.map( - module => module.name === MODULE.REWARD ? MODULE.DYNAMIC_REWARD : module.name, + const registeredModuleNames = registeredModules.map(module => + module.name === MODULE.REWARD ? MODULE.DYNAMIC_REWARD : module.name, ); await tempApp.getBroker().stop(); const httpRoutes = getHttpRoutes(registeredModuleNames); @@ -105,10 +101,18 @@ tempApp.run().then(async () => { } }, actions: { - ready() { return getReady(); }, - async spec(ctx) { return genDocs(ctx, registeredModuleNames); }, - status() { return getStatus(this.broker); }, - isBlockchainIndexReady() { return getIndexStatus(); }, + ready() { + return getReady(); + }, + async spec(ctx) { + return genDocs(ctx, registeredModuleNames); + }, + status() { + return getStatus(this.broker); + }, + isBlockchainIndexReady() { + return getIndexStatus(); + }, }, settings: { host, @@ -153,10 +157,12 @@ tempApp.run().then(async () => { onError(req, res, err) { res.setHeader('Content-Type', 'application/json'); res.writeHead(err.code || 500); - res.end(JSON.stringify({ - error: true, - message: `Server error: ${err.message}`, - })); + res.end( + JSON.stringify({ + error: true, + message: `Server error: ${err.message}`, + }), + ); }, io: { namespaces: socketNamespaces, @@ -164,27 +170,36 @@ tempApp.run().then(async () => { }, methods, events: { - 'block.new': (payload) => sendSocketIoEvent('new.block', mapper(payload, blocksDefinition)), - 'transactions.new': (payload) => sendSocketIoEvent('new.transactions', mapper(payload, transactionsDefinition)), - 'block.delete': (payload) => sendSocketIoEvent('delete.block', mapper(payload, blocksDefinition)), - 'transactions.delete': (payload) => sendSocketIoEvent('delete.transactions', mapper(payload, transactionsDefinition)), - 'round.change': (payload) => sendSocketIoEvent('update.round', payload), - 'generators.change': (payload) => sendSocketIoEvent('update.generators', mapper(payload, generatorsDefinition)), - 'update.fee_estimates': (payload) => sendSocketIoEvent('update.fee_estimates', mapper(payload, feesDefinition)), - 'metadata.change': (payload) => sendSocketIoEvent('update.metadata', payload), + 'block.new': payload => sendSocketIoEvent('new.block', mapper(payload, blocksDefinition)), + 'transactions.new': payload => + sendSocketIoEvent('new.transactions', mapper(payload, transactionsDefinition)), + 'block.delete': payload => + sendSocketIoEvent('delete.block', mapper(payload, blocksDefinition)), + 'transactions.delete': payload => + sendSocketIoEvent('delete.transactions', mapper(payload, transactionsDefinition)), + 'round.change': payload => sendSocketIoEvent('update.round', payload), + 'generators.change': payload => + sendSocketIoEvent('update.generators', mapper(payload, generatorsDefinition)), + 'update.fee_estimates': payload => + sendSocketIoEvent('update.fee_estimates', mapper(payload, feesDefinition)), + 'metadata.change': payload => sendSocketIoEvent('update.metadata', payload), + 'update.index.status': payload => + sendSocketIoEvent('update.index.status', mapper(payload, indexStatusUpdateDefinition)), }, dependencies: config.brokerDependencies, }; if (config.rateLimit.enable) { - logger.info(`Enabling rate limiter, connLimit: ${config.rateLimit.connectionLimit}, window: ${config.rateLimit.window}`); + logger.info( + `Enabling rate limiter, connLimit: ${config.rateLimit.connectionLimit}, window: ${config.rateLimit.window}.`, + ); gatewayConfig.settings.rateLimit = { window: (config.rateLimit.window || 10) * 1000, limit: config.rateLimit.connectionLimit || 200, headers: true, - key: (req) => { + key: req => { if (config.rateLimit.enableXForwardedFor) { const xForwardedFor = req.headers['x-forwarded-for']; const { numKnownProxies } = config.rateLimit; @@ -197,9 +212,11 @@ tempApp.run().then(async () => { } } - return req.connection.remoteAddress - || req.socket.remoteAddress - || req.connection.socket.remoteAddress; + return ( + req.connection.remoteAddress || + req.socket.remoteAddress || + req.connection.socket.remoteAddress + ); }, }; } @@ -208,12 +225,14 @@ tempApp.run().then(async () => { app.addJobs(path.join(__dirname, 'jobs')); // Run the application - app.run(gatewayConfig).then(() => { - logger.info(`Started Gateway API on ${host}:${port}.`); - }).catch(err => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); - logger.fatal(err.stack); - process.exit(1); - }); + app + .run(gatewayConfig) + .then(() => { + logger.info(`Started Gateway API on ${host}:${port}.`); + }) + .catch(err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); + logger.fatal(err.stack); + process.exit(1); + }); }); - diff --git a/services/gateway/config.js b/services/gateway/config.js index b84a85578..0384456c2 100644 --- a/services/gateway/config.js +++ b/services/gateway/config.js @@ -32,9 +32,10 @@ config.host = process.env.HOST || '0.0.0.0'; /** * Inter-service message broker */ -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 10; // in seconds -config.volatileRedis = process.env.SERVICE_GATEWAY_REDIS_VOLATILE || 'redis://127.0.0.1:6379/5'; +config.volatileRedis = + process.env.SERVICE_GATEWAY_REDIS_VOLATILE || 'redis://lisk:password@127.0.0.1:6379/5'; /** * Compatibility @@ -42,16 +43,14 @@ config.volatileRedis = process.env.SERVICE_GATEWAY_REDIS_VOLATILE || 'redis://12 config.jsonRpcStrictMode = process.env.JSON_RPC_STRICT_MODE || 'false'; config.rateLimit = {}; -config.rateLimit.enable = Boolean( - String(process.env.HTTP_RATE_LIMIT_ENABLE).toLowerCase() === 'true', -); +config.rateLimit.enable = String(process.env.HTTP_RATE_LIMIT_ENABLE).toLowerCase() === 'true'; config.rateLimit.window = Number(process.env.HTTP_RATE_LIMIT_WINDOW) || 10; // in seconds // Max number of requests during window -config.rateLimit.connectionLimit = Number(process.env.HTTP_RATE_LIMIT_CONNECTIONS || 200); +config.rateLimit.connectionLimit = Number(process.env.HTTP_RATE_LIMIT_CONNECTIONS) || 200; config.rateLimit.enableXForwardedFor = Boolean( String(process.env.HTTP_RATE_LIMIT_ENABLE_X_FORWARDED_FOR).toLowerCase() === 'true', ); -config.rateLimit.numKnownProxies = Number(process.env.HTTP_RATE_LIMIT_NUM_KNOWN_PROXIES || 0); +config.rateLimit.numKnownProxies = Number(process.env.HTTP_RATE_LIMIT_NUM_KNOWN_PROXIES) || 0; /** * LOGGING @@ -89,8 +88,8 @@ config.api.versions = { config.api.isReverseProxyPresent = Boolean( String(process.env.ENABLE_REVERSE_PROXY_TIMEOUT_SETTINGS).toLowerCase() === 'true', ); -config.api.httpKeepAliveTimeout = Number(process.env.HTTP_KEEP_ALIVE_TIMEOUT || 65000); -config.api.httpHeadersTimeout = Number(process.env.HTTP_HEADERS_TIMEOUT || 66000); +config.api.httpKeepAliveTimeout = Number(process.env.HTTP_KEEP_ALIVE_TIMEOUT) || 65000; +config.api.httpHeadersTimeout = Number(process.env.HTTP_HEADERS_TIMEOUT) || 66000; /** * HTTP API response caching support @@ -98,23 +97,22 @@ config.api.httpHeadersTimeout = Number(process.env.HTTP_HEADERS_TIMEOUT || 66000 config.api.httpCacheControlDirectives = String( process.env.HTTP_CACHE_CONTROL_DIRECTIVES || 'public, max-age=10', ); -config.api.enableHttpCacheControl = Boolean( - String(process.env.ENABLE_HTTP_CACHE_CONTROL).toLowerCase() === 'true', -); +config.api.enableHttpCacheControl = + String(process.env.ENABLE_HTTP_CACHE_CONTROL).toLowerCase() === 'true'; // configuration for websocket rate limit config.websocket = { - enableRateLimit: Boolean(String(process.env.WS_RATE_LIMIT_ENABLE).toLowerCase() === 'true'), + enableRateLimit: String(process.env.WS_RATE_LIMIT_ENABLE).toLowerCase() === 'true', rateLimit: { - points: Number(process.env.WS_RATE_LIMIT_CONNECTIONS || 5), - duration: Number(process.env.WS_RATE_LIMIT_DURATION || 1), // in seconds + points: Number(process.env.WS_RATE_LIMIT_CONNECTIONS) || 5, + duration: Number(process.env.WS_RATE_LIMIT_DURATION) || 1, // in seconds }, }; // Gateway RPC cache settings config.rpcCache = { ttl: 5, // in seconds - enable: Boolean(String(process.env.ENABLE_REQUEST_CACHING).toLowerCase() !== 'false'), + enable: String(process.env.ENABLE_REQUEST_CACHING).toLowerCase() !== 'false', }; const DEFAULT_DEPENDENCIES = 'indexer,connector'; @@ -125,7 +123,7 @@ config.brokerDependencies = DEFAULT_DEPENDENCIES.concat(',', GATEWAY_DEPENDENCIE config.job = { // Interval takes priority over schedule and must be greater than 0 to be valid updateReadinessStatus: { - interval: process.env.JOB_INTERVAL_UPDATE_READINESS_STATUS || 0, + interval: Number(process.env.JOB_INTERVAL_UPDATE_READINESS_STATUS) || 0, schedule: process.env.JOB_SCHEDULE_UPDATE_READINESS_STATUS || '* * * * *', }, }; diff --git a/services/gateway/jest.config.functional.js b/services/gateway/jest.config.functional.js index 280870c91..f4a7de8af 100644 --- a/services/gateway/jest.config.functional.js +++ b/services/gateway/jest.config.functional.js @@ -4,11 +4,8 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/functional/**/*.test.js', - ], + testMatch: ['/tests/functional/**/*.test.js'], testTimeout: 15000, testEnvironment: 'node', }; - diff --git a/services/gateway/jest.config.unit.js b/services/gateway/jest.config.unit.js index 7d1cd81cc..81e2db677 100644 --- a/services/gateway/jest.config.unit.js +++ b/services/gateway/jest.config.unit.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/unit/**/*.test.js', - ], + testMatch: ['/tests/unit/**/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/gateway/namespaces.js b/services/gateway/namespaces.js index 584d372d8..059265cb2 100644 --- a/services/gateway/namespaces.js +++ b/services/gateway/namespaces.js @@ -32,10 +32,10 @@ const filterApis = (requiredApis, availableApis) => { return filteredApis; }; -const getSocketNamespaces = (registeredModuleNames) => filterApis( - config.api.ws, - { - '/rpc-v3': () => registerApi(['http-version3', 'http-exports'], { ...defaultConfig }, registeredModuleNames), +const getSocketNamespaces = registeredModuleNames => + filterApis(config.api.ws, { + '/rpc-v3': () => + registerApi(['http-version3', 'http-exports'], { ...defaultConfig }, registeredModuleNames), '/rpc-test': () => registerApi('http-test', { ...defaultConfig }, registeredModuleNames), '/blockchain': () => ({ events: { @@ -45,8 +45,7 @@ const getSocketNamespaces = (registeredModuleNames) => filterApis( }, }, }), - }, -); + }); module.exports = { getSocketNamespaces, diff --git a/services/gateway/package.json b/services/gateway/package.json index 8b13061ec..ec28c83bc 100644 --- a/services/gateway/package.json +++ b/services/gateway/package.json @@ -1,46 +1,46 @@ { - "name": "lisk-service-gateway", - "version": "0.7.0-rc.1", - "description": "Lisk Service Gateway", - "keywords": [ - "lisk", - "blockchain" - ], - "homepage": "https://github.com/LiskHQ/lisk-service", - "repository": { - "type": "git", - "url": "git@github.com:LiskHQ/lisk-service.git" - }, - "bugs": { - "url": "https://github.com/LiskHQ/lisk-service/issues" - }, - "private": true, - "author": "Lisk Foundation , lightcurve GmbH ", - "license": "Apache-2.0", - "main": "app.js", - "scripts": { - "start": "node app.js", - "clean": "rm -rf ./node_modules", - "test": "yarn run test:unit", - "test:unit": "jest --config=jest.config.unit.js --detectOpenHandles --forceExit", - "watch": "supervisor -w . -i ./node_modules app.js" - }, - "engines": { - "node": ">=18.16 <=18", - "npm": ">=8.5.0" - }, - "dependencies": { - "bluebird": "^3.7.2", - "fastest-validator": "^1.10.1", - "ioredis": "^4.27.1", - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz", - "moleculer": "^0.14.13", - "moment": "^2.29.4", - "rate-limiter-flexible": "^2.2.4", - "safe-regex": "^2.1.1", - "socket.io": "^4.4.1" - }, - "devDependencies": { - "jest": "^27.3.0" - } + "name": "lisk-service-gateway", + "version": "0.7.2", + "description": "Lisk Service Gateway", + "keywords": [ + "lisk", + "blockchain" + ], + "homepage": "https://github.com/LiskHQ/lisk-service", + "repository": { + "type": "git", + "url": "git@github.com:LiskHQ/lisk-service.git" + }, + "bugs": { + "url": "https://github.com/LiskHQ/lisk-service/issues" + }, + "private": true, + "author": "Lisk Foundation , lightcurve GmbH ", + "license": "Apache-2.0", + "main": "app.js", + "scripts": { + "start": "node app.js", + "clean": "rm -rf ./node_modules", + "test": "yarn run test:unit", + "test:unit": "jest --config=jest.config.unit.js --detectOpenHandles --forceExit", + "watch": "supervisor -w . -i ./node_modules app.js" + }, + "engines": { + "node": ">=18.16 <=18", + "npm": ">=8.5.0" + }, + "dependencies": { + "bluebird": "^3.7.2", + "fastest-validator": "^1.10.1", + "ioredis": "^5.3.2", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz", + "moleculer": "^0.14.13", + "moment": "^2.29.4", + "rate-limiter-flexible": "^2.2.4", + "safe-regex": "^2.1.1", + "socket.io": "^4.4.1" + }, + "devDependencies": { + "jest": "^29.7.0" + } } diff --git a/services/gateway/public/static/css/main.css b/services/gateway/public/static/css/main.css index 113c06f48..21b62d3f3 100644 --- a/services/gateway/public/static/css/main.css +++ b/services/gateway/public/static/css/main.css @@ -1,16 +1,16 @@ html { - color: #222; - line-height: 1.4; - font-family: monospace; - font-size: 14pt; + color: #222; + line-height: 1.4; + font-family: monospace; + font-size: 14pt; } img { - width: 100%; + width: 100%; } div { - background-color: rgb(246, 248, 250); - min-height: 3em; - padding: 1em; + background-color: rgb(246, 248, 250); + min-height: 3em; + padding: 1em; } diff --git a/services/gateway/routes.js b/services/gateway/routes.js index 9170c4503..ec999f2dc 100644 --- a/services/gateway/routes.js +++ b/services/gateway/routes.js @@ -50,19 +50,18 @@ const filterApis = (requiredApis, registeredModuleNames) => { const filteredApis = []; // Filter the APIs to be registered on the gateway based on 'requiredApis' config - const apisToRegister = Object.keys(PATH_API_MAPPINGS) - .reduce((acc, path) => { - requiredApis.forEach(api => { - if (PATH_API_MAPPINGS[path].includes(api)) { - if (Array.isArray(acc[path])) { - acc[path].push(api); - } else { - acc[path] = [api]; - } + const apisToRegister = Object.keys(PATH_API_MAPPINGS).reduce((acc, path) => { + requiredApis.forEach(api => { + if (PATH_API_MAPPINGS[path].includes(api)) { + if (Array.isArray(acc[path])) { + acc[path].push(api); + } else { + acc[path] = [api]; } - }); - return acc; - }, {}); + } + }); + return acc; + }, {}); // Generate the final routes to be registered at the gateway in moleculer-web Object.entries(apisToRegister).forEach(([path, apis]) => { @@ -72,7 +71,7 @@ const filterApis = (requiredApis, registeredModuleNames) => { return filteredApis; }; -const getHttpRoutes = (registeredModuleNames) => filterApis(config.api.http, registeredModuleNames); +const getHttpRoutes = registeredModuleNames => filterApis(config.api.http, registeredModuleNames); module.exports = { getHttpRoutes, diff --git a/services/gateway/shared/apiUtils.js b/services/gateway/shared/apiUtils.js index 1a5b4c418..a04e9f8ef 100644 --- a/services/gateway/shared/apiUtils.js +++ b/services/gateway/shared/apiUtils.js @@ -20,14 +20,15 @@ const curlyBracketsToColon = str => str.split('{').join(':').replace(/}/g, ''); const transformPath = url => curlyBracketsToColon(dropOneSlashAtBeginning(url)); const typeMappings = { - string_number: (input) => Number(input), - number_string: (input) => String(input), - array_string: (input) => input.join(','), - string_boolean: (input) => String(input).toLowerCase() === 'true', + string_number: input => Number(input), + number_string: input => String(input), + array_string: input => input.join(','), + string_boolean: input => String(input).toLowerCase() === 'true', }; const convertType = (item, toType) => { - const fromType = typeof item === 'object' && item.constructor.name === 'Array' ? 'array' : typeof item; + const fromType = + typeof item === 'object' && item.constructor.name === 'Array' ? 'array' : typeof item; const typeMatch = `${fromType}_${toType}`; if (typeMappings[typeMatch]) return typeMappings[typeMatch](item); return item; @@ -46,13 +47,14 @@ const mapParam = (source, originalKey, mappingKey) => { const mapParamWithType = (source, originalSetup, mappingKey) => { const [originalKey, dataType] = originalSetup.split(','); const mapObject = mapParam(source, originalKey, mappingKey); - if (typeof dataType === 'string') return { key: mappingKey, value: convertType(mapObject.value, dataType) }; + if (typeof dataType === 'string') + return { key: mappingKey, value: convertType(mapObject.value, dataType) }; return mapObject; }; const transformParams = (params = {}, specs) => { const output = {}; - Object.keys(specs).forEach((specParam) => { + Object.keys(specs).forEach(specParam => { const result = mapParamWithType(params, specs[specParam], specParam); if (result.key) output[result.key] = result.value; }); diff --git a/services/gateway/shared/appContext.js b/services/gateway/shared/appContext.js index 9fe337118..ea710d571 100644 --- a/services/gateway/shared/appContext.js +++ b/services/gateway/shared/appContext.js @@ -16,7 +16,7 @@ let app; -const setAppContext = (h) => app = h; +const setAppContext = h => (app = h); const getAppContext = () => app; diff --git a/services/gateway/shared/customMapper.js b/services/gateway/shared/customMapper.js index 9608a7256..30dc1896f 100644 --- a/services/gateway/shared/customMapper.js +++ b/services/gateway/shared/customMapper.js @@ -19,44 +19,47 @@ const isObject = obj => !!(obj && obj.constructor.name === 'Object'); const isEmptyObj = obj => Object.entries(obj).length === 0 && obj.constructor === Object; const isEmptyArr = obj => Array.isArray(obj) && obj.length === 0; const validate = obj => !(isEmptyObj(obj) || isEmptyArr(obj)); -const isObjectWithValues = obj => !(!Object.values(obj).some(value => value !== undefined)); +const isObjectWithValues = obj => !!Object.values(obj).some(value => value !== undefined); const cast = { number: input => Number(input), string: input => String(input), - boolean: input => ((input === '0') ? false : !!input), - isodate: input => (new Date(input)).toISOString(), + boolean: input => (input === '0' ? false : !!input), + isodate: input => new Date(input).toISOString(), epoch: input => Date.parse(input) / 1000, datetime: input => moment(new Date(input)).utc().format('MM-DD-YYYY HH:mm:ss'), - hex: input => (input ? (Buffer.from(input)).toString('hex') : undefined), - base64: input => (input ? (Buffer.from(input)).toString('base64') : undefined), + hex: input => (input ? Buffer.from(input).toString('hex') : undefined), + base64: input => (input ? Buffer.from(input).toString('base64') : undefined), }; // Retrieves value of a nested key inside an object. Returns undefined when not found. const resolvePath = (obj, path) => { try { - return path.split('.').reduce( - (subObj, prop) => subObj && subObj[prop] !== undefined ? subObj[prop] : undefined, - obj, - ); + return path + .split('.') + .reduce( + (subObj, prop) => (subObj && subObj[prop] !== undefined ? subObj[prop] : undefined), + obj, + ); } catch (e) { return undefined; } }; // Maps the response object in respect to the source definition -const mapObject = (rootObj, definition, subObj = rootObj) => Object.keys(definition) - .reduce((acc, key) => { +const mapObject = (rootObj, definition, subObj = rootObj) => + Object.keys(definition).reduce((acc, key) => { // Directly assign the casted value unless it is array or object if (definition[key] !== null && typeof definition[key] === 'string') { const [path, type] = definition[key].split(','); - const val = (path === '=') ? subObj[key] : resolvePath(rootObj, path); + const val = path === '=' ? subObj[key] : resolvePath(rootObj, path); acc[key] = (val || val === 0) && type ? cast[type](val) : val; - // Map each element of array + // Map each element of array } else if (Array.isArray(definition[key])) { if (definition[key].length === 2) { const innerDef = definition[key][1]; - const dataSource = (definition[key][0] === '') ? rootObj : resolvePath(rootObj, definition[key][0]); + const dataSource = + definition[key][0] === '' ? rootObj : resolvePath(rootObj, definition[key][0]); if (Array.isArray(dataSource)) { const tempArr = []; dataSource.forEach(item => { @@ -76,14 +79,15 @@ const mapObject = (rootObj, definition, subObj = rootObj) => Object.keys(definit return acc; }, {}); -const mapArray = (rootObj, definition) => definition.reduce((acc, item, i) => { - if (i === 0 && !isObject(item)) acc.push(item); - if (i === 0 && isObject(item)) acc.push(mapObject(rootObj, item)); - if (i === 1 && isObject(item)) { - acc.push(mapObject(rootObj, { [acc[i - 1]]: Object.values(item)[0] })); - } - return acc; -}, []); +const mapArray = (rootObj, definition) => + definition.reduce((acc, item, i) => { + if (i === 0 && !isObject(item)) acc.push(item); + if (i === 0 && isObject(item)) acc.push(mapObject(rootObj, item)); + if (i === 1 && isObject(item)) { + acc.push(mapObject(rootObj, { [acc[i - 1]]: Object.values(item)[0] })); + } + return acc; + }, []); /* * The Mapper always follows definition, which means diff --git a/services/gateway/shared/generateDocs.js b/services/gateway/shared/generateDocs.js index 56bb044b5..50bb0dc4c 100644 --- a/services/gateway/shared/generateDocs.js +++ b/services/gateway/shared/generateDocs.js @@ -14,9 +14,7 @@ * */ const path = require('path'); -const { - Utils, -} = require('lisk-service-framework'); +const { Utils } = require('lisk-service-framework'); const BluebirdPromise = require('bluebird'); const { requireAllJson } = require('./utils'); const config = require('../config'); @@ -39,18 +37,20 @@ const createApiDocs = async (apiName, apiJsonPaths, registeredModuleNames) => { const method = services[key]; return { ...acc, [key]: method.schema }; }, {}); - if (methods.postTransactions) methods.transactions['/transactions'].post = methods.postTransactions['/transactions'].post; + if (methods.postTransactions) + methods.transactions['/transactions'].post = methods.postTransactions['/transactions'].post; const apiSchemas = Object.keys(methods); - apiSchemas.forEach((key) => { + apiSchemas.forEach(key => { Object.assign(apiJsonPaths, methods[key]); }); return apiJsonPaths; }; const genDocs = async (ctx, registeredModuleNames) => { - if (!config.api.versions[ctx.endpoint.baseUrl]) return { - info: { description: `This route offers no specs for ${ctx.endpoint.baseUrl}.` }, - }; + if (!config.api.versions[ctx.endpoint.baseUrl]) + return { + info: { description: `This route offers no specs for ${ctx.endpoint.baseUrl}.` }, + }; const finalDoc = {}; @@ -60,7 +60,7 @@ const genDocs = async (ctx, registeredModuleNames) => { await BluebirdPromise.map( apis, - async (api) => { + async api => { const { apiJson, parameters, definitions, responses } = requireAllJson(api); const params = finalDoc.parameters || {}; @@ -79,16 +79,14 @@ const genDocs = async (ctx, registeredModuleNames) => { const apiDocs = await createApiDocs(api, apiJson.paths, registeredModuleNames); Object.assign(paths, apiDocs); - Object.assign(finalDoc, - { - ...apiJson, - parameters: params, - definitions: defs, - responses: allResponses, - tags, - paths, - }, - ); + Object.assign(finalDoc, { + ...apiJson, + parameters: params, + definitions: defs, + responses: allResponses, + tags, + paths, + }); }, { concurrency: 1 }, ); diff --git a/services/gateway/shared/moleculer-io/errors.js b/services/gateway/shared/moleculer-io/errors.js index bfaf011c2..2ec302d78 100755 --- a/services/gateway/shared/moleculer-io/errors.js +++ b/services/gateway/shared/moleculer-io/errors.js @@ -1,22 +1,22 @@ /* eslint-disable max-classes-per-file */ /* -* moleculer-sc -* Copyright (c) 2018 tiaod (https://github.com/tiaod/moleculer-sc) -* MIT Licensed -*/ + * moleculer-sc + * Copyright (c) 2018 tiaod (https://github.com/tiaod/moleculer-sc) + * MIT Licensed + */ const { MoleculerError } = require('moleculer').Errors; const ERR_INVALID_TOKEN = 'ERR_INVALID_TOKEN'; class UnAuthorizedError extends MoleculerError { /** - * Creates an instance of UnAuthorizedError. - * - * @param {String} type - * @param {any} data - * - * @memberOf UnAuthorizedError - */ + * Creates an instance of UnAuthorizedError. + * + * @param {String} type + * @param {any} data + * + * @memberOf UnAuthorizedError + */ constructor(type, data) { super('Unauthorized', 401, type || ERR_INVALID_TOKEN, data); } diff --git a/services/gateway/shared/moleculer-io/index.js b/services/gateway/shared/moleculer-io/index.js index 8ed5fa2aa..0f3312742 100755 --- a/services/gateway/shared/moleculer-io/index.js +++ b/services/gateway/shared/moleculer-io/index.js @@ -410,8 +410,8 @@ function makeHandler(svc, handlerItem) { if (config.websocket.enableRateLimit) await rateLimiter.consume(this.handshake.address); const performClientRequest = async (jsonRpcInput, id = 1) => { if ( - config.jsonRpcStrictMode === 'true' - && (!jsonRpcInput.jsonrpc || jsonRpcInput.jsonrpc !== '2.0') + config.jsonRpcStrictMode === 'true' && + (!jsonRpcInput.jsonrpc || jsonRpcInput.jsonrpc !== '2.0') ) { const message = `The given data is not a proper JSON-RPC 2.0 request: ${util.inspect( jsonRpcInput, @@ -427,7 +427,9 @@ function makeHandler(svc, handlerItem) { const action = jsonRpcInput.method; const { params } = jsonRpcInput; svc.logger.info(` => Client '${this.id}' call '${action}'`); - if (svc.settings.logRequestParams && svc.settings.logRequestParams in svc.logger) svc.logger[svc.settings.logRequestParams](' Params:', params); + if (svc.settings.logRequestParams && svc.settings.logRequestParams in svc.logger) { + svc.logger[svc.settings.logRequestParams](' Params:', params); + } try { if (_.isFunction(params)) { respond = params; @@ -442,11 +444,13 @@ function makeHandler(svc, handlerItem) { svc.logger.info(` <= ${chalk.green.bold('Success')} ${action}`); const output = addJsonRpcEnvelope(id, res); - respond(output); + + if (respond !== undefined) respond(output); + else return output; } catch (err) { if ( - svc.settings.log4XXResponses - || (Utils.isProperObject(err) && !_.inRange(err.code, 400, 500)) + svc.settings.log4XXResponses || + (Utils.isProperObject(err) && !_.inRange(err.code, 400, 500)) ) { svc.logger.error( ' Request error!', diff --git a/services/gateway/shared/moleculer-io/util.js b/services/gateway/shared/moleculer-io/util.js index 36a6db93b..76d8b016d 100644 --- a/services/gateway/shared/moleculer-io/util.js +++ b/services/gateway/shared/moleculer-io/util.js @@ -27,15 +27,16 @@ const safeTestRegex = (regex, action) => { }; // eslint-disable-next-line array-callback-return -const checkWhitelist = (action, whitelist) => whitelist.some(mask => { - if (typeof mask === 'string') { - return match(action, mask); - } - if (mask instanceof RegExp) { - return safeTestRegex(mask, action); - } - return false; -}); +const checkWhitelist = (action, whitelist) => + whitelist.some(mask => { + if (typeof mask === 'string') { + return match(action, mask); + } + if (mask instanceof RegExp) { + return safeTestRegex(mask, action); + } + return false; + }); module.exports = { checkWhitelist, diff --git a/services/gateway/shared/moleculer-web/methods.js b/services/gateway/shared/moleculer-web/methods.js index 49e8bb7dd..1faf1bac3 100644 --- a/services/gateway/shared/moleculer-web/methods.js +++ b/services/gateway/shared/moleculer-web/methods.js @@ -6,14 +6,11 @@ * MIT Licensed */ const util = require('util'); -const { - MoleculerError, - MoleculerServerError, -} = require('moleculer').Errors; +const { MoleculerError, MoleculerServerError } = require('moleculer').Errors; const _ = require('lodash'); const kleur = require('kleur'); const { - Exceptions: { ValidationException }, + Exceptions: { ValidationException, NotFoundException }, } = require('lisk-service-framework'); module.exports = { @@ -52,18 +49,22 @@ module.exports = { const reqParams = Object.fromEntries( new Map(Object.entries(req.$params).filter(([, v]) => v)), ); - if (err && !(err instanceof ValidationException)) this.logger.error( - `<= ${this.coloringStatusCode(err.code)} Request error: ${err.name}: ${ - err.message - } \n${err.stack} \nData: \nRequest params: ${util.inspect( - reqParams, - )} \nRequest body: ${util.inspect(req.body)}`, - ); + if (err && !(err instanceof ValidationException)) + this.logger.error( + `<= ${this.coloringStatusCode(err.code)} Request error: ${err.name}: ${ + err.message + } \n${err.stack} \nData: \nRequest params: ${util.inspect( + reqParams, + )} \nRequest body: ${util.inspect(req.body)}`, + ); } if (err instanceof ValidationException) { const molecularError = new MoleculerError(err.message, 400); this.sendError(req, res, molecularError); + } else if (err instanceof NotFoundException) { + const molecularError = new MoleculerError(err.message, 404); + this.sendError(req, res, molecularError); } else { const errMessage = err && err.message ? err.message : 'Internal server error'; const molecularError = new MoleculerServerError(errMessage, 500); @@ -144,7 +145,8 @@ module.exports = { logRequest(req) { if (req.$route && !req.$route.logging) return; if (this.settings.enableHTTPRequest) { - if (this.settings.logRequest && this.settings.logRequest in this.logger) this.logger[this.settings.logRequest](`=> ${req.method} ${req.url}`); + if (this.settings.logRequest && this.settings.logRequest in this.logger) + this.logger[this.settings.logRequest](`=> ${req.method} ${req.url}`); } }, }, diff --git a/services/gateway/shared/paramValidator.js b/services/gateway/shared/paramValidator.js index 9eccf68ef..a4cef2855 100644 --- a/services/gateway/shared/paramValidator.js +++ b/services/gateway/shared/paramValidator.js @@ -19,39 +19,43 @@ const validator = new Validator(); const getTimestamp = () => Math.floor(Date.now() / 1000); -const mapObjectWithProperty = (obj, propName) => Object.keys(obj).reduce((acc, cur) => { - if (typeof obj[cur][propName] !== 'undefined') acc[cur] = obj[cur][propName]; - return acc; -}, {}); +const mapObjectWithProperty = (obj, propName) => + Object.keys(obj).reduce((acc, cur) => { + if (typeof obj[cur][propName] !== 'undefined') acc[cur] = obj[cur][propName]; + return acc; + }, {}); // Returns testedObject keys which are not present in reference -const objDiff = (reference, testedObject) => Object.keys(testedObject).filter(o => typeof reference[o] === 'undefined'); +const objDiff = (reference, testedObject) => + Object.keys(testedObject).filter(o => typeof reference[o] === 'undefined'); // Returns arr2 items which are not present in arr1 const arrDiff = (arr1, arr2) => arr2.filter(x => !arr1.includes(x)); -const dropEmptyProps = p => Object.keys(p) - .reduce((acc, cur) => { +const dropEmptyProps = p => + Object.keys(p).reduce((acc, cur) => { if (p[cur] !== '') acc[cur] = p[cur]; return acc; }, {}); -const parseParams = (p) => { +const parseParams = p => { const combinedParams = { ...p.swaggerParams, ...p.inputParams }; - const paramsDiff = (allParams, swaggerParams) => allParams.filter( - item => !swaggerParams.includes(item)); + const paramsDiff = (allParams, swaggerParams) => + allParams.filter(item => !swaggerParams.includes(item)); const invalidParamsList = paramsDiff(Object.keys(combinedParams), Object.keys(p.swaggerParams)); const invalidParams = invalidParamsList.reduce((acc, val) => { acc[val] = p.inputParams[val]; return acc; }, {}); - const validParamsList = Object.keys(p.swaggerParams).filter(o => typeof p.swaggerParams[o] !== 'undefined'); + const validParamsList = Object.keys(p.swaggerParams).filter( + o => typeof p.swaggerParams[o] !== 'undefined', + ); const validParams = validParamsList.reduce((acc, param) => { const defaultVal = p.swaggerParams[param]; const inputVal = p.swaggerParams[param]; - acc[param] = Number.isNaN(Number(inputVal)) && !Number.isNaN(Number(defaultVal)) - ? defaultVal : inputVal; + acc[param] = + Number.isNaN(Number(inputVal)) && !Number.isNaN(Number(defaultVal)) ? defaultVal : inputVal; return acc; }, {}); @@ -61,24 +65,28 @@ const parseParams = (p) => { }; }; -// Returns empty array if inputParamKeys matches with one of the schema paramPairings. +// Returns empty array if inputParamKeys matches with only one of the schema paramPairings. // Otherwise, returns the schema paramPairings const validateFromParamPairings = (paramsRequired = false, inputParamKeys, paramPairings) => { if (!paramsRequired) return []; - const relevantPairings = paramPairings - .filter(pairing => inputParamKeys.some(key => pairing.includes(key))); - if (relevantPairings.length === 0) return paramPairings; + // Remove elements not part of paramPairings + const filteredInputParamKeys = inputParamKeys.filter(element => + paramPairings.some(subArray => subArray.includes(element)), + ); - const result = relevantPairings - .some(pairing => pairing.every(param => inputParamKeys.includes(param))); - return result ? [] : paramPairings; + return paramPairings.find( + arr => + arr.length === filteredInputParamKeys.length && + arr.every(el => filteredInputParamKeys.includes(el)), + ) + ? [] + : paramPairings; }; // Returns a list of required routeParams which are not present in requestParams const checkMissingParams = (routeParams, requestParams) => { - const requiredParamList = Object.keys(routeParams) - .filter(o => routeParams[o].required === true); + const requiredParamList = Object.keys(routeParams).filter(o => routeParams[o].required === true); const requestParamList = Object.keys(requestParams); return arrDiff(requestParamList, requiredParamList); }; @@ -86,8 +94,8 @@ const checkMissingParams = (routeParams, requestParams) => { const parseDefaultParams = p => mapObjectWithProperty(p, 'default'); // Returns the parsed requestParams which are present in routeParams schema -const parseAllParams = (routeParams, requestParams) => Object.keys(routeParams) - .reduce((acc, cur) => { +const parseAllParams = (routeParams, requestParams) => + Object.keys(routeParams).reduce((acc, cur) => { const paramDatatype = routeParams[cur].type; if (routeParams[cur].default !== undefined) acc[cur] = routeParams[cur].default; if (requestParams[cur] !== undefined) { @@ -101,14 +109,14 @@ const parseAllParams = (routeParams, requestParams) => Object.keys(routeParams) }, {}); // Adds convert:true property to number and boolean type specPar elements -const looseSpecParams = (specPar) => Object.keys(specPar).reduce((acc, cur) => { - if (specPar[cur].type === 'number' || specPar[cur].type === 'boolean') { - acc[cur] = { convert: true, ...specPar[cur] }; - } else acc[cur] = specPar[cur]; - return acc; -}, {}); - -// TODO: Add check so that only one pair is accepted among the validParamPairings +const looseSpecParams = specPar => + Object.keys(specPar).reduce((acc, cur) => { + if (specPar[cur].type === 'number' || specPar[cur].type === 'boolean') { + acc[cur] = { convert: true, ...specPar[cur] }; + } else acc[cur] = specPar[cur]; + return acc; + }, {}); + const validateInputParams = (rawInputParams = {}, specs) => { const specParams = specs.params || {}; const inputParams = rawInputParams; @@ -122,7 +130,10 @@ const validateInputParams = (rawInputParams = {}, specs) => { }); paramReport.required = validateFromParamPairings( - specs.paramsRequired, inputParamKeys, paramPairings); + specs.paramsRequired, + inputParamKeys, + paramPairings, + ); paramReport.missing = checkMissingParams(specParams, inputParams); diff --git a/services/gateway/shared/ready.js b/services/gateway/shared/ready.js index 4d3a52da1..8b19d5fcf 100644 --- a/services/gateway/shared/ready.js +++ b/services/gateway/shared/ready.js @@ -35,22 +35,20 @@ const currentSvcStatus = { }; const updateSvcStatus = async () => { - await BluebirdPromise.map( - Object.keys(currentSvcStatus), - async microservice => { - const broker = (await getAppContext()).getBroker(); - currentSvcStatus[microservice] = await broker.call(`${microservice}.status`) - .then((res) => res.isReady) - .catch((err) => { - if (err instanceof ServiceNotFoundError) { - logger.warn(err); - } else { - logger.error(err); - } - return false; - }); - }, - ); + await BluebirdPromise.map(Object.keys(currentSvcStatus), async microservice => { + const broker = (await getAppContext()).getBroker(); + currentSvcStatus[microservice] = await broker + .call(`${microservice}.status`) + .then(res => res.isReady) + .catch(err => { + if (err instanceof ServiceNotFoundError) { + logger.warn(err); + } else { + logger.error(err); + } + return false; + }); + }); }; const getReady = () => { @@ -62,7 +60,7 @@ const getReady = () => { }); return { services: includeSvcForReadiness }; } catch (_) { - logger.error(`Current service status: ${currentSvcStatus}`); + logger.error(`Current service status:\n${JSON.stringify(currentSvcStatus, null, '\t')}`); throw new MoleculerError('Service Unavailable', 503, 'SERVICES_NOT_READY'); } }; diff --git a/services/gateway/shared/regex.js b/services/gateway/shared/regex.js index 822c793a0..c03ff078a 100644 --- a/services/gateway/shared/regex.js +++ b/services/gateway/shared/regex.js @@ -25,22 +25,27 @@ const PARTIAL_SEARCH = /^[\w!@$&.]{1,64}$/; // Supports address, publicKey & nam const PARTIAL_SEARCH_NAME = /^[\w!@$&.]{1,20}$/; const TIMESTAMP_RANGE = /^(?:(?:\d+)|(?::(?:\d+))|(?:(?:\d+):(?:\d+)?))$/; const HEIGHT_RANGE = /^(?:(?:\d+)|(?::(?:\d+))|(?:(?:\d+):(?:\d+)?))$/; -const IP = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; +const IP = + /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; const LIMIT = /^\b(?:(?:[1-9][0-9]?)|100)\b$/; const OFFSET = /^\b([0-9][0-9]*)\b$/; -const NAME = /^[\w!@$&.]{3,20}$/; +const NAME = /^[a-z0-9!@$&_.]{1,20}$/; const NAME_CSV = /^\b[\w!@$&.,]{3,}\b$/; + const NETWORK_VERSION = /^\d+\.\d+((\.\d+)?(?:-[a-zA-Z\d]+(?:\.\d+)?)?)?(?:\+[a-zA-Z\d]+)?$/; const TRANSACTION = /^\b[0-9a-fA-F]+\b$/; const TRANSACTION_EXECUTION_STATUS = /^\b(?:pending|successful|failed|,){0,5}\b$/; const POS_VALIDATOR_STATUS = /^\b(?:active|standby|banned|punished|ineligible|,){0,9}\b$/; -const CCM_STATUS = /^\b(?:ok|module_not_supported|module_not_supported|channel_unavailable|recovered|,){0,9}\b$/; -const DATE_INTERVAL = /^\b(?:(?:\d{4})-(?:(?:1[012])|(?:0?[1-9]))-(?:(?:[012][1-9])|(?:[123]0)|31))(?::(?:(?:\d{4})-(?:(?:1[012])|(?:0?[1-9]))-(?:(?:[012][1-9])|(?:[123]0)|31)))?\b$/; +const CCM_STATUS = + /^\b(?:ok|module_not_supported|module_not_supported|channel_unavailable|recovered|,){0,9}\b$/; +const DATE_INTERVAL = + /^\b(?:(?:\d{4})-(?:(?:1[012])|(?:0?[1-9]))-(?:(?:[012][1-9])|(?:[123]0)|31))(?::(?:(?:\d{4})-(?:(?:1[012])|(?:0?[1-9]))-(?:(?:[012][1-9])|(?:[123]0)|31)))?\b$/; const NETWORK_CSV = /^\b(?:mainnet|testnet|betanet|devnet|,){0,7}\b$/; const APPLICATION_STATUS = /^\b(?:registered|activated|terminated|unregistered|,){1,7}\b$/; const MODULE_COMMAND = /^[0-9a-zA-Z]{0,32}:[0-9a-zA-Z]{0,32}$/; const CHAIN_ID = /^\b[a-fA-F0-9]{8}\b$/; const CHAIN_ID_CSV = /^\b(?:[a-fA-F0-9]{8}|,)+\b$/; +const CHAIN_NAME = /^[A-Za-z0-9!@$&_.]{1,32}$/; const TOKEN_ID = /^\b[a-fA-F0-9]{16}\b$/; const TOKEN_ID_CSV = /^\b(?:[a-fA-F0-9]{16}|,)+\b$/; const BLS_KEY = /^\b[a-fA-F0-9]{96}\b$/; @@ -49,9 +54,11 @@ const MODULE = /^[0-9a-zA-Z]{1,32}$/; const COMMAND = MODULE; const MODULE_CSV = /^(?:[0-9a-zA-Z]{1,32})(?:,[0-9a-zA-Z]{1,32})*$/; const COMMAND_CSV = MODULE_CSV; -const TOPIC_CSV = /^\b(?:[0-9a-fA-F]{2,64}|lsk[a-hjkm-z2-9]{38})(?:,(?:[0-9a-fA-F]{2,64}|lsk[a-hjkm-z2-9]{38}))*\b$/; +const TOPIC_CSV = + /^\b(?:(?:04|05)?[0-9a-fA-F]{64}|lsk[a-hjkm-z2-9]{38})(?:,(?:(?:04|05)?[0-9a-fA-F]{64}|lsk[a-hjkm-z2-9]{38}))*\b$/; const HEX_STRING = /^\b[a-fA-F0-9]+\b$/; -const EXCEL_EXPORT_FILENAME = /^\btransactions_([a-fA-F0-9]{8})_(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.xlsx\b$/; +const EXCEL_EXPORT_FILENAME = + /^\btransactions_([a-fA-F0-9]{8})_(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.xlsx\b$/; const EVENT_NAME = /^[\w!@$&. ]{1,32}$/; const MD5 = /^\b[a-fA-F0-9]{32}\b$/; // MD5 pattern @@ -83,6 +90,7 @@ module.exports = { MODULE_COMMAND, CHAIN_ID, CHAIN_ID_CSV, + CHAIN_NAME, TOKEN_ID, TOKEN_ID_CSV, BLS_KEY, diff --git a/services/gateway/shared/registerHttpApi.js b/services/gateway/shared/registerHttpApi.js index 264d7339d..9477a1e79 100644 --- a/services/gateway/shared/registerHttpApi.js +++ b/services/gateway/shared/registerHttpApi.js @@ -32,20 +32,35 @@ const DEFAULT_METHOD_PATH = ''; const DEFAULT_ETAG_VALUE = 'strong'; const ALLOWED_ETAG_VALUES = ['strong', 'weak', true, false, 'custom']; -const getMethodName = method => method.httpMethod ? method.httpMethod : 'GET'; +const getMethodName = method => (method.httpMethod ? method.httpMethod : 'GET'); const buildAPIAliases = (apiPrefix, methods, eTag = DEFAULT_ETAG_VALUE) => { - const whitelist = Object.keys(methods).reduce((acc, key) => [ - ...acc, methods[key].source.method, - ], []); - - const aliases = Object.keys(methods).reduce((acc, key) => ({ - ...acc, [`${getMethodName(methods[key])} ${eTag === DEFAULT_ETAG_VALUE ? transformPath(methods[key].swaggerApiPath) : DEFAULT_ALIAS}`]: methods[key].source.method, - }), {}); - - const methodPaths = Object.keys(methods).reduce((acc, key) => ({ - ...acc, [`${getMethodName(methods[key])} ${eTag === DEFAULT_ETAG_VALUE ? transformPath(methods[key].swaggerApiPath) : DEFAULT_METHOD_PATH}`]: methods[key], - }), {}); + const whitelist = Object.keys(methods).reduce( + (acc, key) => [...acc, methods[key].source.method], + [], + ); + + const aliases = Object.keys(methods).reduce( + (acc, key) => ({ + ...acc, + [`${getMethodName(methods[key])} ${ + eTag === DEFAULT_ETAG_VALUE ? transformPath(methods[key].swaggerApiPath) : DEFAULT_ALIAS + }`]: methods[key].source.method, + }), + {}, + ); + + const methodPaths = Object.keys(methods).reduce( + (acc, key) => ({ + ...acc, + [`${getMethodName(methods[key])} ${ + eTag === DEFAULT_ETAG_VALUE + ? transformPath(methods[key].swaggerApiPath) + : DEFAULT_METHOD_PATH + }`]: methods[key], + }), + {}, + ); return { aliases, whitelist, methodPaths }; }; @@ -64,12 +79,11 @@ const getAllAPIs = (apiNames, registeredModuleNames) => { registeredModuleNames.forEach(moduleName => { const dirPath = `../apis/${apiName}/methods/modules/${moduleName}`; try { - Object.assign( - allMethods, - Utils.requireAllJs(path.resolve(__dirname, dirPath)), - ); + Object.assign(allMethods, Utils.requireAllJs(path.resolve(__dirname, dirPath))); } catch (err) { - logger.warn(`Moleculer method definitions (HTTP endpoints) missing for module: ${module}. Is this expected?\nWas expected at: ${dirPath}.`); + logger.warn( + `Moleculer method definitions (HTTP endpoints) missing for module: ${module}. Is this expected?\nWas expected at: ${dirPath}.`, + ); } }); }); @@ -87,22 +101,26 @@ const getAllAPIs = (apiNames, registeredModuleNames) => { }; /* eslint-disable-next-line max-len */ -const buildAPIConfig = (configPath, config, aliases, whitelist, methodPaths, eTag = DEFAULT_ETAG_VALUE) => ({ +const buildAPIConfig = ( + configPath, + config, + aliases, + whitelist, + methodPaths, + eTag = DEFAULT_ETAG_VALUE, +) => ({ ...config, path: configPath, - whitelist: [ - ...config.whitelist, - ...whitelist, - ], + whitelist: [...config.whitelist, ...whitelist], aliases: { ...config.aliases, ...aliases, }, - etag: (typeof eTag === 'function') ? eTag() : eTag, + etag: typeof eTag === 'function' ? eTag() : eTag, // eslint-disable-next-line no-unused-vars async onBeforeCall(ctx, route, req, res) { @@ -119,7 +137,11 @@ const buildAPIConfig = (configPath, config, aliases, whitelist, methodPaths, eTa } if (paramReport.required.length) { - throw new ValidationException(`Require one of the following parameter combination(s): ${paramReport.required.join('; ')}`); + throw new ValidationException( + `Require only one of the following parameter combination(s): ${paramReport.required.join( + '; ', + )}`, + ); } const invalidList = paramReport.invalid; @@ -182,27 +204,41 @@ const registerApi = (apiNames, config, registeredModuleNames) => { // eslint-disable-next-line no-restricted-syntax for (const eTagVal of ALLOWED_ETAG_VALUES) { - const eTagAPIs = Object.fromEntries(Object.entries(allAPIs) - .filter(([, value]) => { + const eTagAPIs = Object.fromEntries( + Object.entries(allAPIs).filter(([, value]) => { if (value.eTag === undefined) value.eTag = DEFAULT_ETAG_VALUE; return (eTagVal === 'custom' && typeof value.eTag === 'function') || value.eTag === eTagVal; - })); + }), + ); // Build a common config for eTag == DEFAULT_ETAG_VALUE APIs if (eTagVal === DEFAULT_ETAG_VALUE) { - const etagAPIsConfig = buildAPIAliases( - config.path, - eTagAPIs, - DEFAULT_ETAG_VALUE, + const etagAPIsConfig = buildAPIAliases(config.path, eTagAPIs, DEFAULT_ETAG_VALUE); + + apisToRegister.push( + buildAPIConfig( + config.path, + config, + etagAPIsConfig.aliases, + etagAPIsConfig.whitelist, + etagAPIsConfig.methodPaths, + DEFAULT_ETAG_VALUE, + ), ); - - apisToRegister.push(buildAPIConfig(config.path, config, etagAPIsConfig.aliases, - etagAPIsConfig.whitelist, etagAPIsConfig.methodPaths, DEFAULT_ETAG_VALUE)); } else { // eslint-disable-next-line no-restricted-syntax for (const key of Object.keys(eTagAPIs)) { const etagAPIsConfig = buildAPIAliases(config.path, { key: eTagAPIs[key] }, true); - apisToRegister.push(buildAPIConfig(`${config.path}${eTagAPIs[key].swaggerApiPath}`, config, etagAPIsConfig.aliases, etagAPIsConfig.whitelist, etagAPIsConfig.methodPaths, eTagAPIs[key].eTag)); + apisToRegister.push( + buildAPIConfig( + `${config.path}${eTagAPIs[key].swaggerApiPath}`, + config, + etagAPIsConfig.aliases, + etagAPIsConfig.whitelist, + etagAPIsConfig.methodPaths, + eTagAPIs[key].eTag, + ), + ); } } } diff --git a/services/gateway/shared/registerRpcApi.js b/services/gateway/shared/registerRpcApi.js index 6e93559a5..14a6c17e0 100644 --- a/services/gateway/shared/registerRpcApi.js +++ b/services/gateway/shared/registerRpcApi.js @@ -161,15 +161,18 @@ const registerApi = (apiNames, config, registeredModuleNames) => { onAfterCall: async (ctx, socket, req, data) => { if (data.data && data.status) { - if (data.status === 'INVALID_PARAMS') throw new MoleculerClientError({ code: INVALID_PARAMS[0], message: data.data.error }); - if (data.status === 'SERVICE_UNAVAILABLE') throw new MoleculerClientError({ - code: SERVICE_UNAVAILABLE[0], - message: data.data.error, - }); - if (data.status !== 'ACCEPTED') throw new MoleculerClientError({ - code: INVALID_REQUEST[0], - message: data.data.error, - }); + if (data.status === 'INVALID_PARAMS') + throw new MoleculerClientError({ code: INVALID_PARAMS[0], message: data.data.error }); + if (data.status === 'SERVICE_UNAVAILABLE') + throw new MoleculerClientError({ + code: SERVICE_UNAVAILABLE[0], + message: data.data.error, + }); + if (data.status !== 'ACCEPTED') + throw new MoleculerClientError({ + code: INVALID_REQUEST[0], + message: data.data.error, + }); } return transformResponse(methodPaths[req.method], data); diff --git a/services/gateway/shared/status.js b/services/gateway/shared/status.js index 80335db0f..06ca176d6 100644 --- a/services/gateway/shared/status.js +++ b/services/gateway/shared/status.js @@ -43,9 +43,7 @@ const getStatus = async broker => { version = networkStatistics.data.networkVersion; } const versionCount = Object.values(version); - const networkNodeVersion = Object.keys(version)[ - versionCount.indexOf(Math.max(...versionCount)) - ]; + const networkNodeVersion = Object.keys(version)[versionCount.indexOf(Math.max(...versionCount))]; return { build: buildTimestamp, description: 'Lisk Service Gateway', diff --git a/services/gateway/shared/utils.js b/services/gateway/shared/utils.js index 047744998..03f1ae85b 100644 --- a/services/gateway/shared/utils.js +++ b/services/gateway/shared/utils.js @@ -20,7 +20,7 @@ const transformParams = (type, params) => { const data = []; const paramsKeys = Object.keys(params); - paramsKeys.forEach((paramKey) => { + paramsKeys.forEach(paramKey => { let value = {}; if (params[paramKey].altSwaggerKey) { @@ -41,7 +41,8 @@ const transformParams = (type, params) => { value = { name: 'order', in: 'query', - description: 'Fields to order results by. The order condition is applied after the sort condition, usually to break ties when the sort condition results in collision.', + description: + 'Fields to order results by. The order condition is applied after the sort condition, usually to break ties when the sort condition results in collision.', required: false, type: params[paramKey].type, enum: params[paramKey].enum, @@ -98,7 +99,12 @@ const getSwaggerDescription = params => `${params.description}\n RPC => ${params const isValidNonEmptyResponse = res => { if (Array.isArray(res.data) && res.data.length) return true; - if ((res.data && res.data.constructor.name === 'Object') && Object.getOwnPropertyNames(res.data).length) return true; + if ( + res.data && + res.data.constructor.name === 'Object' && + Object.getOwnPropertyNames(res.data).length + ) + return true; return false; }; diff --git a/services/gateway/sources/version3/mappings/block.js b/services/gateway/sources/version3/mappings/block.js index 23ff8cc54..7361a9bf7 100644 --- a/services/gateway/sources/version3/mappings/block.js +++ b/services/gateway/sources/version3/mappings/block.js @@ -27,6 +27,7 @@ module.exports = { transactionRoot: '=,string', assetRoot: '=,string', stateRoot: '=,string', + eventRoot: '=,string', maxHeightPrevoted: '=,number', maxHeightGenerated: '=,number', validatorsHash: '=,string', diff --git a/services/gateway/sources/version3/mappings/blockAsset.js b/services/gateway/sources/version3/mappings/blockAsset.js index 3b0fb77de..4bd22bc68 100644 --- a/services/gateway/sources/version3/mappings/blockAsset.js +++ b/services/gateway/sources/version3/mappings/blockAsset.js @@ -19,8 +19,11 @@ module.exports = { height: '=,number', timestamp: '=,number', }, - assets: ['assets', { - module: '=,string', - data: '=', - }], + assets: [ + 'assets', + { + module: '=,string', + data: '=', + }, + ], }; diff --git a/services/gateway/sources/version3/mappings/blockchainApp.js b/services/gateway/sources/version3/mappings/blockchainApp.js index ed806c112..0baa44c39 100644 --- a/services/gateway/sources/version3/mappings/blockchainApp.js +++ b/services/gateway/sources/version3/mappings/blockchainApp.js @@ -21,8 +21,11 @@ module.exports = { lastCertificateHeight: '=,number', lastUpdated: '=,number', escrowedLSK: '=,string', - escrow: ['escrow', { - tokenID: '=,string', - amount: '=,string', - }], + escrow: [ + 'escrow', + { + tokenID: '=,string', + amount: '=,string', + }, + ], }; diff --git a/services/gateway/sources/version3/mappings/blockchainAppMetadata.js b/services/gateway/sources/version3/mappings/blockchainAppMetadata.js index ea3df7b7b..c082eb017 100644 --- a/services/gateway/sources/version3/mappings/blockchainAppMetadata.js +++ b/services/gateway/sources/version3/mappings/blockchainAppMetadata.js @@ -25,23 +25,32 @@ module.exports = { genesisURL: '=,string', projectPage: '=,string', appPage: '=,string', - serviceURLs: ['serviceURLs', { - http: '=,string', - ws: '=,string', - apiCertificatePublicKey: '=,string', - }], + serviceURLs: [ + 'serviceURLs', + { + http: '=,string', + ws: '=,string', + apiCertificatePublicKey: '=,string', + }, + ], logo: { png: '=,string', svg: '=,string', }, - explorers: ['explorers', { - url: '=,string', - txnPage: '=,string', - }], - appNodes: ['appNodes', { - url: '=,string', - apiCertificatePublicKey: '=,string', - maintainer: '=,string', - }], + explorers: [ + 'explorers', + { + url: '=,string', + txnPage: '=,string', + }, + ], + appNodes: [ + 'appNodes', + { + url: '=,string', + apiCertificatePublicKey: '=,string', + maintainer: '=,string', + }, + ], backgroundColor: '=,string', }; diff --git a/services/gateway/sources/version3/mappings/blockchainAppTokenMetadata.js b/services/gateway/sources/version3/mappings/blockchainAppTokenMetadata.js index b9da90813..432b2e5d3 100644 --- a/services/gateway/sources/version3/mappings/blockchainAppTokenMetadata.js +++ b/services/gateway/sources/version3/mappings/blockchainAppTokenMetadata.js @@ -27,9 +27,12 @@ module.exports = { symbol: '=,string', displayDenom: '=,string', baseDenom: '=,string', - denomUnits: ['denomUnits', { - denom: '=,string', - decimals: '=,number', - aliases: '=', - }], + denomUnits: [ + 'denomUnits', + { + denom: '=,string', + decimals: '=,number', + aliases: '=', + }, + ], }; diff --git a/services/gateway/sources/version3/mappings/posUnlock.js b/services/gateway/sources/version3/mappings/posUnlock.js index 975c362b9..59860df6b 100644 --- a/services/gateway/sources/version3/mappings/posUnlock.js +++ b/services/gateway/sources/version3/mappings/posUnlock.js @@ -17,13 +17,16 @@ module.exports = { address: '=,string', publicKey: '=,string', name: '=,string', - pendingUnlocks: ['data.pendingUnlocks', { - validatorAddress: '=,string', - amount: '=,string', - tokenID: '=,string', - unstakeHeight: '=,number', - expectedUnlockableHeight: '=,number', - expectedUnlockTime: '=,number', - isLocked: '=,boolean', - }], + pendingUnlocks: [ + 'data.pendingUnlocks', + { + validatorAddress: '=,string', + amount: '=,string', + tokenID: '=,string', + unstakeHeight: '=,number', + expectedUnlockableHeight: '=,number', + expectedUnlockTime: '=,number', + isLocked: '=,boolean', + }, + ], }; diff --git a/services/gateway/sources/version3/mappings/posValidator.js b/services/gateway/sources/version3/mappings/posValidator.js index 7ed449a82..2b3df9e6b 100644 --- a/services/gateway/sources/version3/mappings/posValidator.js +++ b/services/gateway/sources/version3/mappings/posValidator.js @@ -24,17 +24,23 @@ module.exports = { status: '=,string', isBanned: '=,boolean', reportMisbehaviorHeights: '=', - punishmentPeriods: ['punishmentPeriods', { - start: '=,number', - end: '=,number', - }], + punishmentPeriods: [ + 'punishmentPeriods', + { + start: '=,number', + end: '=,number', + }, + ], consecutiveMissedBlocks: '=,number', commission: '=,number', lastCommissionIncreaseHeight: '=,number', - sharingCoefficients: ['sharingCoefficients', { - tokenID: '=,string', - coefficient: '=,string', - }], + sharingCoefficients: [ + 'sharingCoefficients', + { + tokenID: '=,string', + coefficient: '=,string', + }, + ], rank: '=,number', generatedBlocks: '=,number', totalCommission: '=,string', diff --git a/services/gateway/sources/version3/mappings/scheduleExport.js b/services/gateway/sources/version3/mappings/scheduleExport.js index 8092dc692..2cc606c9e 100644 --- a/services/gateway/sources/version3/mappings/scheduleExport.js +++ b/services/gateway/sources/version3/mappings/scheduleExport.js @@ -17,6 +17,6 @@ module.exports = { address: '=,string', publicKey: '=,string', interval: '=,string', - filename: 'fileName,string', + fileName: '=,string', fileUrl: '=,string', }; diff --git a/services/gateway/sources/version3/mappings/schema.js b/services/gateway/sources/version3/mappings/schema.js index 8093e8336..9aa1829d1 100644 --- a/services/gateway/sources/version3/mappings/schema.js +++ b/services/gateway/sources/version3/mappings/schema.js @@ -35,24 +35,35 @@ module.exports = { ccm: { schema: '=', }, - events: ['data.events', { - module: '=,string', - name: '=,string', - schema: '=', - }], - assets: ['data.assets', { - module: '=,string', - version: '=,string', - schema: '=', - }], - commands: ['data.commands', { - moduleCommand: '=,string', - schema: '=', - }], - messages: ['data.messages', { - moduleCommand: '=,string', - param: '=,string', - schema: '=', - }], - + events: [ + 'data.events', + { + module: '=,string', + name: '=,string', + schema: '=', + }, + ], + assets: [ + 'data.assets', + { + module: '=,string', + version: '=,string', + schema: '=', + }, + ], + commands: [ + 'data.commands', + { + moduleCommand: '=,string', + schema: '=', + }, + ], + messages: [ + 'data.messages', + { + moduleCommand: '=,string', + param: '=,string', + schema: '=', + }, + ], }; diff --git a/services/gateway/sources/version3/mappings/token.js b/services/gateway/sources/version3/mappings/token.js index 48980b437..160e0f116 100644 --- a/services/gateway/sources/version3/mappings/token.js +++ b/services/gateway/sources/version3/mappings/token.js @@ -16,8 +16,11 @@ module.exports = { tokenID: '=,string', availableBalance: '=,string', - lockedBalances: ['lockedBalances', { - module: '=,string', - amount: '=,string', - }], + lockedBalances: [ + 'lockedBalances', + { + module: '=,string', + amount: '=,string', + }, + ], }; diff --git a/services/gateway/sources/version3/mappings/transaction.js b/services/gateway/sources/version3/mappings/transaction.js index 7222d0576..7211cbbf0 100644 --- a/services/gateway/sources/version3/mappings/transaction.js +++ b/services/gateway/sources/version3/mappings/transaction.js @@ -20,18 +20,21 @@ module.exports = { fee: '=,string', minFee: '=,string', size: '=,number', - sender: { - address: 'sender.address,string', - publicKey: 'sender.publicKey,string', - name: 'sender.name,string', - }, - params: '=', block: { id: 'block.id,string', height: 'block.height,number', timestamp: 'block.timestamp,number', isFinal: 'block.isFinal,boolean', }, + sender: { + address: 'sender.address,string', + publicKey: 'sender.publicKey,string', + name: 'sender.name,string', + }, + params: '=', + signatures: '=', + executionStatus: '=,string', + index: '=,number', meta: { recipient: { address: 'meta.recipient.address,string', @@ -39,6 +42,4 @@ module.exports = { name: 'meta.recipient.name,string', }, }, - executionStatus: '=,string', - index: '=,number', }; diff --git a/services/gateway/sources/version3/tokenSummary.js b/services/gateway/sources/version3/tokenSummary.js index 6ac8c1c91..342850241 100644 --- a/services/gateway/sources/version3/tokenSummary.js +++ b/services/gateway/sources/version3/tokenSummary.js @@ -13,11 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - escrowedAmount, - supportedToken, - totalSupplyByToken, -} = require('./mappings/tokenSummary'); +const { escrowedAmount, supportedToken, totalSupplyByToken } = require('./mappings/tokenSummary'); module.exports = { type: 'moleculer', diff --git a/services/gateway/sources/version3/transactions.js b/services/gateway/sources/version3/transactions.js index d4eb955fb..3da02c23d 100644 --- a/services/gateway/sources/version3/transactions.js +++ b/services/gateway/sources/version3/transactions.js @@ -23,6 +23,7 @@ module.exports = { moduleCommand: '=,string', senderAddress: '=,string', recipientAddress: '=,string', + receivingChainID: '=,string', address: '=,string', blockID: '=,string', height: '=,string', diff --git a/services/gateway/sources/version3/transactionsDryRun.js b/services/gateway/sources/version3/transactionsDryRun.js index 0a597651d..41bcb3272 100644 --- a/services/gateway/sources/version3/transactionsDryRun.js +++ b/services/gateway/sources/version3/transactionsDryRun.js @@ -26,15 +26,18 @@ module.exports = { data: { result: '=,number', status: '=,string', - events: ['data.events', { - data: '=', - index: '=,number', - module: '=,string', - name: '=,string', - topics: '=', - height: '=,number', - id: '=,string', - }], + events: [ + 'data.events', + { + data: '=', + index: '=,number', + module: '=,string', + name: '=,string', + topics: '=', + height: '=,number', + id: '=,string', + }, + ], errorMessage: '=,string', }, meta: {}, diff --git a/services/gateway/tests/constants/customMapper.js b/services/gateway/tests/constants/customMapper.js index 86cdee2be..f8f2337db 100644 --- a/services/gateway/tests/constants/customMapper.js +++ b/services/gateway/tests/constants/customMapper.js @@ -24,12 +24,8 @@ const rootObj = { ], supportedTokens: { isSupportAllTokens: false, - exactTokenIDs: [ - '0400000000000000', - ], - patternTokenIDs: [ - - ], + exactTokenIDs: ['0400000000000000'], + patternTokenIDs: [], }, totalSupply: [ { @@ -38,9 +34,7 @@ const rootObj = { }, ], }, - meta: { - - }, + meta: {}, }; const definitionObj = { @@ -81,12 +75,8 @@ const mapObjectExpectedResponse = { ], supportedTokens: { isSupportAllTokens: false, - patternTokenIDs: [ - - ], - exactTokenIDs: [ - '0400000000000000', - ], + patternTokenIDs: [], + exactTokenIDs: ['0400000000000000'], }, totalSupply: [ { diff --git a/services/gateway/tests/constants/generateDocs.js b/services/gateway/tests/constants/generateDocs.js index 409d6986c..ec2d77f63 100644 --- a/services/gateway/tests/constants/generateDocs.js +++ b/services/gateway/tests/constants/generateDocs.js @@ -56,11 +56,10 @@ const createApiDocsExpectedResponse = { }, '/blocks/assets': { get: { - tags: [ - 'Blocks', - ], + tags: ['Blocks'], summary: 'Requests block assets data.', - description: 'Returns block assets data. Assets are always returned empty for the genesis height.\n RPC => get.blocks.assets', + description: + 'Returns block assets data. Assets are always returned empty for the genesis height.\n RPC => get.blocks.assets', parameters: [ { $ref: '#/parameters/blockID', @@ -86,12 +85,7 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'height:asc', - 'height:desc', - 'timestamp:asc', - 'timestamp:desc', - ], + enum: ['height:asc', 'height:desc', 'timestamp:asc', 'timestamp:desc'], default: 'height:desc', }, ], @@ -113,9 +107,7 @@ const createApiDocsExpectedResponse = { }, '/blockchain/apps': { get: { - tags: [ - 'Interoperability', - ], + tags: ['Interoperability'], summary: 'Requests list of blockchain applications', description: 'Returns a list of blockchain applications\n RPC => get.blockchain.apps', parameters: [ @@ -156,11 +148,11 @@ const createApiDocsExpectedResponse = { }, '/blockchain/apps/meta/list': { get: { - tags: [ - 'Application Off-Chain Metadata', - ], - summary: 'Requests list of blockchain applications for which the off-chain metadata is available', - description: 'Returns a list of blockchain applications for which the off-chain metadata is available\n RPC => get.blockchain.apps.meta.list', + tags: ['Application Off-Chain Metadata'], + summary: + 'Requests list of blockchain applications for which the off-chain metadata is available', + description: + 'Returns a list of blockchain applications for which the off-chain metadata is available\n RPC => get.blockchain.apps.meta.list', parameters: [ { $ref: '#/parameters/chainName', @@ -183,16 +175,14 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'chainName:asc', - 'chainName:desc', - ], + enum: ['chainName:asc', 'chainName:desc'], default: 'chainName:asc', }, ], responses: { 200: { - description: 'Returns a list of blockchain applications for which the off-chain metadata is available', + description: + 'Returns a list of blockchain applications for which the off-chain metadata is available', schema: { $ref: '#/definitions/BlockchainAppsMetaListWithEnvelope', }, @@ -208,11 +198,10 @@ const createApiDocsExpectedResponse = { }, '/blockchain/apps/meta': { get: { - tags: [ - 'Application Off-Chain Metadata', - ], + tags: ['Application Off-Chain Metadata'], summary: 'Requests blockchain applications off-chain metadata', - description: 'Returns a list of blockchain applications off-chain metadata\n RPC => get.blockchain.apps.meta', + description: + 'Returns a list of blockchain applications off-chain metadata\n RPC => get.blockchain.apps.meta', parameters: [ { $ref: '#/parameters/chainName', @@ -244,12 +233,7 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'chainName:asc', - 'chainName:desc', - 'chainID:asc', - 'chainID:desc', - ], + enum: ['chainName:asc', 'chainName:desc', 'chainID:asc', 'chainID:desc'], default: 'chainName:asc', }, ], @@ -271,11 +255,10 @@ const createApiDocsExpectedResponse = { }, '/blockchain/apps/statistics': { get: { - tags: [ - 'Interoperability', - ], + tags: ['Interoperability'], summary: 'Requests blockchain application statistics', - description: 'Returns blockchain applications statistics\n RPC => get.blockchain.apps.statistics', + description: + 'Returns blockchain applications statistics\n RPC => get.blockchain.apps.statistics', responses: { 200: { description: 'Returns statistics for the blockchain applications in the Lisk ecosystem', @@ -288,11 +271,10 @@ const createApiDocsExpectedResponse = { }, '/blockchain/apps/meta/tokens': { get: { - tags: [ - 'Application Off-Chain Metadata', - ], + tags: ['Application Off-Chain Metadata'], summary: 'Requests blockchain applications off-chain metadata for tokens', - description: 'Returns blockchain applications off-chain metadata for tokens\n RPC => get.blockchain.apps.meta.tokens', + description: + 'Returns blockchain applications off-chain metadata for tokens\n RPC => get.blockchain.apps.meta.tokens', parameters: [ { $ref: '#/parameters/chainName', @@ -324,10 +306,7 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'chainName:asc', - 'chainName:desc', - ], + enum: ['chainName:asc', 'chainName:desc'], default: 'chainName:asc', }, ], @@ -349,11 +328,11 @@ const createApiDocsExpectedResponse = { }, '/blockchain/apps/meta/tokens/supported': { get: { - tags: [ - 'Application Off-Chain Metadata', - ], - summary: 'Requests blockchain applications off-chain metadata for tokens supported on the specified chainID.', - description: 'Returns blockchain applications off-chain metadata for tokens supported on the specified chainID.\n RPC => get.blockchain.apps.meta.tokens.supported', + tags: ['Application Off-Chain Metadata'], + summary: + 'Requests blockchain applications off-chain metadata for tokens supported on the specified chainID.', + description: + 'Returns blockchain applications off-chain metadata for tokens supported on the specified chainID.\n RPC => get.blockchain.apps.meta.tokens.supported', parameters: [ { $ref: '#/parameters/chainID', @@ -370,16 +349,14 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'tokenID:asc', - 'tokenID:desc', - ], + enum: ['tokenID:asc', 'tokenID:desc'], default: 'tokenID:asc', }, ], responses: { 200: { - description: 'Returns a list of blockchain applications off-chain metadata for tokens supported on the specified chainID.', + description: + 'Returns a list of blockchain applications off-chain metadata for tokens supported on the specified chainID.', schema: { $ref: '#/definitions/BlockchainAppsTokenMetadataWithEnvelope', }, @@ -395,9 +372,7 @@ const createApiDocsExpectedResponse = { }, '/blocks': { get: { - tags: [ - 'Blocks', - ], + tags: ['Blocks'], summary: 'Requests blocks data', description: 'Returns block data\n RPC => get.blocks', parameters: [ @@ -425,12 +400,7 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'height:asc', - 'height:desc', - 'timestamp:asc', - 'timestamp:desc', - ], + enum: ['height:asc', 'height:desc', 'timestamp:asc', 'timestamp:desc'], default: 'height:desc', }, ], @@ -452,9 +422,7 @@ const createApiDocsExpectedResponse = { }, '/events': { get: { - tags: [ - 'Events', - ], + tags: ['Events'], summary: 'Requests events data', description: 'Returns events data\n RPC => get.events', parameters: [ @@ -494,24 +462,17 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'height:asc', - 'height:desc', - 'timestamp:asc', - 'timestamp:desc', - ], + enum: ['height:asc', 'height:desc', 'timestamp:asc', 'timestamp:desc'], default: 'timestamp:desc', }, { name: 'order', in: 'query', - description: 'Fields to order results by. The order condition is applied after the sort condition, usually to break ties when the sort condition results in collision.', + description: + 'Fields to order results by. The order condition is applied after the sort condition, usually to break ties when the sort condition results in collision.', required: false, type: 'string', - enum: [ - 'index:asc', - 'index:desc', - ], + enum: ['index:asc', 'index:desc'], default: 'index:asc', }, ], @@ -533,9 +494,7 @@ const createApiDocsExpectedResponse = { }, '/fees': { get: { - tags: [ - 'Fee', - ], + tags: ['Fee'], summary: 'Requests fee estimates', description: 'Returns fee estimates\n RPC => get.fees', responses: { @@ -556,9 +515,7 @@ const createApiDocsExpectedResponse = { }, '/generators': { get: { - tags: [ - 'Generators', - ], + tags: ['Generators'], summary: 'Requests generators list', description: 'Returns generators list\n RPC => get.generators', parameters: [ @@ -590,9 +547,7 @@ const createApiDocsExpectedResponse = { }, '/index/status': { get: { - tags: [ - 'Index Status', - ], + tags: ['Index Status'], summary: 'Requests current indexing status.', description: 'Returns current indexing status.\n RPC => get.index.status', responses: { @@ -607,11 +562,10 @@ const createApiDocsExpectedResponse = { }, '/invoke': { post: { - tags: [ - 'Proxy', - ], + tags: ['Proxy'], summary: 'Proxy request to directly invoke application endpoint', - description: 'Returns endpoint response from the blockchain application in its original form.\n RPC => post.invoke', + description: + 'Returns endpoint response from the blockchain application in its original form.\n RPC => post.invoke', parameters: [ { $ref: '#/parameters/invokeParams', @@ -619,7 +573,8 @@ const createApiDocsExpectedResponse = { ], responses: { 200: { - description: 'Returns endpoint response from the blockchain application in its original form.', + description: + 'Returns endpoint response from the blockchain application in its original form.', schema: { $ref: '#/definitions/invokeWithEnvelope', }, @@ -641,12 +596,8 @@ const createApiDocsExpectedResponse = { }, '/market/prices': { get: { - tags: [ - 'Market', - ], - parameters: [ - - ], + tags: ['Market'], + parameters: [], summary: 'Requests market prices', description: 'Returns market prices\n RPC => get.market.prices', responses: { @@ -673,9 +624,7 @@ const createApiDocsExpectedResponse = { }, '/network/peers': { get: { - tags: [ - 'Network', - ], + tags: ['Network'], summary: 'Requests peers data', description: 'Returns peers data\n RPC => get.network.peers', parameters: [ @@ -689,7 +638,7 @@ const createApiDocsExpectedResponse = { $ref: '#/parameters/state', }, { - $ref: '#/parameters/height', + $ref: '#/parameters/heightWithoutRange', }, { $ref: '#/parameters/limit', @@ -703,12 +652,7 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'height:asc', - 'height:desc', - 'networkVersion:asc', - 'networkVersion:desc', - ], + enum: ['height:asc', 'height:desc', 'networkVersion:asc', 'networkVersion:desc'], default: 'height:desc', }, ], @@ -730,9 +674,7 @@ const createApiDocsExpectedResponse = { }, '/network/statistics': { get: { - tags: [ - 'Network', - ], + tags: ['Network'], summary: 'Requests network statistics', description: 'Returns network statistics data\n RPC => get.network.statistics', responses: { @@ -753,9 +695,7 @@ const createApiDocsExpectedResponse = { }, '/network/status': { get: { - tags: [ - 'Network', - ], + tags: ['Network'], summary: 'Requests network status', description: 'Returns network status\n RPC => get.network.status', responses: { @@ -847,9 +787,7 @@ const createApiDocsExpectedResponse = { }, '/transactions': { get: { - tags: [ - 'Transactions', - ], + tags: ['Transactions'], summary: 'Requests transactions data', description: 'Returns transactions data\n RPC => get.transactions', parameters: [ @@ -868,6 +806,9 @@ const createApiDocsExpectedResponse = { { $ref: '#/parameters/recipientAddress', }, + { + $ref: '#/parameters/receivingChainID', + }, { $ref: '#/parameters/blockID', }, @@ -895,24 +836,17 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'height:asc', - 'height:desc', - 'timestamp:asc', - 'timestamp:desc', - ], + enum: ['height:asc', 'height:desc', 'timestamp:asc', 'timestamp:desc'], default: 'timestamp:desc', }, { name: 'order', in: 'query', - description: 'Fields to order results by. The order condition is applied after the sort condition, usually to break ties when the sort condition results in collision.', + description: + 'Fields to order results by. The order condition is applied after the sort condition, usually to break ties when the sort condition results in collision.', required: false, type: 'string', - enum: [ - 'index:asc', - 'index:desc', - ], + enum: ['index:asc', 'index:desc'], default: 'index:asc', }, ], @@ -932,9 +866,7 @@ const createApiDocsExpectedResponse = { }, }, post: { - tags: [ - 'Transactions', - ], + tags: ['Transactions'], summary: 'Post transactions', description: 'Post transactions and return transactionID\n RPC => post.transactions', parameters: [ @@ -966,7 +898,8 @@ const createApiDocsExpectedResponse = { }, '/transactions/estimate-fees': { post: { - description: 'Returns estimated fees for the transaction.\n RPC => post.transactions.estimate-fees', + description: + 'Returns estimated fees for the transaction.\n RPC => post.transactions.estimate-fees', parameters: [ { $ref: '#/parameters/transactionEstimateFees', @@ -993,16 +926,12 @@ const createApiDocsExpectedResponse = { }, }, summary: 'Requests estimated fees for the transaction.', - tags: [ - 'Transactions', - ], + tags: ['Transactions'], }, }, '/schemas': { get: { - tags: [ - 'Schemas', - ], + tags: ['Schemas'], summary: 'Requests schemas.', description: 'Returns schemas.\n RPC => get.schemas', responses: { @@ -1023,9 +952,7 @@ const createApiDocsExpectedResponse = { }, '/transactions/dryrun': { post: { - tags: [ - 'Transactions', - ], + tags: ['Transactions'], summary: 'Dry run transactions.', description: 'Dry run transactions.\n RPC => post.transactions.dryrun', parameters: [ @@ -1057,9 +984,7 @@ const createApiDocsExpectedResponse = { }, '/transactions/statistics': { get: { - tags: [ - 'Transactions', - ], + tags: ['Transactions'], summary: 'Requests transaction statistics', description: 'Returns transaction statistics\n RPC => get.transactions.statistics', parameters: [ @@ -1069,10 +994,7 @@ const createApiDocsExpectedResponse = { description: 'interval to query statistics', required: true, type: 'string', - enum: [ - 'day', - 'month', - ], + enum: ['day', 'month'], }, { $ref: '#/parameters/limit', @@ -1105,9 +1027,7 @@ const createApiDocsExpectedResponse = { }, '/auth': { get: { - tags: [ - 'Auth', - ], + tags: ['Auth'], summary: 'Requests auth details by address', description: 'Returns auth details by address\n RPC => get.auth', parameters: [ @@ -1133,9 +1053,7 @@ const createApiDocsExpectedResponse = { }, '/validator': { get: { - tags: [ - 'Validator', - ], + tags: ['Validator'], summary: 'Requests validator information', description: 'Returns validator information\n RPC => get.validator', parameters: [ @@ -1161,11 +1079,10 @@ const createApiDocsExpectedResponse = { }, '/validator/validate-bls-key': { post: { - tags: [ - 'Validator', - ], + tags: ['Validator'], summary: 'Validates a BLS key against its corresponding Proof of Possession.', - description: 'Validates a BLS key against its corresponding Proof of Possession.\n RPC => post.validator.validate-bls-key', + description: + 'Validates a BLS key against its corresponding Proof of Possession.\n RPC => post.validator.validate-bls-key', parameters: [ { $ref: '#/parameters/validateBLSKeyParams', @@ -1173,7 +1090,8 @@ const createApiDocsExpectedResponse = { ], responses: { 200: { - description: 'Returns a boolean representing the validity of the supplied BLS key and Proof of Possession.', + description: + 'Returns a boolean representing the validity of the supplied BLS key and Proof of Possession.', schema: { $ref: '#/definitions/blsKeyValidationWithEnvelope', }, @@ -1189,11 +1107,10 @@ const createApiDocsExpectedResponse = { }, '/token/account/exists': { get: { - tags: [ - 'Token', - ], + tags: ['Token'], summary: 'Requests to check existence of an account for the specified token.', - description: 'Returns existence of an account for the specified token.\n RPC => get.token.account.exists', + description: + 'Returns existence of an account for the specified token.\n RPC => get.token.account.exists', parameters: [ { $ref: '#/parameters/address', @@ -1226,9 +1143,7 @@ const createApiDocsExpectedResponse = { }, '/token/available-ids': { get: { - tags: [ - 'Token', - ], + tags: ['Token'], summary: 'Requests the list of available tokens identifiers.', description: 'Returns all the available token identifiers.\n RPC => get.token.available-ids', parameters: [ @@ -1238,10 +1153,7 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'tokenID:desc', - 'tokenID:asc', - ], + enum: ['tokenID:desc', 'tokenID:asc'], default: 'tokenID:asc', }, { @@ -1269,14 +1181,12 @@ const createApiDocsExpectedResponse = { }, '/token/balances': { get: { - tags: [ - 'Token', - ], + tags: ['Token'], summary: 'Requests tokens information', description: 'Returns tokens information\n RPC => get.token.balances', parameters: [ { - $ref: '#/parameters/address', + $ref: '#/parameters/addressRequired', }, { $ref: '#/parameters/tokenID', @@ -1306,11 +1216,10 @@ const createApiDocsExpectedResponse = { }, '/token/constants': { get: { - tags: [ - 'Token', - ], + tags: ['Token'], summary: 'Requests Token module constants.', - description: 'Requests all the configured constants for the Token module.\n RPC => get.token.constants', + description: + 'Requests all the configured constants for the Token module.\n RPC => get.token.constants', responses: { 200: { description: 'Returns all the configured constants for the Token module.', @@ -1329,17 +1238,15 @@ const createApiDocsExpectedResponse = { }, '/token/summary': { get: { - tags: [ - 'Token', - ], + tags: ['Token'], summary: 'Requests the tokens summary for the current blockchain application.', - description: "Returns the token summary. The 'supportedTokens' is an empty list when all the tokens are supported on the blockchain application.\n RPC => get.token.summary", - parameters: [ - - ], + description: + "Returns the token summary. The 'supportedTokens' is an empty list when all the tokens are supported on the blockchain application.\n RPC => get.token.summary", + parameters: [], responses: { 200: { - description: "Returns the token summary. The 'supportedTokens' is an empty list when all the tokens are supported on the blockchain application.", + description: + "Returns the token summary. The 'supportedTokens' is an empty list when all the tokens are supported on the blockchain application.", schema: { $ref: '#/definitions/tokenSummaryWithEnvelope', }, @@ -1355,11 +1262,10 @@ const createApiDocsExpectedResponse = { }, '/token/balances/top': { get: { - tags: [ - 'Token', - ], + tags: ['Token'], summary: 'Requests the list of top accounts for the specified tokenID.', - description: 'Returns the list of top accounts for the specified tokenID.\n RPC => get.token.balances.top', + description: + 'Returns the list of top accounts for the specified tokenID.\n RPC => get.token.balances.top', parameters: [ { $ref: '#/parameters/tokenIDRequired', @@ -1379,10 +1285,7 @@ const createApiDocsExpectedResponse = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'balance:desc', - 'balance:asc', - ], + enum: ['balance:desc', 'balance:asc'], default: 'balance:desc', }, ], diff --git a/services/gateway/tests/constants/paramValidator.js b/services/gateway/tests/constants/paramValidator.js index eec247bfd..58a867e15 100644 --- a/services/gateway/tests/constants/paramValidator.js +++ b/services/gateway/tests/constants/paramValidator.js @@ -47,10 +47,7 @@ const objDiffReference = { key4: 'val4', key6: 'val6', }; -const objDiffExpectedResponse = [ - 'key1', - 'key3', -]; +const objDiffExpectedResponse = ['key1', 'key3']; const dropEmptyPropsInput = { key1: 'val1', @@ -116,14 +113,17 @@ const validateSpecs = { version: '2.0', swaggerApiPath: '/blockchain/apps/meta/tokens', rpcMethod: 'get.blockchain.apps.meta.tokens', - tags: [ - 'Interoperability', - ], + tags: ['Interoperability'], params: { - chainName: { optional: true, type: 'string', pattern: regex.NAME }, + chainName: { optional: true, type: 'string', pattern: regex.CHAIN_NAME }, chainID: { optional: true, type: 'string', pattern: regex.CHAIN_ID }, tokenName: { optional: true, type: 'string', pattern: regex.NAME_CSV }, - tokenID: { optional: true, type: 'string', pattern: regex.TOKEN_ID_CSV, altSwaggerKey: 'tokenIDCSV' }, + tokenID: { + optional: true, + type: 'string', + pattern: regex.TOKEN_ID_CSV, + altSwaggerKey: 'tokenIDCSV', + }, network: { optional: true, type: 'string', pattern: regex.NETWORK_CSV }, search: { optional: true, type: 'string' }, limit: { optional: true, type: 'number', min: 1, max: 100, default: 10 }, @@ -138,11 +138,10 @@ const validateSpecs = { schema: { '/blockchain/apps/meta/tokens': { get: { - tags: [ - 'Interoperability', - ], + tags: ['Interoperability'], summary: 'Requests blockchain applications off-chain metadata for tokens', - description: 'Returns blockchain applications off-chain metadata for tokens\n RPC => get.blockchain.apps.meta.tokens', + description: + 'Returns blockchain applications off-chain metadata for tokens\n RPC => get.blockchain.apps.meta.tokens', parameters: [ { $ref: '#/parameters/chainName', @@ -174,10 +173,7 @@ const validateSpecs = { description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'chainName:asc', - 'chainName:desc', - ], + enum: ['chainName:asc', 'chainName:desc'], default: 'chainName:asc', }, ], @@ -244,18 +240,12 @@ const validateSpecs = { offset: '=,number', total: '=,number', }, - links: { - - }, + links: {}, }, }, envelope: { - data: [ - - ], - meta: { - - }, + data: [], + meta: {}, }, }; const validateExpectedParamReport = { @@ -267,18 +257,10 @@ const validateExpectedParamReport = { offset: 0, sort: 'chainName:asc', }, - unknown: { - - }, - required: [ - - ], - missing: [ - - ], - invalid: [ - - ], + unknown: {}, + required: [], + missing: [], + invalid: [], }; const validateInvalidKeyExpectedResponse = { valid: { @@ -292,12 +274,8 @@ const validateInvalidKeyExpectedResponse = { unknown: { invalidKey: 'invalidValue', }, - required: [ - - ], - missing: [ - - ], + required: [], + missing: [], }; const checkMissingParamsRouteParams = { diff --git a/services/gateway/tests/constants/registerApi.js b/services/gateway/tests/constants/registerApi.js index 95347d938..7aa36b018 100644 --- a/services/gateway/tests/constants/registerApi.js +++ b/services/gateway/tests/constants/registerApi.js @@ -13,7 +13,6 @@ * Removal or modification of this copyright notice is prohibited. * */ -// TODO: Expected response for registerApi method should be dynamically constructed const expectedResponseForRegisterHttpApi = [ { whitelist: [ @@ -69,7 +68,8 @@ const expectedResponseForRegisterHttpApi = [ 'GET blockchain/apps/meta': 'app-registry.blockchain.apps.meta', 'GET blockchain/apps/statistics': 'indexer.blockchain.apps.statistics', 'GET blockchain/apps/meta/tokens': 'app-registry.blockchain.apps.meta.tokens', - 'GET blockchain/apps/meta/tokens/supported': 'app-registry.blockchain.apps.meta.tokens.supported', + 'GET blockchain/apps/meta/tokens/supported': + 'app-registry.blockchain.apps.meta.tokens.supported', 'GET blocks': 'indexer.blocks', 'GET events': 'indexer.events', 'GET fees': 'fees.estimates', @@ -110,9 +110,7 @@ const expectedResponseForRegisterHttpApi = [ etag: 'strong', }, { - whitelist: [ - 'indexer.token.balances', - ], + whitelist: ['indexer.token.balances'], aliases: { 'GET /': 'indexer.token.balances', }, @@ -121,7 +119,6 @@ const expectedResponseForRegisterHttpApi = [ }, ]; -// TODO: Expected response for registerApi method should be dynamically constructed const expectedResponseForRegisterRpcApi = { events: { request: { @@ -177,7 +174,8 @@ const expectedResponseForRegisterRpcApi = { 'get.blockchain.apps.meta': 'app-registry.blockchain.apps.meta', 'get.blockchain.apps.statistics': 'indexer.blockchain.apps.statistics', 'get.blockchain.apps.meta.tokens': 'app-registry.blockchain.apps.meta.tokens', - 'get.blockchain.apps.meta.tokens.supported': 'app-registry.blockchain.apps.meta.tokens.supported', + 'get.blockchain.apps.meta.tokens.supported': + 'app-registry.blockchain.apps.meta.tokens.supported', 'get.blocks': 'indexer.blocks', 'get.events': 'indexer.events', 'get.fees': 'fees.estimates', @@ -270,16 +268,12 @@ const dataForTransformResponse = { { denom: 'beddows', decimals: 0, - aliases: [ - 'Beddows', - ], + aliases: ['Beddows'], }, { denom: 'lsk', decimals: 8, - aliases: [ - 'Lisk', - ], + aliases: ['Lisk'], }, ], baseDenom: 'beddows', @@ -302,16 +296,12 @@ const dataForTransformResponse = { { denom: 'beddows', decimals: 0, - aliases: [ - 'Beddows', - ], + aliases: ['Beddows'], }, { denom: 'lsk', decimals: 8, - aliases: [ - 'Lisk', - ], + aliases: ['Lisk'], }, ], baseDenom: 'beddows', @@ -354,16 +344,12 @@ const expectedResponseForTransformResponse = { { denom: 'beddows', decimals: 0, - aliases: [ - 'Beddows', - ], + aliases: ['Beddows'], }, { denom: 'lsk', decimals: 8, - aliases: [ - 'Lisk', - ], + aliases: ['Lisk'], }, ], customNumber: 123, @@ -386,16 +372,12 @@ const expectedResponseForTransformResponse = { { denom: 'beddows', decimals: 0, - aliases: [ - 'Beddows', - ], + aliases: ['Beddows'], }, { denom: 'lsk', decimals: 8, - aliases: [ - 'Lisk', - ], + aliases: ['Lisk'], }, ], customNumber: 456, @@ -533,10 +515,7 @@ const buildAPIAliasesResponse = { aliases: { 'GET /': 'template.generic.hello', }, - whitelist: [ - 'template.server.error', - 'template.generic.hello', - ], + whitelist: ['template.server.error', 'template.generic.hello'], methodPaths: { 'GET ': { version: '2.0', @@ -577,9 +556,7 @@ const buildAPIAliasesMethodsWithFalseEtag = { version: '2.0', swaggerApiPath: '/token/balances', rpcMethod: 'get.token.balances', - tags: [ - 'Token', - ], + tags: ['Token'], etag: false, params: { address: { @@ -609,9 +586,7 @@ const buildAPIAliasesMethodsWithFalseEtag = { schema: { '/token/balances': { get: { - tags: [ - 'Token', - ], + tags: ['Token'], summary: 'Requests tokens information', description: 'Returns tokens information\n RPC => get.token.balances', parameters: [ @@ -689,17 +664,13 @@ const buildAPIAliasesWithFalseEtagResponse = { aliases: { 'GET /': 'indexer.token.balances', }, - whitelist: [ - 'indexer.token.balances', - ], + whitelist: ['indexer.token.balances'], methodPaths: { 'GET ': { version: '2.0', swaggerApiPath: '/token/balances', rpcMethod: 'get.token.balances', - tags: [ - 'Token', - ], + tags: ['Token'], etag: false, params: { address: { @@ -729,9 +700,7 @@ const buildAPIAliasesWithFalseEtagResponse = { schema: { '/token/balances': { get: { - tags: [ - 'Token', - ], + tags: ['Token'], summary: 'Requests tokens information', description: 'Returns tokens information\n RPC => get.token.balances', parameters: [ diff --git a/services/gateway/tests/constants/utils.js b/services/gateway/tests/constants/utils.js index 736a30682..25554f485 100644 --- a/services/gateway/tests/constants/utils.js +++ b/services/gateway/tests/constants/utils.js @@ -19,18 +19,12 @@ const transformParamsInput = { }, sort: { type: 'string', - enum: [ - 'name:asc', - 'name:desc', - ], + enum: ['name:asc', 'name:desc'], default: 'name:asc', }, order: { type: 'string', - enum: [ - 'rank:asc', - 'rank:desc', - ], + enum: ['rank:asc', 'rank:desc'], default: 'rank:asc', }, 'custom key': {}, @@ -46,22 +40,17 @@ const transformParamsExpectedResponse = [ description: 'Fields to sort results by.', required: false, type: 'string', - enum: [ - 'name:asc', - 'name:desc', - ], + enum: ['name:asc', 'name:desc'], default: 'name:asc', }, { name: 'order', in: 'query', - description: 'Fields to order results by. The order condition is applied after the sort condition, usually to break ties when the sort condition results in collision.', + description: + 'Fields to order results by. The order condition is applied after the sort condition, usually to break ties when the sort condition results in collision.', required: false, type: 'string', - enum: [ - 'rank:asc', - 'rank:desc', - ], + enum: ['rank:asc', 'rank:desc'], default: 'rank:asc', }, { @@ -73,21 +62,21 @@ const requireAllJsonExpectedResponse = { definitions: { ExportScheduled: { type: 'object', - required: [ - 'address', - ], + required: ['address'], properties: { address: { type: 'string', format: 'address', example: 'lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99', - description: "The Lisk Address is the human readable representation of the accounts owners' public key.\nIt is 41 character long address thats begins with `lsk`.\n", + description: + "The Lisk Address is the human readable representation of the accounts owners' public key.\nIt is 41 character long address thats begins with `lsk`.\n", }, publicKey: { type: 'string', format: 'publicKey', example: 'b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd', - description: 'The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owners private key.\n', + description: + 'The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owners private key.\n', }, interval: { type: 'string', @@ -99,10 +88,7 @@ const requireAllJsonExpectedResponse = { }, ExportScheduledWithEnvelope: { type: 'object', - required: [ - 'data', - 'meta', - ], + required: ['data', 'meta'], properties: { data: { description: 'Transaction history export information', @@ -115,7 +101,8 @@ const requireAllJsonExpectedResponse = { ready: { type: 'boolean', example: 'false', - description: 'False when scheduled to export. True when already exported and available for download', + description: + 'False when scheduled to export. True when already exported and available for download', }, }, }, @@ -126,21 +113,21 @@ const requireAllJsonExpectedResponse = { }, ExportFile: { type: 'object', - required: [ - 'address', - ], + required: ['address'], properties: { address: { type: 'string', format: 'address', example: 'lskdwsyfmcko6mcd357446yatromr9vzgu7eb8y99', - description: "The Lisk Address is the human readable representation of the accounts owners' public key.\nIt is 41 character long address thats begins with `lsk`.\n", + description: + "The Lisk Address is the human readable representation of the accounts owners' public key.\nIt is 41 character long address thats begins with `lsk`.\n", }, publicKey: { type: 'string', format: 'publicKey', example: 'b1d6bc6c7edd0673f5fed0681b73de6eb70539c21278b300f07ade277e1962cd', - description: 'The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owners private key.\n', + description: + 'The public key is derived from the private key of the owner of the account.\nIt can be used to validate that the private key belongs to the owner, but not provide access to the owners private key.\n', }, interval: { type: 'string', @@ -152,7 +139,8 @@ const requireAllJsonExpectedResponse = { type: 'string', format: 'fileName', example: 'transactions__
__.csv', - description: 'The name of the file containing the exported account transaction history.\n', + description: + 'The name of the file containing the exported account transaction history.\n', }, fileUrl: { type: 'string', @@ -164,10 +152,7 @@ const requireAllJsonExpectedResponse = { }, ExportFileUrlWithEnvelope: { type: 'object', - required: [ - 'data', - 'meta', - ], + required: ['data', 'meta'], properties: { data: { description: 'Transaction history export information', @@ -180,13 +165,11 @@ const requireAllJsonExpectedResponse = { ready: { type: 'boolean', example: 'true', - description: 'True when already exported and available for download. False when scheduled to export', + description: + 'True when already exported and available for download. False when scheduled to export', }, }, }, - links: { - type: 'object', - }, }, }, }, @@ -236,7 +219,8 @@ const requireAllJsonExpectedResponse = { contact: { email: 'admin@lisk.com', }, - description: '# Lisk Service API Documentation\n\nLisk Service is a middleware web application that interacts with the entire Lisk ecosystem in various aspects, such as accessing blockchain data (both on-chain and off-chain information), retrieving and storing market data, and exporting account history.\n\nThe main focus of this project is to provide data to Lisk blockchain users by serving them in a standardized JSON format and exposing a public RESTful API. The project is split into several smaller components (microservices) each focused on serving a single specific purpose. \n\nAs a pure backend project, it is designed to meet the requirements of front-end developers, especially Lisk Desktop and Lisk Mobile.\n\nThe API can be accessed at `https://service.lisk.com`.\nIt is also possible to access the Testnet network at `https://testnet-service.lisk.com`.\n\nThe Lisk Service API is compatible with RESTful guidelines. The specification below contains numerous examples of how to use the API in practice.\n\n## Endpoint Logic\n\nThe logic of the endpoints are as follows:\n- the structure is always based on `///`\n\n## Responses\n\nAll responses are returned in the JSON format - `application/json`.\n\nEach API request has the following structure:\n\n```\n{\n "data": {}, // Contains the requested data\n "meta": {}, // Contains additional metadata, e.g. the values of `limit` and `offset`\n}\n```\n\nAnd, the error responses adhere to the following structure:\n\n```\n{\n "error": true,\n "message": "Not found", // Contains the error message\n}\n```', + description: + '# Lisk Service API Documentation\n\nLisk Service is a middleware web application that interacts with the entire Lisk ecosystem in various aspects, such as accessing blockchain data (both on-chain and off-chain information), retrieving and storing market data, and exporting account history.\n\nThe main focus of this project is to provide data to Lisk blockchain users by serving them in a standardized JSON format and exposing a public RESTful API. The project is split into several smaller components (microservices) each focused on serving a single specific purpose. \n\nAs a pure backend project, it is designed to meet the requirements of front-end developers, especially Lisk Desktop and Lisk Mobile.\n\nThe API can be accessed at `https://service.lisk.com`.\nIt is also possible to access the Testnet network at `https://testnet-service.lisk.com`.\n\nThe Lisk Service API is compatible with RESTful guidelines. The specification below contains numerous examples of how to use the API in practice.\n\n## Endpoint Logic\n\nThe logic of the endpoints are as follows:\n- the structure is always based on `///`\n\n## Responses\n\nAll responses are returned in the JSON format - `application/json`.\n\nEach API request has the following structure:\n\n```\n{\n "data": {}, // Contains the requested data\n "meta": {}, // Contains additional metadata, e.g. the values of `limit` and `offset`\n}\n```\n\nAnd, the error responses adhere to the following structure:\n\n```\n{\n "error": true,\n "message": "Not found", // Contains the error message\n}\n```', license: { name: 'GPL v3.0', url: 'https://www.gnu.org/licenses/gpl-3.0.en.html', @@ -249,22 +233,17 @@ const requireAllJsonExpectedResponse = { description: 'Lisk network transaction history export API.', }, ], - schemes: [ - 'http', - 'https', - ], - paths: { - - }, + schemes: ['http', 'https'], + paths: {}, }, responses: { - badParameter: { + 400: { description: 'Bad request', schema: { $ref: '#/definitions/badRequest', }, }, - notFound: { + 404: { description: 'Not found', schema: { $ref: '#/definitions/notFound', diff --git a/services/gateway/tests/unit/shared/apiUtils.test.js b/services/gateway/tests/unit/shared/apiUtils.test.js index 0b0fb30e5..9ff0fbb2c 100644 --- a/services/gateway/tests/unit/shared/apiUtils.test.js +++ b/services/gateway/tests/unit/shared/apiUtils.test.js @@ -57,9 +57,7 @@ describe('Test API utilities', () => { }); it('should throw error when called with null or undefined', async () => { - [null, undefined].forEach( - param => expect(() => dropOneSlashAtBeginning(param)).toThrow(), - ); + [null, undefined].forEach(param => expect(() => dropOneSlashAtBeginning(param)).toThrow()); }); }); @@ -80,9 +78,7 @@ describe('Test API utilities', () => { }); it('should throw error when called with null or undefined', async () => { - [null, undefined].forEach( - param => expect(() => curlyBracketsToColon(param)).toThrow(), - ); + [null, undefined].forEach(param => expect(() => curlyBracketsToColon(param)).toThrow()); }); }); @@ -100,6 +96,7 @@ describe('Test API utilities', () => { }); it('should return string when called to convert array to string', async () => { + // eslint-disable-next-line no-array-constructor const response = convertType(new Array(...[1, 2, 3]), 'string'); expect(typeof response).toEqual('string'); expect(response).toEqual('1,2,3'); @@ -165,29 +162,25 @@ describe('Test API utilities', () => { }); it('should return empty object when mappingKey is null or undefined', async () => { - [null, undefined].forEach( - mappingKey => { - const response = mapParam(source, 'originalKey', mappingKey); - expect(response).toEqual({}); - }, - ); + [null, undefined].forEach(mappingKey => { + const response = mapParam(source, 'originalKey', mappingKey); + expect(response).toEqual({}); + }); }); it('should return undefined value when originalKey is null or undefined', async () => { - [null, undefined].forEach( - originalKey => { - const response = mapParam(source, originalKey, 'mappingKey'); - expect(response).toEqual({ - key: 'mappingKey', - value: undefined, - }); - }, - ); + [null, undefined].forEach(originalKey => { + const response = mapParam(source, originalKey, 'mappingKey'); + expect(response).toEqual({ + key: 'mappingKey', + value: undefined, + }); + }); }); it('should throw error when source is null or undefined', async () => { - [null, undefined].forEach( - sourceParam => expect(() => mapParam(sourceParam, 'originalKey', 'mappingKey')).toThrow(), + [null, undefined].forEach(sourceParam => + expect(() => mapParam(sourceParam, 'originalKey', 'mappingKey')).toThrow(), ); }); }); @@ -218,30 +211,24 @@ describe('Test API utilities', () => { it('should throw error when source is null or undefined', async () => { const originalSetup = 'key_number'; const mappingKey = 'new_key'; - [null, undefined].forEach( - sourceParam => expect( - () => mapParamWithType(sourceParam, originalSetup, mappingKey), - ).toThrow(), + [null, undefined].forEach(sourceParam => + expect(() => mapParamWithType(sourceParam, originalSetup, mappingKey)).toThrow(), ); }); it('should throw error when originalSetup is null or undefined', async () => { const mappingKey = 'new_key'; - [null, undefined].forEach( - originalSetup => { - expect(() => mapParamWithType(source, originalSetup, mappingKey)).toThrow(); - }, - ); + [null, undefined].forEach(originalSetup => { + expect(() => mapParamWithType(source, originalSetup, mappingKey)).toThrow(); + }); }); it('should return empty object when mappingKey is null or undefined', async () => { const originalSetup = 'key_number'; - [null, undefined].forEach( - mappingKey => { - const response = mapParamWithType(source, originalSetup, mappingKey); - expect(response).toEqual({}); - }, - ); + [null, undefined].forEach(mappingKey => { + const response = mapParamWithType(source, originalSetup, mappingKey); + expect(response).toEqual({}); + }); }); }); @@ -267,9 +254,7 @@ describe('Test API utilities', () => { }); it('should throw error when called with null or undefined ', async () => { - [null, undefined].forEach( - param => expect(() => transformPath(param)).toThrow(), - ); + [null, undefined].forEach(param => expect(() => transformPath(param)).toThrow()); }); }); @@ -298,8 +283,8 @@ describe('Test API utilities', () => { }); it('should throw error when called with null or undefined specs', async () => { - [null, undefined].forEach( - specsParam => expect(() => transformParams(params, specsParam)).toThrow(), + [null, undefined].forEach(specsParam => + expect(() => transformParams(params, specsParam)).toThrow(), ); }); }); @@ -364,17 +349,15 @@ describe('Test API utilities', () => { }); it('should return data when called with null or undefined methodDef', async () => { - [null, undefined].forEach( - async methodDefParam => { - const response = await transformResponse(methodDefParam, data); - expect(response).toEqual(data); - }, - ); + [null, undefined].forEach(async methodDefParam => { + const response = await transformResponse(methodDefParam, data); + expect(response).toEqual(data); + }); }); it('should throw error when called with null or undefined data', async () => { - [null, undefined].forEach( - dataParam => expect(() => transformResponse(methodDef, dataParam)).rejects.toThrow(), + [null, undefined].forEach(dataParam => + expect(() => transformResponse(methodDef, dataParam)).rejects.toThrow(), ); }); diff --git a/services/gateway/tests/unit/shared/customMapper.test.js b/services/gateway/tests/unit/shared/customMapper.test.js index a3665c9fe..c346a2c38 100644 --- a/services/gateway/tests/unit/shared/customMapper.test.js +++ b/services/gateway/tests/unit/shared/customMapper.test.js @@ -13,13 +13,12 @@ * Removal or modification of this copyright notice is prohibited. * */ +const { resolvePath, mapObject, mapArray, mapper } = require('../../../shared/customMapper'); const { - resolvePath, - mapObject, - mapArray, - mapper, -} = require('../../../shared/customMapper'); -const { rootObj, definitionObj, mapObjectExpectedResponse } = require('../../constants/customMapper'); + rootObj, + definitionObj, + mapObjectExpectedResponse, +} = require('../../constants/customMapper'); describe('Test resolvePath method', () => { const obj = { @@ -75,19 +74,14 @@ describe('Test mapObject method', () => { describe('Test mapArray method', () => { it('should return definition array when called with a definition array of one string', async () => { const arr = ['some string']; - const definition = [ - 'different_key', - ]; + const definition = ['different_key']; const response = mapArray(arr, definition); expect(response).toEqual(definition); }); it('should return definition with first element when called with a definition array of strings', async () => { const arr = ['some string']; - const definition = [ - 'different_key1', - 'different_key2', - ]; + const definition = ['different_key1', 'different_key2']; const response = mapArray(arr, definition); expect(response).toEqual([definition[0]]); }); diff --git a/services/gateway/tests/unit/shared/paramValidator.test.js b/services/gateway/tests/unit/shared/paramValidator.test.js index 1e4a5981c..e37b14248 100644 --- a/services/gateway/tests/unit/shared/paramValidator.test.js +++ b/services/gateway/tests/unit/shared/paramValidator.test.js @@ -204,9 +204,7 @@ describe('Test validate method', () => { describe('Test validateFromParamPairings method', () => { const inputParamKeys = ['key1', 'key2', 'key3']; - const schemaParamPairings = [ - ['key1', 'key2'], - ]; + const schemaParamPairings = [['key1', 'key2']]; it('should return empty array when inputParamKeys is part of schema paramPairings', async () => { const response = validateFromParamPairings(true, inputParamKeys, schemaParamPairings); @@ -219,11 +217,7 @@ describe('Test validateFromParamPairings method', () => { }); it('should return schema paramPairings when inputParamKeys is not part of schema paramPairings', async () => { - const response = validateFromParamPairings( - true, - [inputParamKeys[0]], - schemaParamPairings, - ); + const response = validateFromParamPairings(true, [inputParamKeys[0]], schemaParamPairings); expect(response).toEqual(schemaParamPairings); }); @@ -291,10 +285,7 @@ describe('Test parseDefaultParams method', () => { describe('Test parseAllParams method', () => { it('should return correctly parsed object when called with valid routeParams and requestParams', async () => { - const response = parseAllParams( - parseAllParamsRouteParams, - parseAllParamsRequestParams, - ); + const response = parseAllParams(parseAllParamsRouteParams, parseAllParamsRequestParams); expect(response).toEqual(parseAllParamsExpectedResponse); }); diff --git a/services/gateway/tests/unit/shared/registerHttpApi.test.js b/services/gateway/tests/unit/shared/registerHttpApi.test.js index 353b0fb06..5883dc20e 100644 --- a/services/gateway/tests/unit/shared/registerHttpApi.test.js +++ b/services/gateway/tests/unit/shared/registerHttpApi.test.js @@ -18,9 +18,16 @@ const { Exceptions: { ValidationException }, } = require('lisk-service-framework'); -const { buildAPIAliasesPrefix, buildAPIAliasesMethods, buildAPIAliasesResponse, - buildAPIAliasesPrefixWithFalseEtag, buildAPIAliasesMethodsWithFalseEtag, - buildAPIAliasesWithFalseEtagResponse, getAllAPIsExpectedResponse, expectedResponseForRegisterHttpApi } = require('../../constants/registerApi'); +const { + buildAPIAliasesPrefix, + buildAPIAliasesMethods, + buildAPIAliasesResponse, + buildAPIAliasesPrefixWithFalseEtag, + buildAPIAliasesMethodsWithFalseEtag, + buildAPIAliasesWithFalseEtagResponse, + getAllAPIsExpectedResponse, + expectedResponseForRegisterHttpApi, +} = require('../../constants/registerApi'); describe('Test buildAPIConfig method', () => { let config; @@ -86,7 +93,7 @@ describe('Test buildAPIConfig method', () => { const { buildAPIConfig } = require('../../../shared/registerHttpApi'); const result = buildAPIConfig('/api/users', config, {}, [], methodPaths, 'strong'); - result.onBeforeCall(ctx, route, req, res).catch((e) => { + result.onBeforeCall(ctx, route, req, res).catch(e => { expect(e).toBeInstanceOf(ValidationException); }); }); @@ -105,7 +112,7 @@ describe('Test buildAPIConfig method', () => { const { buildAPIConfig } = require('../../../shared/registerHttpApi'); const result = buildAPIConfig('/api/users', config, {}, [], methodPaths, 'strong'); - result.onBeforeCall(ctx, route, req, res).catch((e) => { + result.onBeforeCall(ctx, route, req, res).catch(e => { expect(e).toBeInstanceOf(ValidationException); }); }); @@ -125,7 +132,7 @@ describe('Test buildAPIConfig method', () => { const result = buildAPIConfig('/api/users', config, {}, [], methodPaths, 'strong'); - result.onBeforeCall(ctx, route, req, res).catch((e) => { + result.onBeforeCall(ctx, route, req, res).catch(e => { expect(e).toBeInstanceOf(ValidationException); }); }); @@ -145,7 +152,7 @@ describe('Test buildAPIConfig method', () => { const result = buildAPIConfig('/api/users', config, {}, [], methodPaths, 'strong'); - result.onBeforeCall(ctx, route, req, res).catch((e) => { + result.onBeforeCall(ctx, route, req, res).catch(e => { expect(e).toBeInstanceOf(ValidationException); }); }); @@ -194,7 +201,10 @@ describe('Test buildAPIConfig method', () => { const result = buildAPIConfig('/api/users', config, {}, [], methodPaths, 'strong'); await result.onAfterCall(ctx, route, req, res, data); - expect(res.setHeader).toHaveBeenCalledWith('Content-Disposition', 'attachment; filename="data.csv"'); + expect(res.setHeader).toHaveBeenCalledWith( + 'Content-Disposition', + 'attachment; filename="data.csv"', + ); expect(res.setHeader).toHaveBeenCalledWith('Content-Type', 'text/csv'); expect(res.end).toHaveBeenCalledWith(data.data); }); @@ -205,7 +215,10 @@ describe('Test buildAPIConfig method', () => { const result = buildAPIConfig('/api/users', config, {}, [], methodPaths, 'strong'); await result.onAfterCall(ctx, route, req, res, excelData); - expect(res.setHeader).toHaveBeenCalledWith('Content-Disposition', 'attachment; filename="data.xlsx"'); + expect(res.setHeader).toHaveBeenCalledWith( + 'Content-Disposition', + 'attachment; filename="data.xlsx"', + ); expect(res.setHeader).toHaveBeenCalledWith('Content-Type', 'application/vnd.ms-excel'); expect(res.end).toHaveBeenCalledWith(excelData.data); }); @@ -353,9 +366,7 @@ describe('Test getMethodName method', () => { it('should throw error when called with null or undefined', async () => { const { getMethodName } = require('../../../shared/registerHttpApi'); - [null, undefined].forEach( - param => expect(() => getMethodName(param)).toThrow(), - ); + [null, undefined].forEach(param => expect(() => getMethodName(param)).toThrow()); }); }); @@ -366,7 +377,15 @@ describe('Test registerApi method', () => { aliases: {}, path: '/v3', }; - const registeredModuleNames = ['fee', 'interoperability', 'legacy', 'pos', 'random', 'token', 'validators']; + const registeredModuleNames = [ + 'fee', + 'interoperability', + 'legacy', + 'pos', + 'random', + 'token', + 'validators', + ]; it('should return correct api info when called with valid inputs', async () => { const { registerApi } = require('../../../shared/registerHttpApi'); @@ -424,8 +443,11 @@ describe('Test buildAPIAliases method', () => { it('should return proper response when called with correct params and eTag as false', async () => { const { buildAPIAliases } = require('../../../shared/registerHttpApi'); - const response = buildAPIAliases(buildAPIAliasesPrefixWithFalseEtag, - buildAPIAliasesMethodsWithFalseEtag, false); + const response = buildAPIAliases( + buildAPIAliasesPrefixWithFalseEtag, + buildAPIAliasesMethodsWithFalseEtag, + false, + ); expect(response).toEqual(buildAPIAliasesWithFalseEtagResponse); }); diff --git a/services/gateway/tests/unit/shared/registerRpcApi.test.js b/services/gateway/tests/unit/shared/registerRpcApi.test.js index 7242b6c76..982bd519f 100644 --- a/services/gateway/tests/unit/shared/registerRpcApi.test.js +++ b/services/gateway/tests/unit/shared/registerRpcApi.test.js @@ -23,7 +23,15 @@ describe('Test registerApi method', () => { whitelist: [], aliases: {}, }; - const registeredModuleNames = ['fee', 'interoperability', 'legacy', 'pos', 'random', 'token', 'validators']; + const registeredModuleNames = [ + 'fee', + 'interoperability', + 'legacy', + 'pos', + 'random', + 'token', + 'validators', + ]; it('should return correct api info when called with valid inputs', async () => { const response = await registerApi(apiNames, config, registeredModuleNames); diff --git a/services/gateway/tests/unit/shared/status.test.js b/services/gateway/tests/unit/shared/status.test.js index 03f02d387..13e4ef759 100644 --- a/services/gateway/tests/unit/shared/status.test.js +++ b/services/gateway/tests/unit/shared/status.test.js @@ -22,44 +22,28 @@ const { }, } = require('lisk-service-framework'); -const { getBuildTimestamp } = require('../../../shared/status'); - describe('Test getBuildTimestamp method', () => { const dateStr = '2999-03-21T11:15:59.337Z'; const jsonStr = `{"timestamp": "${dateStr}"}`; const filePath = path.resolve(__dirname, '../../../build.json'); - let fileExistBefore = false; - - beforeAll(async () => new Promise((resolve, reject) => { - exists(filePath).then((isExists) => { - fileExistBefore = isExists; - if (!isExists) { - return fs.writeFile( - filePath, - jsonStr, - (err) => { - if (err) return reject(err); - return resolve(); - }, - ); - } - return resolve(); - }); - })); + it('should return current time from the file when build.json file exists', async () => { + const isExists = await exists(filePath); - afterAll(async () => { - if (!fileExistBefore) await rmdir(filePath); - }); + if (!isExists) { + await fs.promises.writeFile(filePath, jsonStr); + } - // TODO: Test is executed before file creation. This needs to be fixed before enabling the tests - xit('should return current time from the file when build.json file exists', async () => { + const { getBuildTimestamp } = require('../../../shared/status'); const response = await getBuildTimestamp(); expect(response).toEqual(dateStr); + + if (!isExists) await rmdir(filePath); }); it('should return current time when build.json file does not exists', async () => { const curDate = new Date(); + const { getBuildTimestamp } = require('../../../shared/status'); const response = await getBuildTimestamp(); expect(new Date(response).getTime()).toBeGreaterThanOrEqual(curDate.getTime()); }); diff --git a/services/gateway/tests/unit/shared/utils.test.js b/services/gateway/tests/unit/shared/utils.test.js index e9c3cb571..6aff4e39f 100644 --- a/services/gateway/tests/unit/shared/utils.test.js +++ b/services/gateway/tests/unit/shared/utils.test.js @@ -13,8 +13,17 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { transformParams, requireAllJson, getSwaggerDescription, isValidNonEmptyResponse } = require('../../../shared/utils'); -const { transformParamsInput, transformParamsExpectedResponse, requireAllJsonExpectedResponse } = require('../../constants/utils'); +const { + transformParams, + requireAllJson, + getSwaggerDescription, + isValidNonEmptyResponse, +} = require('../../../shared/utils'); +const { + transformParamsInput, + transformParamsExpectedResponse, + requireAllJsonExpectedResponse, +} = require('../../constants/utils'); describe('Test transformParams method', () => { it('should return correctly mapped params when called with all possible key types', async () => { diff --git a/services/gateway/yarn.lock b/services/gateway/yarn.lock index 05d5f9315..8e5dea3b0 100644 --- a/services/gateway/yarn.lock +++ b/services/gateway/yarn.lock @@ -10,58 +10,58 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" @@ -92,10 +92,10 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -122,43 +122,43 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -195,6 +195,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -245,9 +252,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -260,28 +267,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -318,173 +325,196 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^16.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": @@ -511,18 +541,18 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" @@ -532,34 +562,34 @@ dependencies: debug "^3.1.0" -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -568,24 +598,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" @@ -595,70 +625,62 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== - -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== -"@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -667,36 +689,6 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -795,23 +787,24 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -827,14 +820,14 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: @@ -855,12 +848,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^27.5.1" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -879,9 +872,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -940,19 +933,14 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: @@ -996,13 +984,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1024,10 +1013,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -1057,22 +1046,22 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: @@ -1146,10 +1135,10 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== convert-source-map@^2.0.0: version "2.0.0" @@ -1169,6 +1158,19 @@ cors@~2.8.5: object-assign "^4" vary "^1" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" @@ -1186,32 +1188,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -1224,7 +1200,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1243,11 +1219,6 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -1255,10 +1226,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -1270,16 +1241,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -1323,32 +1294,25 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -1368,9 +1332,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -1384,9 +1348,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -1407,25 +1371,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -1435,7 +1399,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -1449,7 +1413,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -1457,13 +1421,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -1499,37 +1463,16 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -1565,17 +1508,18 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -1617,7 +1561,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -1629,10 +1573,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -1667,10 +1611,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -1704,15 +1648,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -1747,7 +1691,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1799,11 +1743,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -1822,19 +1766,12 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" @@ -1852,28 +1789,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -1930,12 +1850,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -1943,7 +1863,7 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -ioredis@^4.27.0, ioredis@^4.27.1: +ioredis@^4.27.0: version "4.28.5" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== @@ -2015,11 +1935,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2063,11 +1983,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2114,11 +2029,6 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: dependencies: which-typed-array "^1.1.11" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -2142,11 +2052,11 @@ isstream@^0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -2157,6 +2067,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -2183,410 +2104,363 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.6.3" + "@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 "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== - dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -2601,39 +2475,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2677,9 +2518,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -2728,13 +2569,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -2785,7 +2626,7 @@ lodash.isarguments@^3.1.0: resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2907,9 +2748,9 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -2924,9 +2765,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.13, moleculer@^0.14.21: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -2972,9 +2813,9 @@ ms@2.1.3, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -3016,9 +2857,9 @@ negotiator@0.6.3: integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" @@ -3042,10 +2883,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" @@ -3064,20 +2905,15 @@ nuid@^1.1.4: resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -3085,12 +2921,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -3143,6 +2979,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -3177,11 +3020,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -3257,14 +3095,14 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" prettyjson@^1.2.1: version "1.2.5" @@ -3293,10 +3131,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -3306,10 +3144,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" @@ -3325,11 +3163,6 @@ qs@^6.11.0: dependencies: side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -3360,10 +3193,10 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" @@ -3429,11 +3262,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -3446,15 +3274,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -3465,13 +3293,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" @@ -3508,19 +3329,12 @@ safe-regex@^2.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.5.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -3561,6 +3375,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -3596,7 +3420,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -3668,24 +3492,19 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -3735,7 +3554,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3812,7 +3631,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -3826,24 +3645,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -3870,14 +3676,6 @@ tarn@^3.0.2: resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -3892,11 +3690,6 @@ text-decoding@^1.0.0: resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - tildify@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" @@ -3929,23 +3722,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4032,13 +3808,6 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - tz-offset@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tz-offset/-/tz-offset-0.0.1.tgz#fef920257024d3583ed9072a767721a18bdb8a76" @@ -4054,16 +3823,16 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4077,14 +3846,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4108,35 +3869,21 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" vary@^1: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -4148,28 +3895,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -4178,15 +3903,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -4198,13 +3914,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -4230,36 +3946,19 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + signal-exit "^3.0.7" ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest-ssl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" @@ -4280,20 +3979,25 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/services/market/app.js b/services/market/app.js index de5da9e0d..df9ffefdf 100644 --- a/services/market/app.js +++ b/services/market/app.js @@ -14,11 +14,7 @@ * */ const path = require('path'); -const { - Microservice, - LoggerConfig, - Logger, -} = require('lisk-service-framework'); +const { Microservice, LoggerConfig, Logger } = require('lisk-service-framework'); const config = require('./config'); @@ -42,10 +38,15 @@ app.addMethods(path.join(__dirname, 'methods')); app.addJobs(path.join(__dirname, 'jobs')); // Run the application -app.run().then(() => { - logger.info(`Service started ${packageJson.name} with the following pairs: ${config.market.targetPairs}.`); -}).catch(err => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); - logger.fatal(err.stack); - process.exit(1); -}); +app + .run() + .then(() => { + logger.info( + `Service started ${packageJson.name} with the following pairs: ${config.market.targetPairs}.`, + ); + }) + .catch(err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); + logger.fatal(err.stack); + process.exit(1); + }); diff --git a/services/market/config.js b/services/market/config.js index 6aad05b37..e4615f0b9 100644 --- a/services/market/config.js +++ b/services/market/config.js @@ -21,7 +21,7 @@ const config = { }; // Moleculer broker config -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 10; // in seconds // Logging @@ -70,15 +70,18 @@ config.ttl = { /** * External endpoints */ -config.endpoints.redis = process.env.SERVICE_MARKET_REDIS || 'redis://127.0.0.1:6379/6'; +config.endpoints.redis = + process.env.SERVICE_MARKET_REDIS || 'redis://lisk:password@127.0.0.1:6379/6'; /** * Market prices config */ // SERVICE_MARKET_FIAT_CURRENCIES & SERVICE_MARKET_TARGET_PAIRS should be CSV-based strings -config.market.supportedFiatCurrencies = process.env.SERVICE_MARKET_FIAT_CURRENCIES || 'EUR,USD,CHF,GBP,RUB,PLN,JPY,AUD,GBP,INR'; -config.market.targetPairs = process.env.SERVICE_MARKET_TARGET_PAIRS - || 'LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,LSK_PLN,LSK_JPY,LSK_AUD,LSK_GBP,LSK_INR,BTC_EUR,BTC_USD,BTC_CHF'; +config.market.supportedFiatCurrencies = + process.env.SERVICE_MARKET_FIAT_CURRENCIES || 'EUR,USD,CHF,GBP,RUB,PLN,JPY,AUD,GBP,INR'; +config.market.targetPairs = + process.env.SERVICE_MARKET_TARGET_PAIRS || + 'LSK_BTC,LSK_EUR,LSK_USD,LSK_CHF,LSK_PLN,LSK_JPY,LSK_AUD,LSK_GBP,LSK_INR,BTC_EUR,BTC_USD,BTC_CHF'; config.market.sources = { binance: { apiEndpoint: 'https://api.binance.com/api/v3', @@ -101,23 +104,23 @@ config.market.sources = { config.job = { // Interval takes priority over schedule and must be greater than 0 to be valid refreshPricesBinance: { - interval: process.env.JOB_INTERVAL_REFRESH_PRICES_BINANCE || 0, + interval: Number(process.env.JOB_INTERVAL_REFRESH_PRICES_BINANCE) || 0, schedule: process.env.JOB_SCHEDULE_REFRESH_PRICES_BINANCE || '* * * * *', }, refreshPricesBittrex: { - interval: process.env.JOB_INTERVAL_REFRESH_PRICES_BITTREX || 0, + interval: Number(process.env.JOB_INTERVAL_REFRESH_PRICES_BITTREX) || 0, schedule: process.env.JOB_SCHEDULE_REFRESH_PRICES_BITTREX || '* * * * *', }, refreshPricesExchangeratesapi: { - interval: process.env.JOB_INTERVAL_REFRESH_PRICES_EXCHANGERATESAPI || 0, + interval: Number(process.env.JOB_INTERVAL_REFRESH_PRICES_EXCHANGERATESAPI) || 0, schedule: process.env.JOB_SCHEDULE_REFRESH_PRICES_EXCHANGERATESAPI || '* * * * *', }, refreshPricesKraken: { - interval: process.env.JOB_INTERVAL_REFRESH_PRICES_KRAKEN || 0, + interval: Number(process.env.JOB_INTERVAL_REFRESH_PRICES_KRAKEN) || 0, schedule: process.env.JOB_SCHEDULE_REFRESH_PRICES_KRAKEN || '* * * * *', }, updatePrices: { - interval: process.env.JOB_INTERVAL_UPDATE_PRICES || 5, + interval: Number(process.env.JOB_INTERVAL_UPDATE_PRICES) || 5, schedule: process.env.JOB_SCHEDULE_UPDATE_PRICES || '', }, }; diff --git a/services/market/jest.config.functional.js b/services/market/jest.config.functional.js index 4daea4ead..aee49e0d0 100644 --- a/services/market/jest.config.functional.js +++ b/services/market/jest.config.functional.js @@ -9,7 +9,5 @@ module.exports = { testEnvironment: 'node', // The glob patterns Jest uses to detect test files - testMatch: [ - '**/tests/functional/?(*.)+(spec|test).[tj]s?(x)', - ], + testMatch: ['**/tests/functional/?(*.)+(spec|test).[tj]s?(x)'], }; diff --git a/services/market/jest.config.unit.js b/services/market/jest.config.unit.js index 310cc21e2..74f0cf667 100644 --- a/services/market/jest.config.unit.js +++ b/services/market/jest.config.unit.js @@ -9,7 +9,5 @@ module.exports = { testEnvironment: 'node', // The glob patterns Jest uses to detect test files - testMatch: [ - '**/tests/unit/?(*.)+(spec|test).[tj]s?(x)', - ], + testMatch: ['**/tests/unit/?(*.)+(spec|test).[tj]s?(x)'], }; diff --git a/services/market/jobs/binance.js b/services/market/jobs/binance.js index e667e627f..c04d73733 100644 --- a/services/market/jobs/binance.js +++ b/services/market/jobs/binance.js @@ -23,8 +23,8 @@ const { reload } = require('../shared/market/sources/binance'); const logger = Logger(); -const reloadMarketPrices = async () => reload() - .catch(err => { +const reloadMarketPrices = async () => + reload().catch(err => { if (err instanceof ServiceUnavailableException) { logger.warn('Unable to fetch market prices from Binance right now. Will retry later.'); return; @@ -35,15 +35,15 @@ const reloadMarketPrices = async () => reload() module.exports = [ { name: 'prices.retrieve.binance', - description: 'Fetches up-to-date market prices from Binance', + description: 'Fetches up-to-date market prices from Binance.', interval: config.job.refreshPricesBinance.interval, schedule: config.job.refreshPricesBinance.schedule, init: async () => { - logger.debug('Initializing market prices from Binance'); + logger.debug('Initializing market prices from Binance.'); await reloadMarketPrices(); }, controller: async () => { - logger.debug('Job scheduled to update prices from Binance'); + logger.debug('Job scheduled to update prices from Binance.'); await reloadMarketPrices(); }, }, diff --git a/services/market/jobs/bittrex.js b/services/market/jobs/bittrex.js index c4441fdec..0b6278c57 100644 --- a/services/market/jobs/bittrex.js +++ b/services/market/jobs/bittrex.js @@ -23,8 +23,8 @@ const { reload } = require('../shared/market/sources/bittrex'); const logger = Logger(); -const reloadMarketPrices = async () => reload() - .catch(err => { +const reloadMarketPrices = async () => + reload().catch(err => { if (err instanceof ServiceUnavailableException) { logger.warn('Unable to fetch market prices from Bittrex right now. Will retry later.'); return; @@ -39,11 +39,11 @@ module.exports = [ interval: config.job.refreshPricesBittrex.interval, schedule: config.job.refreshPricesBittrex.schedule, init: async () => { - logger.debug('Initializing market prices from Bittrex'); + logger.debug('Initializing market prices from Bittrex.'); await reloadMarketPrices(); }, controller: async () => { - logger.debug('Job scheduled to update prices from Bittrex'); + logger.debug('Job scheduled to update prices from Bittrex.'); await reloadMarketPrices(); }, }, diff --git a/services/market/jobs/exchangeratesapi.js b/services/market/jobs/exchangeratesapi.js index 61a0b4e34..72b8a352d 100644 --- a/services/market/jobs/exchangeratesapi.js +++ b/services/market/jobs/exchangeratesapi.js @@ -25,11 +25,11 @@ module.exports = [ interval: config.job.refreshPricesExchangeratesapi.interval, schedule: config.job.refreshPricesExchangeratesapi.schedule, init: async () => { - logger.debug('Initializing market prices from exchangeratesapi'); + logger.debug('Initializing market prices from exchangeratesapi.'); await reload(); }, controller: async () => { - logger.debug('Job scheduled to update prices from exchangeratesapi'); + logger.debug('Job scheduled to update prices from exchangeratesapi.'); await reload(); }, }, diff --git a/services/market/jobs/kraken.js b/services/market/jobs/kraken.js index 8824e5be7..aa387420b 100644 --- a/services/market/jobs/kraken.js +++ b/services/market/jobs/kraken.js @@ -23,8 +23,8 @@ const { reload } = require('../shared/market/sources/kraken'); const logger = Logger(); -const reloadMarketPrices = async () => reload() - .catch(err => { +const reloadMarketPrices = async () => + reload().catch(err => { if (err instanceof ServiceUnavailableException) { logger.warn('Unable to fetch market prices from Kraken right now. Will retry later.'); return; @@ -39,11 +39,11 @@ module.exports = [ interval: config.job.refreshPricesKraken.interval, schedule: config.job.refreshPricesKraken.schedule, init: async () => { - logger.debug('Initializing market prices from Kraken'); + logger.debug('Initializing market prices from Kraken.'); await reloadMarketPrices(); }, controller: async () => { - logger.debug('Job scheduled to update prices from Kraken'); + logger.debug('Job scheduled to update prices from Kraken.'); await reloadMarketPrices(); }, }, diff --git a/services/market/jobs/pricesUpdate.js b/services/market/jobs/pricesUpdate.js index 0141144fb..a9b172b5a 100644 --- a/services/market/jobs/pricesUpdate.js +++ b/services/market/jobs/pricesUpdate.js @@ -25,11 +25,11 @@ module.exports = [ interval: config.job.updatePrices.interval, schedule: config.job.updatePrices.schedule, init: async () => { - logger.debug('Initializing market prices'); + logger.debug('Initializing market prices.'); await updatePrices(); }, controller: async () => { - logger.debug('Job scheduled to maintain updated market prices'); + logger.debug('Job scheduled to update market prices.'); await updatePrices(); }, }, diff --git a/services/market/methods/market.js b/services/market/methods/market.js index dd8330a51..186eefff0 100644 --- a/services/market/methods/market.js +++ b/services/market/methods/market.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - getMarketPrices, -} = require('./controllers/market'); +const { getMarketPrices } = require('./controllers/market'); module.exports = [ { diff --git a/services/market/package.json b/services/market/package.json index f23c4eb95..edab618fa 100644 --- a/services/market/package.json +++ b/services/market/package.json @@ -1,44 +1,44 @@ { - "name": "lisk-service-market", - "version": "0.7.0-rc.1", - "description": "Lisk Service Market", - "keywords": [ - "lisk", - "blockchain" - ], - "homepage": "https://github.com/LiskHQ/lisk-service", - "repository": { - "type": "git", - "url": "git@github.com:LiskHQ/lisk-service.git" - }, - "bugs": { - "url": "https://github.com/LiskHQ/lisk-service/issues" - }, - "private": true, - "author": "Lisk Foundation , lightcurve GmbH ", - "license": "Apache-2.0", - "main": "app.js", - "engines": { - "node": ">=18.16 <=18", - "npm": ">=8.5.0" - }, - "scripts": { - "start": "node app.js", - "clean": "rm -rf ./node_modules", - "watch": "supervisor -w . -i ./node_modules app.js", - "test:unit": "./node_modules/.bin/jest --config=jest.config.unit.js --detectOpenHandles --forceExit", - "test:functional": "./node_modules/.bin/jest --config=jest.config.functional.js --detectOpenHandles --forceExit" - }, - "dependencies": { - "bluebird": "^3.7.2", - "joi": "^17.4.0", - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz", - "moment": "^2.29.4", - "node-cron": "=2.0.3" - }, - "devDependencies": { - "ioredis": "^4.27.2", - "jest": "^27.3.0", - "moleculer": "^0.14.17" - } + "name": "lisk-service-market", + "version": "0.7.2", + "description": "Lisk Service Market", + "keywords": [ + "lisk", + "blockchain" + ], + "homepage": "https://github.com/LiskHQ/lisk-service", + "repository": { + "type": "git", + "url": "git@github.com:LiskHQ/lisk-service.git" + }, + "bugs": { + "url": "https://github.com/LiskHQ/lisk-service/issues" + }, + "private": true, + "author": "Lisk Foundation , lightcurve GmbH ", + "license": "Apache-2.0", + "main": "app.js", + "engines": { + "node": ">=18.16 <=18", + "npm": ">=8.5.0" + }, + "scripts": { + "start": "node app.js", + "clean": "rm -rf ./node_modules", + "watch": "supervisor -w . -i ./node_modules app.js", + "test:unit": "./node_modules/.bin/jest --config=jest.config.unit.js --detectOpenHandles --forceExit", + "test:functional": "./node_modules/.bin/jest --config=jest.config.functional.js --detectOpenHandles --forceExit" + }, + "dependencies": { + "bluebird": "^3.7.2", + "joi": "^17.4.0", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz", + "moment": "^2.29.4", + "node-cron": "=2.0.3" + }, + "devDependencies": { + "ioredis": "^5.3.2", + "jest": "^29.7.0", + "moleculer": "^0.14.17" + } } diff --git a/services/market/shared/market/priceUpdater.js b/services/market/shared/market/priceUpdater.js index b10718ad5..60e83a8ce 100644 --- a/services/market/shared/market/priceUpdater.js +++ b/services/market/shared/market/priceUpdater.js @@ -47,7 +47,8 @@ const calcTargetPairPrices = (rawPricesBySource, targetPairings = targetPairs) = Object.entries(rawPricesBySource).forEach(([source, prices]) => { // Append source name to the price code and push to sourcePrices array // Eg: LSK_BTC from binance results in binance_LSK_EUR - if (Array.isArray(prices)) prices.forEach(item => sourcePrices.push({ ...item, code: `${source}_${item.code}` })); + if (Array.isArray(prices)) + prices.forEach(item => sourcePrices.push({ ...item, code: `${source}_${item.code}` })); else if (isWarnMessageDisplayed === false) { logger.warn(`Data from '${source}' is unavailable for market price computation.`); isWarnMessageDisplayed = true; @@ -103,15 +104,18 @@ const calcTargetPairPrices = (rawPricesBySource, targetPairings = targetPairs) = return finalPrices; }; -const updatePricesCache = (prices) => BluebirdPromise - .all(targetPairs.map(pair => pricesCache.set(pair, JSON.stringify(prices[pair])))); +const updatePricesCache = prices => + BluebirdPromise.all(targetPairs.map(pair => pricesCache.set(pair, JSON.stringify(prices[pair])))); const updatePrices = async () => { const rawPricesBySource = await getRawPricesBySource(); logger.debug('Raw prices by source: ', util.inspect(rawPricesBySource, false, 3, true)); const targetPairPrices = calcTargetPairPrices(rawPricesBySource); - logger.debug('Final calculated prices by target pairs: ', util.inspect(targetPairPrices, false, 3, true)); + logger.debug( + 'Final calculated prices by target pairs: ', + util.inspect(targetPairPrices, false, 3, true), + ); await updatePricesCache(targetPairPrices); return true; diff --git a/services/market/shared/market/sources/binance.js b/services/market/shared/market/sources/binance.js index 489c4de6d..e5bf63afa 100644 --- a/services/market/shared/market/sources/binance.js +++ b/services/market/shared/market/sources/binance.js @@ -57,13 +57,13 @@ const fetchAllMarketTickers = async () => { throw new ServiceUnavailableException('Data from Binance is currently unavailable'); }; -const filterTickers = (tickers) => { +const filterTickers = tickers => { const allowedMarketSymbols = Object.values(symbolMap); const filteredTickers = tickers.filter(ticker => allowedMarketSymbols.includes(ticker.symbol)); return filteredTickers; }; -const standardizeTickers = (tickers) => { +const standardizeTickers = tickers => { const transformedPrices = Object.entries(symbolMap).map(([k, v]) => { const [currentTicker] = tickers.filter(ticker => ticker.symbol === v); const [from, to] = k.split('_'); @@ -84,7 +84,7 @@ const getFromCache = async () => { // Read individual price item from cache and deserialize const prices = await BluebirdPromise.map( Object.getOwnPropertyNames(symbolMap), - async (itemCode) => { + async itemCode => { const serializedPrice = await binanceCache.get(`binance_${itemCode}`); if (serializedPrice) return JSON.parse(serializedPrice); return null; @@ -103,8 +103,11 @@ const reload = async () => { const transformedPrices = standardizeTickers(filteredTickers); // Serialize individual price item and write to the cache - await BluebirdPromise.all(transformedPrices - .map(item => binanceCache.set(`binance_${item.code}`, JSON.stringify(item), expireMiliseconds))); + await BluebirdPromise.all( + transformedPrices.map(item => + binanceCache.set(`binance_${item.code}`, JSON.stringify(item), expireMiliseconds), + ), + ); } } }; diff --git a/services/market/shared/market/sources/bittrex.js b/services/market/shared/market/sources/bittrex.js index 2abdf1761..fa5371a84 100644 --- a/services/market/shared/market/sources/bittrex.js +++ b/services/market/shared/market/sources/bittrex.js @@ -46,13 +46,13 @@ const fetchAllMarketTickers = async () => { throw new ServiceUnavailableException('Data from Bittrex is currently unavailable'); }; -const filterTickers = (tickers) => { +const filterTickers = tickers => { const allowedMarketSymbols = Object.values(symbolMap); const filteredTickers = tickers.filter(ticker => allowedMarketSymbols.includes(ticker.symbol)); return filteredTickers; }; -const standardizeTickers = (tickers) => { +const standardizeTickers = tickers => { const transformedPrices = Object.entries(symbolMap).map(([k, v]) => { const [currentTicker] = tickers.filter(ticker => ticker.symbol === v); const [from, to] = k.split('_'); @@ -73,7 +73,7 @@ const getFromCache = async () => { // Read individual price item from cache and deserialize const prices = await BluebirdPromise.map( Object.getOwnPropertyNames(symbolMap), - async (itemCode) => { + async itemCode => { const serializedPrice = await bittrexCache.get(`bittrex_${itemCode}`); if (serializedPrice) return JSON.parse(serializedPrice); return null; @@ -92,8 +92,11 @@ const reload = async () => { const transformedPrices = standardizeTickers(filteredTickers); // Serialize individual price item and write to the cache - await BluebirdPromise.all(transformedPrices - .map(item => bittrexCache.set(`bittrex_${item.code}`, JSON.stringify(item), expireMiliseconds))); + await BluebirdPromise.all( + transformedPrices.map(item => + bittrexCache.set(`bittrex_${item.code}`, JSON.stringify(item), expireMiliseconds), + ), + ); } } }; diff --git a/services/market/shared/market/sources/common.js b/services/market/shared/market/sources/common.js index 338a45ab4..bec5ba231 100644 --- a/services/market/shared/market/sources/common.js +++ b/services/market/shared/market/sources/common.js @@ -15,9 +15,10 @@ */ const moment = require('moment'); -const validateEntries = (entries, allowRefreshAfter) => entries === null - || Array.isArray(entries) && entries - .some(entry => entry.updateTimestamp <= moment().subtract(allowRefreshAfter).unix()); +const validateEntries = (entries, allowRefreshAfter) => + entries === null || + (Array.isArray(entries) && + entries.some(entry => entry.updateTimestamp <= moment().subtract(allowRefreshAfter).unix())); module.exports = { validateEntries, diff --git a/services/market/shared/market/sources/exchangeratesapi.js b/services/market/shared/market/sources/exchangeratesapi.js index 2600d0708..78a62d603 100644 --- a/services/market/shared/market/sources/exchangeratesapi.js +++ b/services/market/shared/market/sources/exchangeratesapi.js @@ -36,7 +36,7 @@ const symbolMap = (() => { const map = {}; baseCurrencies.forEach((baseCurrency, index) => { const targetCurrencies = baseCurrencies.slice(index + 1); - targetCurrencies.forEach((targetCurrency) => { + targetCurrencies.forEach(targetCurrency => { map[`${baseCurrency}_${targetCurrency}`] = `${baseCurrency}${targetCurrency}`; }); }); @@ -47,9 +47,13 @@ const fetchAllCurrencyConversionRates = async () => { try { const allMarketConversionRates = {}; await BluebirdPromise.all( - baseCurrencies.map(async (baseCurrency) => { + baseCurrencies.map(async baseCurrency => { const remainingCurrencies = baseCurrencies.filter(c => c !== baseCurrency); - const response = await requestLib(`${apiEndpoint}/latest?access_key=${accessKey}&base=${baseCurrency}&symbols=${remainingCurrencies.join(',')}`); + const response = await requestLib( + `${apiEndpoint}/latest?access_key=${accessKey}&base=${baseCurrency}&symbols=${remainingCurrencies.join( + ',', + )}`, + ); if (response) allMarketConversionRates[baseCurrency] = response.data.rates; }), ); @@ -61,24 +65,28 @@ const fetchAllCurrencyConversionRates = async () => { } }; -const standardizeCurrencyConversionRates = (rawConversionRates) => { - const [transformedConversionRates] = Object.entries(rawConversionRates).map( - ([baseCur, conversionRates]) => Object.getOwnPropertyNames(conversionRates) - .map(targetCur => ({ symbol: `${baseCur}_${targetCur}`, price: conversionRates[targetCur] })), - ); - const standardizedConversionRates = (Array.isArray(transformedConversionRates)) +const standardizeCurrencyConversionRates = rawConversionRates => { + const [transformedConversionRates] = Object.entries(rawConversionRates) + .filter(([, conversionRates]) => !!conversionRates) + .map(([baseCur, conversionRates]) => + Object.getOwnPropertyNames(conversionRates).map(targetCur => ({ + symbol: `${baseCur}_${targetCur}`, + price: conversionRates[targetCur], + })), + ); + const standardizedConversionRates = Array.isArray(transformedConversionRates) ? transformedConversionRates.map(conversionRate => { - const [from, to] = conversionRate.symbol.split('_'); - const price = { - code: conversionRate.symbol, - from, - to, - rate: conversionRate.price, - updateTimestamp: Math.floor(Date.now() / 1000), - sources: ['exchangeratesapi'], - }; - return price; - }) + const [from, to] = conversionRate.symbol.split('_'); + const price = { + code: conversionRate.symbol, + from, + to, + rate: conversionRate.price, + updateTimestamp: Math.floor(Date.now() / 1000), + sources: ['exchangeratesapi'], + }; + return price; + }) : []; return standardizedConversionRates; }; @@ -87,7 +95,7 @@ const getFromCache = async () => { // Read individual price item from cache and deserialize const conversionRates = await BluebirdPromise.map( Object.getOwnPropertyNames(symbolMap), - async (itemCode) => { + async itemCode => { const serializedPrice = await exchangeratesapiCache.get(`exchangeratesapi_${itemCode}`); if (serializedPrice) return JSON.parse(serializedPrice); return null; @@ -106,15 +114,22 @@ const reload = async () => { // Check if prices exists in cache if ( - conversionRatesFromCache.length === 0 - || validateEntries(conversionRatesFromCache, allowRefreshAfter) + conversionRatesFromCache.length === 0 || + validateEntries(conversionRatesFromCache, allowRefreshAfter) ) { const currencyConversionRates = await fetchAllCurrencyConversionRates(); const transformedRates = standardizeCurrencyConversionRates(currencyConversionRates); // Serialize individual price item and write to the cache - await BluebirdPromise.all(transformedRates - .map(item => exchangeratesapiCache.set(`exchangeratesapi_${item.code}`, JSON.stringify(item), expireMilliseconds))); + await BluebirdPromise.all( + transformedRates.map(item => + exchangeratesapiCache.set( + `exchangeratesapi_${item.code}`, + JSON.stringify(item), + expireMilliseconds, + ), + ), + ); } }; diff --git a/services/market/shared/market/sources/kraken.js b/services/market/shared/market/sources/kraken.js index 1c849dbf8..712864c14 100644 --- a/services/market/shared/market/sources/kraken.js +++ b/services/market/shared/market/sources/kraken.js @@ -47,7 +47,7 @@ const fetchAllMarketTickers = async () => { throw new ServiceUnavailableException('Data from Kraken is currently unavailable'); }; -const standardizeTickers = (tickers) => { +const standardizeTickers = tickers => { const transformedPrices = Object.entries(symbolMap).map(([k, v]) => { if (v === symbolMap.LSK_BTC) v = 'LSKXBT'; // Kraken API returns LSKBTC as LSKXBT const currentTicker = tickers[v]; @@ -69,7 +69,7 @@ const getFromCache = async () => { // Read individual price item from cache and deserialize const prices = await BluebirdPromise.map( Object.getOwnPropertyNames(symbolMap), - async (itemCode) => { + async itemCode => { const serializedPrice = await krakenCache.get(`kraken_${itemCode}`); if (serializedPrice) return JSON.parse(serializedPrice); return null; @@ -87,8 +87,11 @@ const reload = async () => { const transformedPrices = standardizeTickers(tickers); // Serialize individual price item and write to the cache - await BluebirdPromise.all(transformedPrices - .map(item => krakenCache.set(`kraken_${item.code}`, JSON.stringify(item), expireMiliseconds))); + await BluebirdPromise.all( + transformedPrices.map(item => + krakenCache.set(`kraken_${item.code}`, JSON.stringify(item), expireMiliseconds), + ), + ); } } }; diff --git a/services/market/shared/market/status.js b/services/market/shared/market/status.js index cfa606b03..e637b1d00 100644 --- a/services/market/shared/market/status.js +++ b/services/market/shared/market/status.js @@ -1,18 +1,18 @@ /* -* LiskHQ/lisk-service -* Copyright © 2023 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const packageJson = require('../../package.json'); const { getMarketPrices } = require('./market'); diff --git a/services/market/shared/utils/priceUpdater.js b/services/market/shared/utils/priceUpdater.js index 8b58eafb3..9d5ed1d6c 100644 --- a/services/market/shared/utils/priceUpdater.js +++ b/services/market/shared/utils/priceUpdater.js @@ -17,11 +17,12 @@ const config = require('../../config'); const supportedFiatCurrencies = config.market.supportedFiatCurrencies.split(','); -const formatCalculatedRate = (targetCurrency, rate) => String( - supportedFiatCurrencies.includes(targetCurrency) - ? Number(rate).toFixed(4) // To fiat - 4 significant digits - : Number(rate).toFixed(8), // To crypto - 8 significant digits -); +const formatCalculatedRate = (targetCurrency, rate) => + String( + supportedFiatCurrencies.includes(targetCurrency) + ? Number(rate).toFixed(4) // To fiat - 4 significant digits + : Number(rate).toFixed(8), // To crypto - 8 significant digits + ); module.exports = { formatCalculatedRate, diff --git a/services/market/tests/functional/market.prices.test.js b/services/market/tests/functional/market.prices.test.js index dbf7a3ce0..f8713ba28 100644 --- a/services/market/tests/functional/market.prices.test.js +++ b/services/market/tests/functional/market.prices.test.js @@ -26,7 +26,7 @@ const broker = new ServiceBroker({ logger: console, }); -xdescribe('Test market prices', () => { +describe('Test market prices', () => { beforeAll(() => broker.start()); afterAll(() => broker.stop()); diff --git a/services/market/tests/functional/priceUpdater.test.js b/services/market/tests/functional/priceUpdater.test.js index 059402820..83e9c8034 100644 --- a/services/market/tests/functional/priceUpdater.test.js +++ b/services/market/tests/functional/priceUpdater.test.js @@ -13,9 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - calcTargetPairPrices, -} = require('../../shared/market/priceUpdater'); +const { calcTargetPairPrices } = require('../../shared/market/priceUpdater'); const { marketPriceItemSchema } = require('../schemas/marketPriceItem.schema'); describe('Market prices calculation', () => { @@ -23,12 +21,40 @@ describe('Market prices calculation', () => { const targetPairs = ['LSK_BTC', 'LSK_EUR', 'BTC_EUR', 'BTC_USD']; const rawPricesBySource = { cryptoExchange1: [ - { code: 'LSK_BTC', from: 'LSK', to: 'BTC', rate: '0.000095', updateTimestamp: 1622414485, sources: ['cx1'] }, - { code: 'BTC_EUR', from: 'BTC', to: 'EUR', rate: '28500', updateTimestamp: 1622414485, sources: ['cx1'] }, + { + code: 'LSK_BTC', + from: 'LSK', + to: 'BTC', + rate: '0.000095', + updateTimestamp: 1622414485, + sources: ['cx1'], + }, + { + code: 'BTC_EUR', + from: 'BTC', + to: 'EUR', + rate: '28500', + updateTimestamp: 1622414485, + sources: ['cx1'], + }, ], cryptoExchange2: [ - { code: 'BTC_USD', from: 'BTC', to: 'USD', rate: '35000', updateTimestamp: 1622414485, sources: ['cx2'] }, - { code: 'LSK_EUR', from: 'LSK', to: 'BTC', rate: '2.75', updateTimestamp: 1622414485, sources: ['cx2'] }, + { + code: 'BTC_USD', + from: 'BTC', + to: 'USD', + rate: '35000', + updateTimestamp: 1622414485, + sources: ['cx2'], + }, + { + code: 'LSK_EUR', + from: 'LSK', + to: 'BTC', + rate: '2.75', + updateTimestamp: 1622414485, + sources: ['cx2'], + }, ], }; @@ -42,19 +68,47 @@ describe('Market prices calculation', () => { // Deep compare the results expect(targetPairPrices.LSK_BTC).toEqual([ - { code: 'LSK_BTC', from: 'LSK', to: 'BTC', rate: '0.00009500', updateTimestamp: 1622414485, sources: ['cx1'] }, + { + code: 'LSK_BTC', + from: 'LSK', + to: 'BTC', + rate: '0.00009500', + updateTimestamp: 1622414485, + sources: ['cx1'], + }, ]); expect(targetPairPrices.LSK_EUR).toEqual([ - { code: 'LSK_EUR', from: 'LSK', to: 'BTC', rate: '2.7500', updateTimestamp: 1622414485, sources: ['cx2'] }, + { + code: 'LSK_EUR', + from: 'LSK', + to: 'BTC', + rate: '2.7500', + updateTimestamp: 1622414485, + sources: ['cx2'], + }, ]); expect(targetPairPrices.BTC_EUR).toEqual([ - { code: 'BTC_EUR', from: 'BTC', to: 'EUR', rate: '28500.0000', updateTimestamp: 1622414485, sources: ['cx1'] }, + { + code: 'BTC_EUR', + from: 'BTC', + to: 'EUR', + rate: '28500.0000', + updateTimestamp: 1622414485, + sources: ['cx1'], + }, ]); expect(targetPairPrices.BTC_USD).toEqual([ - { code: 'BTC_USD', from: 'BTC', to: 'USD', rate: '35000.0000', updateTimestamp: 1622414485, sources: ['cx2'] }, + { + code: 'BTC_USD', + from: 'BTC', + to: 'USD', + rate: '35000.0000', + updateTimestamp: 1622414485, + sources: ['cx2'], + }, ]); }); @@ -62,14 +116,42 @@ describe('Market prices calculation', () => { const targetPairs = ['LSK_CHF', 'BTC_CHF']; const rawPricesBySource = { cryptoExchange1: [ - { code: 'BTC_EUR', from: 'BTC', to: 'EUR', rate: '28500', updateTimestamp: 1622414485, sources: ['cx1'] }, + { + code: 'BTC_EUR', + from: 'BTC', + to: 'EUR', + rate: '28500', + updateTimestamp: 1622414485, + sources: ['cx1'], + }, ], cryptoExchange2: [ - { code: 'LSK_EUR', from: 'LSK', to: 'BTC', rate: '2.75', updateTimestamp: 1622414485, sources: ['cx2'] }, + { + code: 'LSK_EUR', + from: 'LSK', + to: 'BTC', + rate: '2.75', + updateTimestamp: 1622414485, + sources: ['cx2'], + }, ], fiatExchange1: [ - { code: 'EUR_CHF', from: 'EUR', to: 'CHF', rate: '1.10', updateTimestamp: 1622414485, sources: ['fx1'] }, - { code: 'EUR_USD', from: 'EUR', to: 'USD', rate: '1.22', updateTimestamp: 1622414485, sources: ['fx1'] }, + { + code: 'EUR_CHF', + from: 'EUR', + to: 'CHF', + rate: '1.10', + updateTimestamp: 1622414485, + sources: ['fx1'], + }, + { + code: 'EUR_USD', + from: 'EUR', + to: 'USD', + rate: '1.22', + updateTimestamp: 1622414485, + sources: ['fx1'], + }, ], }; @@ -83,28 +165,92 @@ describe('Market prices calculation', () => { // Deep compare the results expect(targetPairPrices.LSK_CHF).toEqual([ - { code: 'LSK_CHF', from: 'LSK', to: 'CHF', rate: '3.0250', updateTimestamp: 1622414485, sources: ['cx2', 'fx1'] }, + { + code: 'LSK_CHF', + from: 'LSK', + to: 'CHF', + rate: '3.0250', + updateTimestamp: 1622414485, + sources: ['cx2', 'fx1'], + }, ]); expect(targetPairPrices.BTC_CHF).toEqual([ - { code: 'BTC_CHF', from: 'BTC', to: 'CHF', rate: '31350.0000', updateTimestamp: 1622414485, sources: ['cx1', 'fx1'] }, + { + code: 'BTC_CHF', + from: 'BTC', + to: 'CHF', + rate: '31350.0000', + updateTimestamp: 1622414485, + sources: ['cx1', 'fx1'], + }, ]); }); it('Target prices are a mixed bag', async () => { - const targetPairs = ['LSK_BTC', 'LSK_EUR', 'LSK_USD', 'LSK_CHF', 'BTC_EUR', 'BTC_USD', 'BTC_CHF']; + const targetPairs = [ + 'LSK_BTC', + 'LSK_EUR', + 'LSK_USD', + 'LSK_CHF', + 'BTC_EUR', + 'BTC_USD', + 'BTC_CHF', + ]; const rawPricesBySource = { cryptoExchange1: [ - { code: 'LSK_BTC', from: 'LSK', to: 'BTC', rate: '0.000095', updateTimestamp: 1622414485, sources: ['cx1'] }, - { code: 'BTC_EUR', from: 'BTC', to: 'EUR', rate: '28500', updateTimestamp: 1622414485, sources: ['cx1'] }, + { + code: 'LSK_BTC', + from: 'LSK', + to: 'BTC', + rate: '0.000095', + updateTimestamp: 1622414485, + sources: ['cx1'], + }, + { + code: 'BTC_EUR', + from: 'BTC', + to: 'EUR', + rate: '28500', + updateTimestamp: 1622414485, + sources: ['cx1'], + }, ], cryptoExchange2: [ - { code: 'BTC_USD', from: 'BTC', to: 'USD', rate: '35000', updateTimestamp: 1622414485, sources: ['cx2'] }, - { code: 'LSK_EUR', from: 'LSK', to: 'BTC', rate: '2.75', updateTimestamp: 1622414485, sources: ['cx2'] }, + { + code: 'BTC_USD', + from: 'BTC', + to: 'USD', + rate: '35000', + updateTimestamp: 1622414485, + sources: ['cx2'], + }, + { + code: 'LSK_EUR', + from: 'LSK', + to: 'BTC', + rate: '2.75', + updateTimestamp: 1622414485, + sources: ['cx2'], + }, ], fiatExchange1: [ - { code: 'EUR_CHF', from: 'EUR', to: 'CHF', rate: '1.10', updateTimestamp: 1622414485, sources: ['fx1'] }, - { code: 'EUR_USD', from: 'EUR', to: 'USD', rate: '1.22', updateTimestamp: 1622414485, sources: ['fx1'] }, + { + code: 'EUR_CHF', + from: 'EUR', + to: 'CHF', + rate: '1.10', + updateTimestamp: 1622414485, + sources: ['fx1'], + }, + { + code: 'EUR_USD', + from: 'EUR', + to: 'USD', + rate: '1.22', + updateTimestamp: 1622414485, + sources: ['fx1'], + }, ], }; @@ -118,33 +264,96 @@ describe('Market prices calculation', () => { // Deep compare the results expect(targetPairPrices.LSK_BTC).toEqual([ - { code: 'LSK_BTC', from: 'LSK', to: 'BTC', rate: '0.00009500', updateTimestamp: 1622414485, sources: ['cx1'] }, + { + code: 'LSK_BTC', + from: 'LSK', + to: 'BTC', + rate: '0.00009500', + updateTimestamp: 1622414485, + sources: ['cx1'], + }, ]); expect(targetPairPrices.LSK_EUR).toEqual([ - { code: 'LSK_EUR', from: 'LSK', to: 'BTC', rate: '2.7500', updateTimestamp: 1622414485, sources: ['cx2'] }, + { + code: 'LSK_EUR', + from: 'LSK', + to: 'BTC', + rate: '2.7500', + updateTimestamp: 1622414485, + sources: ['cx2'], + }, ]); expect(targetPairPrices.LSK_USD).toEqual([ - { code: 'LSK_USD', from: 'LSK', to: 'USD', rate: '3.3250', updateTimestamp: 1622414485, sources: ['cx1', 'cx2'] }, - { code: 'LSK_USD', from: 'LSK', to: 'USD', rate: '3.3550', updateTimestamp: 1622414485, sources: ['cx2', 'fx1'] }, + { + code: 'LSK_USD', + from: 'LSK', + to: 'USD', + rate: '3.3250', + updateTimestamp: 1622414485, + sources: ['cx1', 'cx2'], + }, + { + code: 'LSK_USD', + from: 'LSK', + to: 'USD', + rate: '3.3550', + updateTimestamp: 1622414485, + sources: ['cx2', 'fx1'], + }, ]); expect(targetPairPrices.LSK_CHF).toEqual([ - { code: 'LSK_CHF', from: 'LSK', to: 'CHF', rate: '3.0250', updateTimestamp: 1622414485, sources: ['cx2', 'fx1'] }, + { + code: 'LSK_CHF', + from: 'LSK', + to: 'CHF', + rate: '3.0250', + updateTimestamp: 1622414485, + sources: ['cx2', 'fx1'], + }, ]); expect(targetPairPrices.BTC_EUR).toEqual([ - { code: 'BTC_EUR', from: 'BTC', to: 'EUR', rate: '28500.0000', updateTimestamp: 1622414485, sources: ['cx1'] }, + { + code: 'BTC_EUR', + from: 'BTC', + to: 'EUR', + rate: '28500.0000', + updateTimestamp: 1622414485, + sources: ['cx1'], + }, ]); expect(targetPairPrices.BTC_USD).toEqual([ - { code: 'BTC_USD', from: 'BTC', to: 'USD', rate: '35000.0000', updateTimestamp: 1622414485, sources: ['cx2'] }, - { code: 'BTC_USD', from: 'BTC', to: 'USD', rate: '34770.0000', updateTimestamp: 1622414485, sources: ['cx1', 'fx1'] }, + { + code: 'BTC_USD', + from: 'BTC', + to: 'USD', + rate: '35000.0000', + updateTimestamp: 1622414485, + sources: ['cx2'], + }, + { + code: 'BTC_USD', + from: 'BTC', + to: 'USD', + rate: '34770.0000', + updateTimestamp: 1622414485, + sources: ['cx1', 'fx1'], + }, ]); expect(targetPairPrices.BTC_CHF).toEqual([ - { code: 'BTC_CHF', from: 'BTC', to: 'CHF', rate: '31350.0000', updateTimestamp: 1622414485, sources: ['cx1', 'fx1'] }, + { + code: 'BTC_CHF', + from: 'BTC', + to: 'CHF', + rate: '31350.0000', + updateTimestamp: 1622414485, + sources: ['cx1', 'fx1'], + }, ]); }); }); diff --git a/services/market/tests/schemas/marketPriceItem.schema.js b/services/market/tests/schemas/marketPriceItem.schema.js index 00fc15865..9ed627160 100644 --- a/services/market/tests/schemas/marketPriceItem.schema.js +++ b/services/market/tests/schemas/marketPriceItem.schema.js @@ -16,9 +16,15 @@ const Joi = require('joi'); const marketPriceItemSchema = { - code: Joi.string().pattern(/^[A-Z]{3,4}_[A-Z]{3,4}$/).required(), - from: Joi.string().pattern(/^[A-Z]{3,4}$/).required(), - to: Joi.string().pattern(/^[A-Z]{3,4}$/).required(), + code: Joi.string() + .pattern(/^[A-Z]{3,4}_[A-Z]{3,4}$/) + .required(), + from: Joi.string() + .pattern(/^[A-Z]{3,4}$/) + .required(), + to: Joi.string() + .pattern(/^[A-Z]{3,4}$/) + .required(), rate: Joi.string().required(), updateTimestamp: Joi.number().integer().positive().required(), sources: Joi.array().items(Joi.string().required()).required(), diff --git a/services/market/tests/schemas/serviceUnavailable.schema.js b/services/market/tests/schemas/serviceUnavailable.schema.js index 00f8a52b6..952aa2fd0 100644 --- a/services/market/tests/schemas/serviceUnavailable.schema.js +++ b/services/market/tests/schemas/serviceUnavailable.schema.js @@ -17,9 +17,11 @@ const Joi = require('joi'); const serviceUnavailableSchema = { status: Joi.string().valid('SERVICE_UNAVAILABLE').required(), - data: Joi.object().keys({ - error: Joi.string().valid('Service is not ready yet').required(), - }).required(), + data: Joi.object() + .keys({ + error: Joi.string().valid('Service is not ready yet').required(), + }) + .required(), }; module.exports = { diff --git a/services/market/tests/unit/priceUpdater.test.js b/services/market/tests/unit/priceUpdater.test.js index 61f191c18..68731534c 100644 --- a/services/market/tests/unit/priceUpdater.test.js +++ b/services/market/tests/unit/priceUpdater.test.js @@ -17,11 +17,32 @@ const { formatCalculatedRate } = require('../../shared/utils/priceUpdater'); describe('Format rates', () => { const rates = [ - 0, 1, 1234, 123456, 12345678, 1234567890, - 0.1, 0.1234, 0.123456, 0.12345678, 0.123456789, - 99.1, 99.1234, 99.123456, 99.12345678, 99.123456789, - '0.1', '0.1234', '0.123456', '0.12345678', '0.123456789', - '99.1', '99.1234', '99.123456', '99.12345678', '99.123456789', + 0, + 1, + 1234, + 123456, + 12345678, + 1234567890, + 0.1, + 0.1234, + 0.123456, + 0.12345678, + 0.123456789, + 99.1, + 99.1234, + 99.123456, + 99.12345678, + 99.123456789, + '0.1', + '0.1234', + '0.123456', + '0.12345678', + '0.123456789', + '99.1', + '99.1234', + '99.123456', + '99.12345678', + '99.123456789', ]; const fiatCurrencies = ['EUR', 'USD', 'CHF', 'GBP', 'RUB']; const cryptoCurrencies = ['LSK', 'BTC', 'ETH']; diff --git a/services/market/yarn.lock b/services/market/yarn.lock index f61ad61bb..96f38f4de 100644 --- a/services/market/yarn.lock +++ b/services/market/yarn.lock @@ -10,58 +10,58 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" @@ -92,10 +92,10 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -122,43 +122,43 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -195,6 +195,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -245,9 +252,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -260,28 +267,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -330,173 +337,196 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^16.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": @@ -523,18 +553,18 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" @@ -561,34 +591,34 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -597,24 +627,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" @@ -624,70 +654,62 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== - -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== -"@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -696,36 +718,6 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -824,23 +816,24 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -856,14 +849,14 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: @@ -884,12 +877,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^27.5.1" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -908,9 +901,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -969,19 +962,14 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: @@ -1025,13 +1013,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1053,10 +1042,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -1086,22 +1075,22 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: @@ -1175,10 +1164,10 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== convert-source-map@^2.0.0: version "2.0.0" @@ -1198,6 +1187,19 @@ cors@~2.8.5: object-assign "^4" vary "^1" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" @@ -1215,32 +1217,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -1253,7 +1229,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1272,11 +1248,6 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -1284,10 +1255,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -1299,16 +1270,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -1352,32 +1323,25 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -1397,9 +1361,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -1413,9 +1377,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -1436,25 +1400,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -1464,7 +1428,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -1478,7 +1442,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -1486,13 +1450,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -1528,37 +1492,16 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -1594,17 +1537,18 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -1646,7 +1590,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -1658,10 +1602,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -1696,10 +1640,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -1733,15 +1677,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -1776,7 +1720,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1828,11 +1772,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -1851,19 +1795,12 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" @@ -1881,28 +1818,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -1959,12 +1879,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -1972,7 +1892,7 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -ioredis@^4.27.0, ioredis@^4.27.2: +ioredis@^4.27.0: version "4.28.5" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== @@ -2044,11 +1964,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2092,11 +2012,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2143,11 +2058,6 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: dependencies: which-typed-array "^1.1.11" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -2171,11 +2081,11 @@ isstream@^0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -2186,6 +2096,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -2212,415 +2133,368 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.6.3" + "@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 "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" joi@^17.4.0: - version "17.10.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.2.tgz#4ecc348aa89ede0b48335aad172e0f5591e55b29" - integrity sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA== + version "17.11.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a" + integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -2641,39 +2515,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2717,9 +2558,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -2768,13 +2609,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -2825,7 +2666,7 @@ lodash.isarguments@^3.1.0: resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2947,9 +2788,9 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -2964,9 +2805,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.17, moleculer@^0.14.21: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -3012,9 +2853,9 @@ ms@2.1.3, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -3056,9 +2897,9 @@ negotiator@0.6.3: integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" @@ -3082,10 +2923,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" @@ -3104,20 +2945,15 @@ nuid@^1.1.4: resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -3125,12 +2961,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -3183,6 +3019,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -3217,11 +3060,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -3297,14 +3135,14 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" prettyjson@^1.2.1: version "1.2.5" @@ -3333,10 +3171,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -3346,10 +3184,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" @@ -3365,11 +3203,6 @@ qs@^6.11.0: dependencies: side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -3395,10 +3228,10 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" @@ -3459,11 +3292,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -3476,15 +3304,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -3495,13 +3323,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" @@ -3531,19 +3352,12 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.5.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -3584,6 +3398,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -3619,7 +3443,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -3691,24 +3515,19 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -3758,7 +3577,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3835,7 +3654,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -3849,24 +3668,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -3893,14 +3699,6 @@ tarn@^3.0.2: resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -3915,11 +3713,6 @@ text-decoding@^1.0.0: resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - tildify@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" @@ -3952,23 +3745,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4055,13 +3831,6 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - tz-offset@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tz-offset/-/tz-offset-0.0.1.tgz#fef920257024d3583ed9072a767721a18bdb8a76" @@ -4077,16 +3846,16 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4100,14 +3869,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4131,35 +3892,21 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" vary@^1: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -4171,28 +3918,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -4201,15 +3926,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -4221,13 +3937,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -4253,36 +3969,19 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + signal-exit "^3.0.7" ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest-ssl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" @@ -4303,20 +4002,25 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/services/template/app.js b/services/template/app.js index ff2fff034..fe6313528 100644 --- a/services/template/app.js +++ b/services/template/app.js @@ -14,11 +14,7 @@ * */ const path = require('path'); -const { - Microservice, - LoggerConfig, - Logger, -} = require('lisk-service-framework'); +const { Microservice, LoggerConfig, Logger } = require('lisk-service-framework'); const config = require('./config'); @@ -43,10 +39,13 @@ app.addEvents(path.join(__dirname, 'events')); app.addJobs(path.join(__dirname, 'jobs')); // Run the application -app.run().then(() => { - logger.info(`Service started ${packageJson.name}.`); -}).catch(err => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); - logger.fatal(err.stack); - process.exit(1); -}); +app + .run() + .then(() => { + logger.info(`Service started ${packageJson.name}.`); + }) + .catch(err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); + logger.fatal(err.stack); + process.exit(1); + }); diff --git a/services/template/config.js b/services/template/config.js index 43fa52dd2..d0d00f28d 100644 --- a/services/template/config.js +++ b/services/template/config.js @@ -18,7 +18,7 @@ const packageJson = require('./package.json'); const config = {}; // Moleculer broker config -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 5; // in seconds // Logging diff --git a/services/template/jobs/job.js b/services/template/jobs/job.js index c5d206203..007b4447d 100644 --- a/services/template/jobs/job.js +++ b/services/template/jobs/job.js @@ -21,8 +21,8 @@ module.exports = [ description: 'Generic job template', schedule: '* * * * *', // Every 1 min controller: () => { - const operationResult = (() => ([1, 2, 3, 4, 5]))(); - logger.info(`Dummy job is done, processed ${operationResult.length} items`); + const operationResult = (() => [1, 2, 3, 4, 5])(); + logger.info(`Dummy job is done, processed ${operationResult.length} items.`); }, }, ]; diff --git a/services/template/methods/hello.js b/services/template/methods/hello.js index c1593d0be..4bbce5287 100644 --- a/services/template/methods/hello.js +++ b/services/template/methods/hello.js @@ -19,9 +19,11 @@ module.exports = [ description: 'Generic hello function', controller: async () => { const response = { - data: [{ - message: 'Hello World!', - }], + data: [ + { + message: 'Hello World!', + }, + ], meta: { count: 1, }, @@ -37,10 +39,12 @@ module.exports = [ }, controller: async param => { const response = { - data: [{ - message: 'Hello World!', - name: param.name, - }], + data: [ + { + message: 'Hello World!', + name: param.name, + }, + ], meta: { count: 1, }, @@ -52,14 +56,15 @@ module.exports = [ name: 'asynchronous.hello', description: 'Hello function with asynchronous operations', controller: () => { - const request = () => new Promise(resolve => { - setTimeout(() => { - resolve({ - data: ['one', 'two', 'three'], - meta: { count: 3 }, - }); - }, 500); - }); + const request = () => + new Promise(resolve => { + setTimeout(() => { + resolve({ + data: ['one', 'two', 'three'], + meta: { count: 3 }, + }); + }, 500); + }); return request(); }, }, diff --git a/services/template/package.json b/services/template/package.json index f7792b6b3..f694c9136 100644 --- a/services/template/package.json +++ b/services/template/package.json @@ -1,36 +1,35 @@ { - "name": "lisk-service-template-moleculer", - "version": "0.7.0-rc.1", - "description": "Lisk Service Template", - "keywords": [ - "lisk", - "blockchain" - ], - "homepage": "https://github.com/LiskHQ/lisk-service", - "repository": { - "type": "git", - "url": "git@github.com:LiskHQ/lisk-service.git" - }, - "bugs": { - "url": "https://github.com/LiskHQ/lisk-service/issues" - }, - "private": true, - "author": "Lisk Foundation , lightcurve GmbH ", - "license": "Apache-2.0", - "main": "app.js", - "engines": { - "node": ">=18.16 <=18", - "npm": ">=8.5.0" - }, - "scripts": { - "start": "node app.js", - "eslint": "eslint . --ext .js", - "eslint-fix": "eslint . --fix --ext .js", - "clean": "rm -rf ./node_modules", - "watch": "supervisor -w . -i ./node_modules app.js" - }, - "dependencies": { - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz", - "node-cron": "=2.0.3" - } + "name": "lisk-service-template-moleculer", + "version": "0.7.2", + "description": "Lisk Service Template", + "keywords": [ + "lisk", + "blockchain" + ], + "homepage": "https://github.com/LiskHQ/lisk-service", + "repository": { + "type": "git", + "url": "git@github.com:LiskHQ/lisk-service.git" + }, + "bugs": { + "url": "https://github.com/LiskHQ/lisk-service/issues" + }, + "private": true, + "author": "Lisk Foundation , lightcurve GmbH ", + "license": "Apache-2.0", + "main": "app.js", + "engines": { + "node": ">=18.16 <=18", + "npm": ">=8.5.0" + }, + "scripts": { + "start": "node app.js", + "clean": "rm -rf ./node_modules", + "watch": "supervisor -w . -i ./node_modules app.js" + }, + "dependencies": { + "ioredis": "^5.3.2", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz", + "node-cron": "=2.0.3" + } } diff --git a/services/template/shared/status.js b/services/template/shared/status.js index 77dbed727..e9ddef557 100644 --- a/services/template/shared/status.js +++ b/services/template/shared/status.js @@ -1,18 +1,18 @@ /* -* LiskHQ/lisk-service -* Copyright © 2023 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const packageJson = require('../package.json'); const status = { diff --git a/services/template/yarn.lock b/services/template/yarn.lock index 75664f1a8..0462a0e15 100644 --- a/services/template/yarn.lock +++ b/services/template/yarn.lock @@ -15,9 +15,9 @@ integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" @@ -38,16 +38,18 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" accepts@~1.3.4: version "1.3.8" @@ -106,17 +108,24 @@ arraybuffer.prototype.slice@^1.0.2: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" balanced-match@^1.0.0: version "1.0.2" @@ -134,9 +143,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -212,13 +221,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" camelcase@5.0.0: version "5.0.0" @@ -266,6 +276,13 @@ colors@1.4.0: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" @@ -345,16 +362,16 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -363,6 +380,11 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, de has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + denque@^1.1.0: version "1.5.1" resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" @@ -406,9 +428,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -422,9 +444,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -438,25 +460,25 @@ engine.io@~6.5.2: ws "~8.11.0" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -466,7 +488,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -480,7 +502,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -488,13 +510,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -560,7 +582,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -572,6 +594,15 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + fresh@0.5.2, fresh@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -596,10 +627,10 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -623,15 +654,15 @@ generate-function@^2.3.1: dependencies: is-property "^1.0.2" -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -703,11 +734,11 @@ has-flag@^3.0.0: integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -726,12 +757,12 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" http-errors@2.0.0: version "2.0.0" @@ -787,12 +818,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -867,11 +898,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -986,9 +1017,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -1022,13 +1053,13 @@ leven@2.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -1120,7 +1151,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -1155,9 +1186,9 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -1172,9 +1203,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.21: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -1220,9 +1251,9 @@ ms@2.1.3, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -1259,9 +1290,9 @@ negotiator@0.6.3: integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" @@ -1290,10 +1321,10 @@ object-assign@^4: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -1301,12 +1332,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -1419,6 +1450,11 @@ promise.prototype.finally@^3.1.2: get-intrinsic "^1.2.1" set-function-name "^2.0.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -1526,9 +1562,9 @@ resolve-from@^5.0.0: integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -1609,6 +1645,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -1906,6 +1952,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -1968,13 +2019,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" diff --git a/services/transaction-statistics/app.js b/services/transaction-statistics/app.js index fd4389b29..d70ba18c2 100644 --- a/services/transaction-statistics/app.js +++ b/services/transaction-statistics/app.js @@ -14,12 +14,7 @@ * */ const path = require('path'); -const { - Microservice, - Logger, - LoggerConfig, - Signals, -} = require('lisk-service-framework'); +const { Microservice, Logger, LoggerConfig, Signals } = require('lisk-service-framework'); const config = require('./config'); const packageJson = require('./package.json'); @@ -37,12 +32,9 @@ const app = Microservice({ brokerTimeout: config.brokerTimeout, // in seconds logger: config.log, events: { - 'index.ready': (payload) => Signals.get('blockIndexReady').dispatch(payload), + 'index.ready': payload => Signals.get('blockIndexReady').dispatch(payload), }, - dependencies: [ - 'indexer', - 'connector', - ], + dependencies: ['indexer', 'connector'], }); setAppContext(app); @@ -52,15 +44,19 @@ app.addMethods(path.join(__dirname, 'methods')); app.addJobs(path.join(__dirname, 'jobs')); // Run the application -const reportErrorAndExitProcess = (err) => { - logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}.`); +const reportErrorAndExitProcess = err => { + logger.fatal(`Failed to start service ${packageJson.name} due to: ${err.message}`); logger.fatal(err.stack); process.exit(1); }; initDatabase() - .then(() => app.run() - .then(() => { logger.info(`Service started ${packageJson.name}.`); }) - .catch(reportErrorAndExitProcess), + .then(() => + app + .run() + .then(() => { + logger.info(`Service started ${packageJson.name}.`); + }) + .catch(reportErrorAndExitProcess), ) .catch(reportErrorAndExitProcess); diff --git a/services/transaction-statistics/config.js b/services/transaction-statistics/config.js index aebf78122..d2513d1fe 100644 --- a/services/transaction-statistics/config.js +++ b/services/transaction-statistics/config.js @@ -26,21 +26,23 @@ const config = { /** * Inter-service message broker */ -config.transporter = process.env.SERVICE_BROKER || 'redis://127.0.0.1:6379/0'; +config.transporter = process.env.SERVICE_BROKER || 'redis://lisk:password@127.0.0.1:6379/0'; config.brokerTimeout = Number(process.env.SERVICE_BROKER_TIMEOUT) || 10; // in seconds /** * External endpoints */ -config.endpoints.redis = process.env.SERVICE_STATISTICS_REDIS || 'redis://127.0.0.1:6379/7'; +config.endpoints.redis = + process.env.SERVICE_STATISTICS_REDIS || 'redis://lisk:password@127.0.0.1:6379/7'; // Primary database. Used for both read-write operations. -config.endpoints.mysql = process.env.SERVICE_STATISTICS_MYSQL || 'mysql://lisk:password@127.0.0.1:3306/lisk'; +config.endpoints.mysql = + process.env.SERVICE_STATISTICS_MYSQL || 'mysql://lisk:password@127.0.0.1:3306/lisk'; // DB replicas against the primary. Used for read-only operations. -config.endpoints.mysqlReplica = process.env.SERVICE_STATISTICS_MYSQL_READ_REPLICA - || config.endpoints.mysql; +config.endpoints.mysqlReplica = + process.env.SERVICE_STATISTICS_MYSQL_READ_REPLICA || config.endpoints.mysql; config.transactionStatistics = { - historyLengthDays: Number(process.env.TRANSACTION_STATS_HISTORY_LENGTH_DAYS || 366), + historyLengthDays: Number(process.env.TRANSACTION_STATS_HISTORY_LENGTH_DAYS) || 366, }; /** @@ -70,6 +72,8 @@ config.queue = { attempts: 5, timeout: 5 * 60 * 1000, // millisecs removeOnComplete: true, + removeOnFail: true, + stackTraceLimit: 0, }, }, }; @@ -95,11 +99,11 @@ config.networks = [ config.job = { // Interval takes priority over schedule and must be greater than 0 to be valid refreshTransactionStats: { - interval: process.env.JOB_INTERVAL_REFRESH_TRANSACTION_STATS || 0, + interval: Number(process.env.JOB_INTERVAL_REFRESH_TRANSACTION_STATS) || 0, schedule: process.env.JOB_SCHEDULE_REFRESH_TRANSACTION_STATS || '*/30 * * * *', }, verifyTransactionStats: { - interval: process.env.JOB_INTERVAL_VERIFY_TRANSACTION_STATS || 0, + interval: Number(process.env.JOB_INTERVAL_VERIFY_TRANSACTION_STATS) || 0, schedule: process.env.JOB_SCHEDULE_VERIFY_TRANSACTION_STATS || '15 */3 * * *', }, }; diff --git a/services/transaction-statistics/jest.config.functional.js b/services/transaction-statistics/jest.config.functional.js index 1545453df..90b79e014 100644 --- a/services/transaction-statistics/jest.config.functional.js +++ b/services/transaction-statistics/jest.config.functional.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/functional/*.test.js', - ], + testMatch: ['/tests/functional/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/transaction-statistics/jest.config.unit.js b/services/transaction-statistics/jest.config.unit.js index a6e880799..a7d851771 100644 --- a/services/transaction-statistics/jest.config.unit.js +++ b/services/transaction-statistics/jest.config.unit.js @@ -4,9 +4,7 @@ module.exports = { coverageDirectory: 'test/coverage', - testMatch: [ - '/tests/unit/*.test.js', - ], + testMatch: ['/tests/unit/*.test.js'], testTimeout: 15000, testEnvironment: 'node', diff --git a/services/transaction-statistics/jobs/transactionStatistics.js b/services/transaction-statistics/jobs/transactionStatistics.js index 34db5c190..023e40efb 100644 --- a/services/transaction-statistics/jobs/transactionStatistics.js +++ b/services/transaction-statistics/jobs/transactionStatistics.js @@ -13,10 +13,7 @@ * Removal or modification of this copyright notice is prohibited. * */ -const { - Logger, - Signals, -} = require('lisk-service-framework'); +const { Logger, Signals } = require('lisk-service-framework'); const config = require('../config'); @@ -37,7 +34,9 @@ module.exports = [ logger.debug('Initiating transaction statistics computation.'); await transactionStatistics.init(config.transactionStatistics.historyLengthDays); } catch (err) { - logger.warn(`Error occurred while running 'refresh.transactions.statistics' job:\n${err.stack}`); + logger.warn( + `Error occurred while running 'refresh.transactions.statistics' job:\n${err.stack}`, + ); } Signals.get('blockIndexReady').remove(indexReadyListener); }; @@ -48,7 +47,9 @@ module.exports = [ logger.debug('Job scheduled to update transaction statistics.'); await transactionStatistics.updateTodayStats(); } catch (err) { - logger.warn(`Error occurred while running 'refresh.transactions.statistics' job:\n${err.stack}`); + logger.warn( + `Error occurred while running 'refresh.transactions.statistics' job:\n${err.stack}`, + ); } }, }, @@ -60,8 +61,9 @@ module.exports = [ controller: async () => { try { logger.debug('Verifying the transaction stats...'); - await transactionStatistics - .validateTransactionStatistics(config.transactionStatistics.historyLengthDays); + await transactionStatistics.validateTransactionStatistics( + config.transactionStatistics.historyLengthDays, + ); } catch (err) { logger.warn(`Verifying transaction statistics failed due to: ${err.message}`); } diff --git a/services/transaction-statistics/methods/controllers/transactions.js b/services/transaction-statistics/methods/controllers/transactions.js index 5ea64cd9e..dae021602 100644 --- a/services/transaction-statistics/methods/controllers/transactions.js +++ b/services/transaction-statistics/methods/controllers/transactions.js @@ -15,7 +15,7 @@ */ const txStatisticsService = require('../../shared/transactionStatistics'); -const getTransactionsStatistics = async (params) => { +const getTransactionsStatistics = async params => { const transactionsStatistics = { data: {}, meta: {}, diff --git a/services/transaction-statistics/methods/transactions.js b/services/transaction-statistics/methods/transactions.js index 6b1332553..e05e378a5 100644 --- a/services/transaction-statistics/methods/transactions.js +++ b/services/transaction-statistics/methods/transactions.js @@ -14,9 +14,7 @@ * */ -const { - getTransactionsStatistics, -} = require('./controllers/transactions'); +const { getTransactionsStatistics } = require('./controllers/transactions'); module.exports = [ { diff --git a/services/transaction-statistics/package.json b/services/transaction-statistics/package.json index cfc0933fb..523e6bccb 100644 --- a/services/transaction-statistics/package.json +++ b/services/transaction-statistics/package.json @@ -1,45 +1,46 @@ { - "name": "lisk-service-transaction-statistics", - "version": "0.7.0-rc.1", - "description": "Lisk Service Transaction Statistics", - "keywords": [ - "lisk", - "blockchain" - ], - "homepage": "https://github.com/LiskHQ/lisk-service", - "repository": { - "type": "git", - "url": "git@github.com:LiskHQ/lisk-service.git" - }, - "bugs": { - "url": "https://github.com/LiskHQ/lisk-service/issues" - }, - "private": true, - "author": "Lisk Foundation , lightcurve GmbH ", - "license": "Apache-2.0", - "main": "app.js", - "engines": { - "node": ">=18.16 <=18", - "npm": ">=8.5.0" - }, - "scripts": { - "start": "node app.js", - "clean": "rm -rf ./node_modules", - "test": "yarn run test:unit", - "test:unit": "jest --config=jest.config.unit.js --detectOpenHandles --forceExit", - "test:functional": "jest --config=jest.config.functional.js --detectOpenHandles --forceExit" - }, - "dependencies": { - "big-number": "=2.0.0", - "bluebird": "^3.7.2", - "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz", - "moment": "^2.29.4" - }, - "devDependencies": { - "@babel/preset-env": "^7.14.0", - "babel-jest": "^27.3.0", - "jest": "^27.3.0", - "jest-when": "^3.5.1", - "moleculer": "^0.14.28" - } + "name": "lisk-service-transaction-statistics", + "version": "0.7.2", + "description": "Lisk Service Transaction Statistics", + "keywords": [ + "lisk", + "blockchain" + ], + "homepage": "https://github.com/LiskHQ/lisk-service", + "repository": { + "type": "git", + "url": "git@github.com:LiskHQ/lisk-service.git" + }, + "bugs": { + "url": "https://github.com/LiskHQ/lisk-service/issues" + }, + "private": true, + "author": "Lisk Foundation , lightcurve GmbH ", + "license": "Apache-2.0", + "main": "app.js", + "engines": { + "node": ">=18.16 <=18", + "npm": ">=8.5.0" + }, + "scripts": { + "start": "node app.js", + "clean": "rm -rf ./node_modules", + "test": "yarn run test:unit", + "test:unit": "jest --config=jest.config.unit.js --detectOpenHandles --forceExit", + "test:functional": "jest --config=jest.config.functional.js --detectOpenHandles --forceExit" + }, + "dependencies": { + "big-number": "=2.0.0", + "bluebird": "^3.7.2", + "ioredis": "^5.3.2", + "lisk-service-framework": "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz", + "moment": "^2.29.4" + }, + "devDependencies": { + "@babel/preset-env": "^7.14.0", + "babel-jest": "^27.3.0", + "jest": "^29.7.0", + "jest-when": "^3.5.1", + "moleculer": "^0.14.28" + } } diff --git a/services/transaction-statistics/shared/buildTransactionStatistics.js b/services/transaction-statistics/shared/buildTransactionStatistics.js index 961bafcf5..b42e84a3d 100644 --- a/services/transaction-statistics/shared/buildTransactionStatistics.js +++ b/services/transaction-statistics/shared/buildTransactionStatistics.js @@ -45,8 +45,8 @@ const logger = Logger(); const MYSQL_ENDPOINT_PRIMARY = config.endpoints.mysql; const MYSQL_ENDPOINT_REPLICA = config.endpoints.mysqlReplica; -const getTransactionStatisticsTable = (dbEndpoint = MYSQL_ENDPOINT_PRIMARY) => getTableInstance( - txStatisticsTableSchema, dbEndpoint); +const getTransactionStatisticsTable = (dbEndpoint = MYSQL_ENDPOINT_PRIMARY) => + getTableInstance(txStatisticsTableSchema, dbEndpoint); const getTxStatsWithFallback = (acc, moduleCommand, range) => { const defaultValue = { @@ -54,28 +54,22 @@ const getTxStatsWithFallback = (acc, moduleCommand, range) => { volume: 0, tokenID: DB_CONSTANT.UNAVAILABLE, }; - return acc[moduleCommand] - ? acc[moduleCommand][range] || defaultValue - : defaultValue; + return acc[moduleCommand] ? acc[moduleCommand][range] || defaultValue : defaultValue; }; const getTxValue = tx => { - const totalValue = Object.keys(tx.params).reduce( - (total, property) => { - if (property.endsWith('Fee') || property === 'amount') { - total.plus(tx.params[property]); - } - return total; - }, - BigNumber(tx.fee), - ); + const totalValue = Object.keys(tx.params).reduce((total, property) => { + if (property.endsWith('Fee') || property === 'amount') { + total.plus(tx.params[property]); + } + return total; + }, BigNumber(tx.fee)); return totalValue; }; const getRange = tx => { const txValue = getTxValue(tx); - // TODO: Make the conversion factor (1e8) dynamic based on token decimal const lowerBoundExponent = Math.floor(Math.log10(txValue / 1e8)); const lowerBound = Math.pow(10, lowerBoundExponent); const upperBound = Math.pow(10, lowerBoundExponent + 1); @@ -95,8 +89,8 @@ const getInitialValueToEnsureEachDayHasAtLeastOneEntry = () => { }; }; -const computeTransactionStats = transactions => transactions.reduce( - (acc, tx) => { +const computeTransactionStats = transactions => + transactions.reduce((acc, tx) => { const txStatsWithFallback = getTxStatsWithFallback(acc, tx.moduleCommand, getRange(tx)); return { ...acc, @@ -109,13 +103,11 @@ const computeTransactionStats = transactions => transactions.reduce( }, }, }; - }, - getInitialValueToEnsureEachDayHasAtLeastOneEntry(), -); + }, getInitialValueToEnsureEachDayHasAtLeastOneEntry()); -const transformStatsObjectToList = statsObject => ( +const transformStatsObjectToList = statsObject => Object.entries(statsObject).reduce( - (acc, [moduleCommand, rangeObject]) => ([ + (acc, [moduleCommand, rangeObject]) => [ ...acc, ...Object.entries(rangeObject).map(([range, { count, volume, tokenID }]) => ({ moduleCommand, @@ -124,10 +116,9 @@ const transformStatsObjectToList = statsObject => ( range, tokenID, })), - ]), + ], [], - ) -); + ); const insertToDB = async (statsList, date) => { const transactionStatisticsTable = await getTransactionStatisticsTable(MYSQL_ENDPOINT_PRIMARY); @@ -137,14 +128,13 @@ const insertToDB = async (statsList, date) => { try { const [{ id }] = transactionStatisticsTable.find({ date, limit: 1 }, ['id']); await transactionStatisticsTable.deleteByPrimaryKey([id]); - logger.debug(`Removed the following date from the database: ${date}`); + logger.debug(`Removed the following date from the database: ${date}.`); } catch (err) { - logger.debug(`The database does not contain the entry with the following date: ${date}`); + logger.debug(`The database does not contain an entry for the following date: ${date}.`); } statsList.map(statistic => { Object.assign(statistic, { date, amount_range: statistic.range }); - // TODO: Remove next line when CRUD operations are supported by composite primary key statistic.id = `${statistic.date}-${statistic.moduleCommand}-${statistic.amount_range}`; const { range, ...finalStats } = statistic; return finalStats; @@ -159,18 +149,23 @@ const insertToDB = async (statsList, date) => { } }; -const fetchTransactions = async (date) => { +const fetchTransactions = async date => { const params = { timestamp: `${moment.unix(date).unix()}:${moment.unix(date).add(1, 'day').unix()}`, }; const txMeta = (await requestIndexer('transactions', { ...params, limit: 1 })).meta; const maxCount = txMeta ? txMeta.total : 1000; - const result = await requestAll(requestIndexer, 'transactions', { ...params, limit: 100 }, maxCount); + const result = await requestAll( + requestIndexer, + 'transactions', + { ...params, limit: 100 }, + maxCount, + ); const transactions = result.error ? [] : result; return transactions; }; -const queueJob = async (job) => { +const queueJob = async job => { const { date } = job.data; if (!date) { return Promise.reject(new Error('Missing date.')); @@ -197,11 +192,10 @@ const fetchTransactionsForPastNDays = async (n, forceReload = false) => { const transactionStatisticsTable = await getTransactionStatisticsTable(MYSQL_ENDPOINT_REPLICA); const scheduledDays = []; for (let i = 0; i < n; i++) { - /* eslint-disable no-await-in-loop */ - const date = moment().subtract(i, 'day').utc().startOf('day') - .unix(); + const date = moment().subtract(i, 'day').utc().startOf('day').unix(); - const shouldUpdate = i === 0 || !((await transactionStatisticsTable.find({ date, limit: 1 }, ['id'])).length); + const shouldUpdate = + i === 0 || !(await transactionStatisticsTable.find({ date, limit: 1 }, ['id'])).length; if (shouldUpdate || forceReload) { const formattedDate = moment.unix(date).format('YYYY-MM-DD'); @@ -211,9 +205,12 @@ const fetchTransactionsForPastNDays = async (n, forceReload = false) => { scheduledDays.push(formattedDate.toString()); } if (scheduledDays.length === n) { - logger.info(`Scheduled statistics calculation for ${scheduledDays.length} days (${scheduledDays[scheduledDays.length - 1]} - ${scheduledDays[0]}).`); + logger.info( + `Scheduled statistics calculation for ${scheduledDays.length} days (${ + scheduledDays[scheduledDays.length - 1] + } - ${scheduledDays[0]}).`, + ); } - /* eslint-enable no-await-in-loop */ } }; @@ -233,10 +230,12 @@ const validateTransactionStatistics = async historyLengthDays => { const verifyStatistics = await BluebirdPromise.map( Object.keys(distributionByType), async moduleCommand => { - const fromTimestamp = Math.floor((moment.unix(dateFrom).unix()) / 1000); - const toTimestamp = Math.floor((moment.unix(dateTo).unix()) / 1000); + const fromTimestamp = Math.floor(moment.unix(dateFrom).unix() / 1000); + const toTimestamp = Math.floor(moment.unix(dateTo).unix() / 1000); - const { meta: { total } } = await requestIndexer('transactions', { + const { + meta: { total }, + } = await requestIndexer('transactions', { moduleCommand, timestamp: `${fromTimestamp}:${toTimestamp}`, limit: 1, @@ -252,7 +251,11 @@ const validateTransactionStatistics = async historyLengthDays => { const init = async historyLengthDays => { await fetchTransactionsForPastNDays(historyLengthDays, true); - logger.debug(`============== 'transactionStatsReady' signal: ${Signals.get('transactionStatsReady')} ==============`); + logger.debug( + `============== 'transactionStatsReady' signal: ${Signals.get( + 'transactionStatsReady', + )} ==============`, + ); Signals.get('transactionStatsReady').dispatch(historyLengthDays); }; diff --git a/services/transaction-statistics/shared/status.js b/services/transaction-statistics/shared/status.js index 514c966ac..ba9c72c31 100644 --- a/services/transaction-statistics/shared/status.js +++ b/services/transaction-statistics/shared/status.js @@ -1,18 +1,18 @@ /* -* LiskHQ/lisk-service -* Copyright © 2023 Lisk Foundation -* -* See the LICENSE file at the top-level directory of this distribution -* for licensing information. -* -* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, -* no part of this software, including this file, may be copied, modified, -* propagated, or distributed except according to the terms contained in the -* LICENSE file. -* -* Removal or modification of this copyright notice is prohibited. -* -*/ + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ const packageJson = require('../package.json'); const { getTransactionsStatistics } = require('./transactionStatistics'); diff --git a/services/transaction-statistics/shared/transactionStatistics.js b/services/transaction-statistics/shared/transactionStatistics.js index ce1f0880d..bf671c729 100644 --- a/services/transaction-statistics/shared/transactionStatistics.js +++ b/services/transaction-statistics/shared/transactionStatistics.js @@ -17,7 +17,9 @@ const BluebirdPromise = require('bluebird'); const moment = require('moment'); const { - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, Utils: { isEmptyObject }, } = require('lisk-service-framework'); @@ -33,7 +35,7 @@ let numTrxTypes; const getTransactionStatisticsTable = () => getTableInstance(txStatsTableSchema, MYSQL_ENDPOINT); -const getSelector = async (params) => { +const getSelector = async params => { if (!numTrxTypes) { const networkStatus = await requestIndexer('network.status'); numTrxTypes = networkStatus.data.moduleCommands.length; @@ -91,9 +93,10 @@ const getStatsTimeline = async params => { if (tokenID !== DB_CONSTANT.UNAVAILABLE) { const timelineRaw = Object.values(unorderedFinalResult) - .sort((a, b) => a.date.localeCompare(b.date)).reverse(); + .sort((a, b) => a.date.localeCompare(b.date)) + .reverse(); - tokenStatsTimeline[tokenID] = timelineRaw.map((el) => ({ + tokenStatsTimeline[tokenID] = timelineRaw.map(el => ({ ...el, timestamp: Date.parse(el.date) / 1000, transactionCount: parseInt(el.transactionCount, 10), @@ -114,12 +117,15 @@ const getDistributionByAmount = async params => { params.tokenIDs, async tokenID => { const queryParams = await getSelector(params); - const result = (await transactionStatisticsTable.find( - { - ...queryParams, - whereIn: { property: 'tokenID', values: [tokenID, DB_CONSTANT.UNAVAILABLE] }, - }, - ['amount_range', 'count'])).filter(o => o.count > 0); + const result = ( + await transactionStatisticsTable.find( + { + ...queryParams, + whereIn: { property: 'tokenID', values: [tokenID, DB_CONSTANT.UNAVAILABLE] }, + }, + ['amount_range', 'count'], + ) + ).filter(o => o.count > 0); const unorderedFinalResult = {}; result.forEach(entry => { @@ -147,7 +153,9 @@ const getDistributionByAmount = async params => { const getDistributionByType = async params => { const transactionStatisticsTable = await getTransactionStatisticsTable(); - const result = (await transactionStatisticsTable.find(await getSelector(params), ['moduleCommand', 'count'])).filter(o => o.count > 0); + const result = ( + await transactionStatisticsTable.find(await getSelector(params), ['moduleCommand', 'count']) + ).filter(o => o.count > 0); const unorderedFinalResult = {}; result.forEach(entry => { @@ -175,10 +183,7 @@ const getTransactionsStatistics = async params => { const dateFormat = params.interval === 'day' ? DATE_FORMAT.DAY : DATE_FORMAT.MONTH; - const dateTo = moment() - .utc() - .endOf(params.interval) - .subtract(params.offset, params.interval); + const dateTo = moment().utc().endOf(params.interval).subtract(params.offset, params.interval); const dateFrom = moment(dateTo) .startOf(params.interval) .subtract(params.limit - 1, params.interval); @@ -200,7 +205,10 @@ const getTransactionsStatistics = async params => { transactionsStatistics.data = { timeline, distributionByType, distributionByAmount }; - const [{ date: minDate } = {}] = await transactionStatisticsTable.find({ sort: 'date:asc', limit: 1 }, 'date'); + const [{ date: minDate } = {}] = await transactionStatisticsTable.find( + { sort: 'date:asc', limit: 1 }, + 'date', + ); const total = minDate ? moment().diff(moment.unix(minDate), params.interval) : 0; transactionsStatistics.meta = { diff --git a/services/transaction-statistics/shared/utils/request.js b/services/transaction-statistics/shared/utils/request.js index afb207c08..128e2961e 100644 --- a/services/transaction-statistics/shared/utils/request.js +++ b/services/transaction-statistics/shared/utils/request.js @@ -16,7 +16,7 @@ let app; -const setAppContext = (h) => app = h; +const setAppContext = h => (app = h); const getAppContext = () => app; diff --git a/services/transaction-statistics/shared/utils/requestAll.js b/services/transaction-statistics/shared/utils/requestAll.js index 07544b361..b67a26dd8 100644 --- a/services/transaction-statistics/shared/utils/requestAll.js +++ b/services/transaction-statistics/shared/utils/requestAll.js @@ -16,23 +16,22 @@ const requestAll = async (fn, method, params, limit) => { const defaultMaxAmount = limit || 1000; const oneRequestLimit = params.limit || 100; - const firstRequest = await fn(method, - { - ...params, - ...{ - limit: oneRequestLimit, - offset: 0, - }, - }); + const firstRequest = await fn(method, { + ...params, + ...{ + limit: oneRequestLimit, + offset: 0, + }, + }); const { data } = firstRequest; if (!data.error) { - const maxAmount = !firstRequest.meta.total || firstRequest.meta.total > defaultMaxAmount - ? defaultMaxAmount - : firstRequest.meta.total; + const maxAmount = + !firstRequest.meta.total || firstRequest.meta.total > defaultMaxAmount + ? defaultMaxAmount + : firstRequest.meta.total; if (maxAmount > oneRequestLimit) { for (let page = 1; page < Math.ceil(maxAmount / oneRequestLimit); page++) { - /* eslint-disable-next-line no-await-in-loop */ const result = await fn(method, { ...params, ...{ diff --git a/services/transaction-statistics/tests/functional/requestAll.test.js b/services/transaction-statistics/tests/functional/requestAll.test.js index dd03e27e0..4a7cd73e2 100644 --- a/services/transaction-statistics/tests/functional/requestAll.test.js +++ b/services/transaction-statistics/tests/functional/requestAll.test.js @@ -26,19 +26,20 @@ const broker = new ServiceBroker({ logger: console, }); -xdescribe('Test requestAll method', () => { +describe('Test requestAll method', () => { beforeAll(async () => { await broker.start(); await request.setAppContext({ - requestRpc: (method, params) => new Promise((resolve, reject) => { - broker - .call(method, params) - .then(res => resolve(res)) - .catch(err => { - console.error(`Error occurred! ${err.message}`); - reject(err); - }); - }), + requestRpc: (method, params) => + new Promise((resolve, reject) => { + broker + .call(method, params) + .then(res => resolve(res)) + .catch(err => { + console.error(`Error occurred! ${err.message}`); + reject(err); + }); + }), }); }); afterAll(() => broker.stop()); diff --git a/services/transaction-statistics/tests/functional/transactionStatistics.test.js b/services/transaction-statistics/tests/functional/transactionStatistics.test.js index a199beddd..77a64e5c1 100644 --- a/services/transaction-statistics/tests/functional/transactionStatistics.test.js +++ b/services/transaction-statistics/tests/functional/transactionStatistics.test.js @@ -16,7 +16,9 @@ const moment = require('moment'); const { - DB: { MySQL: { getTableInstance } }, + DB: { + MySQL: { getTableInstance }, + }, } = require('lisk-service-framework'); const { networkStatus } = require('../constants/networkStatus'); @@ -84,11 +86,13 @@ describe('Tests transactionStatistics', () => { expect(result).toMatchObject({ sort: 'date:desc', limit: (networkStatus.data.moduleCommands.length + 1) * 366, - propBetweens: [{ - property: 'date', - from: params.dateFrom.unix(), - to: params.dateTo.unix(), - }], + propBetweens: [ + { + property: 'date', + from: params.dateFrom.unix(), + to: params.dateTo.unix(), + }, + ], }); }); @@ -101,10 +105,12 @@ describe('Tests transactionStatistics', () => { expect(result).toMatchObject({ sort: 'date:desc', limit: (networkStatus.data.moduleCommands.length + 1) * 366, - propBetweens: [{ - property: 'date', - from: params.dateFrom.unix(), - }], + propBetweens: [ + { + property: 'date', + from: params.dateFrom.unix(), + }, + ], }); }); @@ -117,10 +123,12 @@ describe('Tests transactionStatistics', () => { expect(result).toMatchObject({ sort: 'date:desc', limit: (networkStatus.data.moduleCommands.length + 1) * 366, - propBetweens: [{ - property: 'date', - to: params.dateTo.unix(), - }], + propBetweens: [ + { + property: 'date', + to: params.dateTo.unix(), + }, + ], }); }); @@ -134,10 +142,12 @@ describe('Tests transactionStatistics', () => { expect(result).toMatchObject({ sort: 'date:desc', limit: params.limit, - propBetweens: [{ - property: 'date', - to: params.dateTo.unix(), - }], + propBetweens: [ + { + property: 'date', + to: params.dateTo.unix(), + }, + ], }); }); }); @@ -174,9 +184,7 @@ describe('Tests transactionStatistics', () => { const params = { dateFormat, - dateTo: moment() - .endOf(interval) - .subtract(offset, interval), + dateTo: moment().endOf(interval).subtract(offset, interval), dateFrom: moment(moment().startOf(interval).subtract(offset, interval)) .startOf(interval) .subtract(limit - 1, interval), @@ -215,9 +223,7 @@ describe('Tests transactionStatistics', () => { const params = { dateFormat, - dateTo: moment() - .endOf(interval) - .subtract(offset, interval), + dateTo: moment().endOf(interval).subtract(offset, interval), dateFrom: moment(moment().startOf(interval).subtract(offset, interval)) .startOf(interval) .subtract(limit - 1, interval), @@ -276,9 +282,7 @@ describe('Tests transactionStatistics', () => { const params = { dateFormat, - dateTo: moment() - .endOf(interval) - .subtract(offset, interval), + dateTo: moment().endOf(interval).subtract(offset, interval), dateFrom: moment(moment().startOf(interval).subtract(offset, interval)) .startOf(interval) .subtract(limit - 1, interval), @@ -305,9 +309,7 @@ describe('Tests transactionStatistics', () => { const params = { dateFormat, - dateTo: moment() - .endOf(interval) - .subtract(offset, interval), + dateTo: moment().endOf(interval).subtract(offset, interval), dateFrom: moment(moment().startOf(interval).subtract(offset, interval)) .startOf(interval) .subtract(limit - 1, interval), @@ -354,9 +356,7 @@ describe('Tests transactionStatistics', () => { const params = { dateFormat, - dateTo: moment() - .endOf(interval) - .subtract(offset, interval), + dateTo: moment().endOf(interval).subtract(offset, interval), dateFrom: moment(moment().startOf(interval).subtract(offset, interval)) .startOf(interval) .subtract(limit - 1, interval), @@ -365,9 +365,11 @@ describe('Tests transactionStatistics', () => { const result = await getDistributionByType(params); expect(typeof result).toBe('object'); - expect(result).toEqual(expect.objectContaining({ - [testData.moduleCommand]: testData.count, - })); + expect(result).toEqual( + expect.objectContaining({ + [testData.moduleCommand]: testData.count, + }), + ); }); it(`should return correct response with valid params -> interval: 10 ${interval}`, async () => { @@ -377,9 +379,7 @@ describe('Tests transactionStatistics', () => { const params = { dateFormat, - dateTo: moment() - .endOf(interval) - .subtract(offset, interval), + dateTo: moment().endOf(interval).subtract(offset, interval), dateFrom: moment(moment().startOf(interval).subtract(offset, interval)) .startOf(interval) .subtract(limit - 1, interval), @@ -388,9 +388,11 @@ describe('Tests transactionStatistics', () => { const result = await getDistributionByType(params); expect(typeof result).toBe('object'); - expect(result).toEqual(expect.objectContaining({ - [testData.moduleCommand]: testData.count, - })); + expect(result).toEqual( + expect.objectContaining({ + [testData.moduleCommand]: testData.count, + }), + ); }); }); diff --git a/services/transaction-statistics/yarn.lock b/services/transaction-statistics/yarn.lock index b14bd8b9f..9e941d2b9 100644 --- a/services/transaction-statistics/yarn.lock +++ b/services/transaction-statistics/yarn.lock @@ -10,46 +10,46 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -61,40 +61,40 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953" + integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -103,10 +103,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -114,7 +114,7 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -134,24 +134,24 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -171,7 +171,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -180,7 +180,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -210,20 +210,20 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" @@ -234,44 +234,52 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" + integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -320,17 +328,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -348,6 +356,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -405,9 +420,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -419,211 +434,212 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" + integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" + integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -634,198 +650,199 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.14.0": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a" + integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ== dependencies: - "@babel/compat-data" "^7.22.20" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -837,59 +854,58 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" core-js-compat "^3.31.0" semver "^6.3.1" @@ -908,13 +924,13 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.8.4": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" + integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": +"@babel/template@^7.22.15", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== @@ -923,28 +939,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -981,142 +997,164 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" "@jest/transform@^27.5.1": version "27.5.1" @@ -1139,6 +1177,27 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + "@jest/types@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" @@ -1150,6 +1209,18 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -1174,18 +1245,18 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@keyv/redis@^2.1.2": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.7.1.tgz#c492a4d9ca83af896abc7725418ca994b4b1c2e0" - integrity sha512-yZOFGQ7/PVLF8K1vTrztHUgCqDz7W0zfryX3+3nMOxe6j948s9VyQN/cCxftesYQEiTPAMp1NQXyqlWO0w5qEQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.8.1.tgz#61357d4e45476803c7e7241289aa83f564458117" + integrity sha512-JjoNXtAcjT0r0CIWi69rVoXdwPD2nHqyWR80XHmsP1Psuzml1icNtehq6ZqKJjLLgLzH3DvQoWrXkmhxxerf3g== dependencies: ioredis "^5.3.2" @@ -1195,34 +1266,34 @@ dependencies: debug "^3.1.0" -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -1231,24 +1302,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" @@ -1258,69 +1329,68 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== - -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" accepts@~1.3.4: version "1.3.8" @@ -1330,36 +1400,6 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -1458,14 +1498,16 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" -babel-jest@^27.3.0, babel-jest@^27.5.1: +babel-jest@^27.3.0: version "27.5.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== @@ -1479,6 +1521,19 @@ babel-jest@^27.3.0, babel-jest@^27.5.1: graceful-fs "^4.2.9" slash "^3.0.0" +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -1500,29 +1555,39 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" + integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz#1fac2b1dcef6274e72b3c72977ed8325cb330591" - integrity sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg== +babel-plugin-polyfill-corejs3@^0.8.5: + version "0.8.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.32.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" + integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -1550,6 +1615,14 @@ babel-preset-jest@^27.5.1: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1566,9 +1639,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== better-sqlite3@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.6.0.tgz#a20717993742f816158f17e2cccd88a979e77e58" - integrity sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g== + version "8.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" + integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -1632,19 +1705,14 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.10, browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: @@ -1688,13 +1756,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1716,10 +1785,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== chalk@2.4.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -1749,22 +1818,22 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" cluster-key-slot@^1.1.0: @@ -1838,7 +1907,7 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: +convert-source-map@^1.4.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -1853,12 +1922,12 @@ cookie@~0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.31.0, core-js-compat@^3.32.2: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" - integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.34.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.34.0.tgz#61a4931a13c52f8f08d924522bba65f8c94a5f17" + integrity sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA== dependencies: - browserslist "^4.21.10" + browserslist "^4.22.2" cors@~2.8.5: version "2.8.5" @@ -1868,6 +1937,19 @@ cors@~2.8.5: object-assign "^4" vary "^1" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cron-parser@^2.13.0: version "2.18.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" @@ -1885,32 +1967,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -1923,7 +1979,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1942,11 +1998,6 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -1954,10 +2005,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -1969,16 +2020,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2022,32 +2073,25 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -2067,9 +2111,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -2083,9 +2127,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -2106,25 +2150,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -2134,7 +2178,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -2148,7 +2192,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -2156,13 +2200,13 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -2198,32 +2242,16 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2264,17 +2292,18 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -2316,7 +2345,7 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.14.0: +follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -2328,10 +2357,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -2366,10 +2395,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -2403,15 +2432,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -2446,7 +2475,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2498,11 +2527,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -2521,19 +2550,12 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - whatwg-encoding "^1.0.5" + function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" @@ -2551,28 +2573,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -2629,12 +2634,12 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^2.2.0: @@ -2714,11 +2719,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2762,11 +2767,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2841,11 +2841,11 @@ isstream@^0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -2856,6 +2856,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -2882,145 +2893,130 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== jest-haste-map@^27.5.1: version "27.5.1" @@ -3042,69 +3038,66 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -3116,83 +3109,86 @@ jest-regex-util@^27.5.1: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" @@ -3204,33 +3200,31 @@ jest-serializer@^27.5.1: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" jest-util@^27.5.1: version "27.5.1" @@ -3244,29 +3238,42 @@ jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" jest-when@^3.5.1: @@ -3283,14 +3290,25 @@ jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: - "@jest/core" "^27.5.1" + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -3305,39 +3323,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3386,9 +3371,9 @@ keyv-lru@^3.0.4: tiny-lru "^1.6.1" keyv@^4.0.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -3437,13 +3422,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz": - version "1.5.1" - resolved "https://github.com/LiskHQ/lisk-service/raw/bf8048b920f61a2b27d7c28535dfefed5bd679cb/framework/dist/lisk-service-framework-1.5.1.tgz#2283db2156d98ed1b39ff30d01838774a755a78e" +"lisk-service-framework@https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz": + version "1.6.11" + resolved "https://github.com/LiskHQ/lisk-service/raw/5cb6fc8e9b9798595d1a4652b9148afcbfaaed1f/framework/dist/lisk-service-framework-1.6.11.tgz#c06803a3214ec800672b56b7a3cb81102638e574" dependencies: "@keyv/redis" "^2.1.2" "@log4js-node/gelf" "github:MichalTuleja/log4js-node-gelf#89d9933" - axios "^0.21.2" + axios "^1.6.0" better-sqlite3 "^8.5.0" bull "^3.29.3" debug "^4.3.1" @@ -3499,7 +3484,7 @@ lodash.isarguments@^3.1.0: resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3621,9 +3606,9 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== moleculer-web@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.6.tgz#a8bc99b7f153b882018aec9fa553496a86b864f5" - integrity sha512-MGNIH6mXLU2Wj63bAgoVzdhMKXALp99F5UHuiBgS2ywakdWEUl/q7GlMblvscioCCkXuUWezId85J0yioYxedg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" + integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== dependencies: "@fastify/busboy" "^1.0.0" body-parser "^1.19.0" @@ -3638,9 +3623,9 @@ moleculer-web@^0.10.4: serve-static "^1.14.1" moleculer@^0.14.21, moleculer@^0.14.28: - version "0.14.31" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.31.tgz#55d7e24ba162673b47f150007eeb77d44c5c3529" - integrity sha512-EbcafGr4KWfltjwrV+k8xLA7majB7g8RvsD6aQ2bwzYpBo5e8xp9jYlJPpfScoORXAwT75puAqQTrFmAaBpYqA== + version "0.14.32" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.32.tgz#93abe48d79f989fe4104d56534ff40d60c91318b" + integrity sha512-N5RXKS9Z01Gl6gLkf3snLgYbzU0bLci1WNEIuy2D+cjEg7i3XEArsiFHKnmNYWF6L5DajVrT8dw9EqGgvmjmOw== dependencies: args "^5.0.3" eventemitter2 "^6.4.9" @@ -3686,9 +3671,9 @@ ms@2.1.3, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mysql2@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e" - integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g== + version "3.6.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.5.tgz#46bfed7c1c1e4288283f8c8f1c4a5f20669dd3d6" + integrity sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w== dependencies: denque "^2.1.0" generate-function "^2.3.1" @@ -3730,9 +3715,9 @@ negotiator@0.6.3: integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== dependencies: semver "^7.3.5" @@ -3756,10 +3741,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" @@ -3778,20 +3763,15 @@ nuid@^1.1.4: resolved "https://registry.yarnpkg.com/nuid/-/nuid-1.1.6.tgz#a3b5a1df155f6615fed1dbd39ad3dbf9d2e0b82b" integrity sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -3799,12 +3779,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -3857,6 +3837,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -3891,11 +3878,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -3971,14 +3953,14 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" prettyjson@^1.2.1: version "1.2.5" @@ -4007,10 +3989,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -4020,10 +4002,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== qs@6.11.0: version "6.11.0" @@ -4039,11 +4021,6 @@ qs@^6.11.0: dependencies: side-channel "^1.0.4" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -4069,10 +4046,10 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" @@ -4176,11 +4153,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -4193,15 +4165,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.14.2, resolve@^1.20.0: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -4212,13 +4184,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" @@ -4248,19 +4213,12 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.5.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -4301,6 +4259,16 @@ serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -4336,7 +4304,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4408,24 +4376,19 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4475,7 +4438,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4552,7 +4515,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -4566,24 +4529,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -4610,14 +4560,6 @@ tarn@^3.0.2: resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -4632,11 +4574,6 @@ text-decoding@^1.0.0: resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - tildify@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" @@ -4669,23 +4606,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4794,6 +4714,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -4822,11 +4747,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4840,14 +4760,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4871,35 +4783,21 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" vary@^1: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -4911,28 +4809,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -4941,15 +4817,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -4961,13 +4828,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -5003,26 +4870,19 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest-ssl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" @@ -5043,20 +4903,25 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/tests/app.js b/tests/app.js index 7572897c0..4d06d9bcb 100644 --- a/tests/app.js +++ b/tests/app.js @@ -14,4 +14,4 @@ * */ // eslint-disable-next-line no-console -console.log('Use \'npm test\' to run tests'); +console.log("Use 'npm test' to run tests"); diff --git a/tests/benchmark/http_v2.yaml b/tests/benchmark/http_v2.yaml index 07874cbb3..a701ee211 100644 --- a/tests/benchmark/http_v2.yaml +++ b/tests/benchmark/http_v2.yaml @@ -1,88 +1,88 @@ config: - target: "{{ $processEnvironment.LISK_SERVICE_URL }}/api/v2" + target: '{{ $processEnvironment.LISK_SERVICE_URL }}/api/v2' phases: - duration: 10 arrivalRate: 15 - name: "Sustained max load of 15 users for 10 seconds" + name: 'Sustained max load of 15 users for 10 seconds' defaults: headers: - content-type: "application/json" + content-type: 'application/json' scenarios: - - name: "Transactions" + - name: 'Transactions' flow: - get: - url: "/transactions" + url: '/transactions' qs: limit: 30 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 30 expect: - statusCode: 200 - - name: "Blocks" + - name: 'Blocks' flow: - get: - url: "/blocks" + url: '/blocks' qs: limit: 30 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 30 expect: - statusCode: 200 - get: - url: "/blocks" + url: '/blocks' qs: limit: 100 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 100 expect: - statusCode: 200 - - name: "Accounts" + - name: 'Accounts' flow: - get: - url: "/accounts" + url: '/accounts' response: match: - json: "$.meta.count" + json: '$.meta.count' value: 10 expect: - statusCode: 200 - get: - url: "/accounts" + url: '/accounts' qs: limit: 20 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 20 expect: - statusCode: 200 - - name: "Delegates" + - name: 'Delegates' flow: - get: - url: "/accounts" + url: '/accounts' qs: limit: 30 isDelegate: true response: match: - json: "$.meta.count" + json: '$.meta.count' value: 30 expect: - statusCode: 200 - get: - url: "/accounts" + url: '/accounts' qs: limit: 103 isDelegate: true response: match: - json: "$.meta.count" + json: '$.meta.count' value: 103 expect: - statusCode: 200 diff --git a/tests/benchmark/http_v3.yaml b/tests/benchmark/http_v3.yaml index 1226d8b0b..5e00763c7 100644 --- a/tests/benchmark/http_v3.yaml +++ b/tests/benchmark/http_v3.yaml @@ -1,391 +1,391 @@ config: - target: "{{ $processEnvironment.LISK_SERVICE_URL }}/api/v3" + target: '{{ $processEnvironment.LISK_SERVICE_URL }}/api/v3' phases: - duration: 10 arrivalRate: 5 - name: "Sustained load of 5 new users each second for duration of 10 seconds (total 50 users)." + name: 'Sustained load of 5 new users each second for duration of 10 seconds (total 50 users).' defaults: headers: - content-type: "application/json" + content-type: 'application/json' scenarios: # Blocks - - name: "Blocks" + - name: 'Blocks' flow: - get: - url: "/blocks" + url: '/blocks' qs: limit: 30 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 30 expect: - statusCode: 200 - get: - url: "/blocks" + url: '/blocks' qs: limit: 100 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 100 expect: - statusCode: 200 - - name: "Blocks assets" + - name: 'Blocks assets' flow: - get: - url: "/blocks/assets" + url: '/blocks/assets' qs: limit: 30 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 30 expect: - statusCode: 200 - get: - url: "/blocks/assets" + url: '/blocks/assets' qs: limit: 100 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 100 expect: - statusCode: 200 # Transactions - - name: "Transactions" + - name: 'Transactions' flow: - get: - url: "/transactions" + url: '/transactions' qs: limit: 30 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 30 expect: - statusCode: 200 - - name: "Transactions statistics" + - name: 'Transactions statistics' flow: - get: - url: "/transactions/statistics" + url: '/transactions/statistics' qs: interval: day expect: - statusCode: 200 - - name: "Transactions statistics" + - name: 'Transactions statistics' flow: - get: - url: "/transactions/statistics" + url: '/transactions/statistics' qs: interval: month expect: - statusCode: 200 # Validator - - name: "Validator information by address" + - name: 'Validator information by address' flow: - get: - url: "/validator" + url: '/validator' qs: - address: "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht" + address: 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' expect: - statusCode: 200 # Auth - - name: "Auth information by address" + - name: 'Auth information by address' flow: - get: - url: "/auth" + url: '/auth' qs: - address: "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht" + address: 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' expect: - statusCode: 200 # Token - - name: "Tokens information" + - name: 'Tokens information' flow: - get: - url: "/token/balances" + url: '/token/balances' qs: - address: "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht" + address: 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' expect: - statusCode: 200 - - - name: "Check existence of an account for the specified token" + + - name: 'Check existence of an account for the specified token' flow: - get: - url: "/token/account/exists" + url: '/token/account/exists' qs: - address: "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht" - tokenID: "0400000000000000" + address: 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' + tokenID: '0400000000000000' expect: - statusCode: 200 - - name: "Token constants" + - name: 'Token constants' flow: - get: - url: "/token/constants" + url: '/token/constants' expect: - statusCode: 200 - - name: "Tokens summary" + - name: 'Tokens summary' flow: - get: - url: "/token/summary" + url: '/token/summary' expect: - statusCode: 200 # Fee - - name: "Fee estimates" + - name: 'Fee estimates' flow: - get: - url: "/fees" + url: '/fees' expect: - statusCode: 200 # Interoperability - - name: "Blockchain applications list" + - name: 'Blockchain applications list' flow: - get: - url: "/blockchain/apps" + url: '/blockchain/apps' expect: - statusCode: 200 - - name: "Blockchain applications statistics" + - name: 'Blockchain applications statistics' flow: - get: - url: "/blockchain/apps/statistics" + url: '/blockchain/apps/statistics' expect: - statusCode: 200 - - name: "Blockchain applications for which the off-chain metadata is available" + - name: 'Blockchain applications for which the off-chain metadata is available' flow: - get: - url: "/blockchain/apps/meta/list" + url: '/blockchain/apps/meta/list' expect: - statusCode: 200 - - name: "Blockchain applications off-chain metadata" + - name: 'Blockchain applications off-chain metadata' flow: - get: - url: "/blockchain/apps/meta" + url: '/blockchain/apps/meta' expect: - statusCode: 200 - - name: "Blockchain applications off-chain metadata for tokens" + - name: 'Blockchain applications off-chain metadata for tokens' flow: - get: - url: "/blockchain/apps/meta/tokens" + url: '/blockchain/apps/meta/tokens' expect: - statusCode: 200 # Events - - name: "Events" + - name: 'Events' flow: - get: - url: "/events" + url: '/events' response: match: - json: "$.meta.count" + json: '$.meta.count' value: 10 expect: - statusCode: 200 - get: - url: "/events" + url: '/events' qs: limit: 20 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 20 expect: - statusCode: 200 # PoS - - name: "PoS module constants" + - name: 'PoS module constants' flow: - get: - url: "/pos/constants" + url: '/pos/constants' expect: - statusCode: 200 - - name: "Validator claimable rewards" + - name: 'Validator claimable rewards' flow: - get: - url: "/pos/rewards/claimable" + url: '/pos/rewards/claimable' qs: - address: "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht" + address: 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' expect: - statusCode: 200 - - name: "Validator locked rewards" + - name: 'Validator locked rewards' flow: - get: - url: "/pos/rewards/locked" + url: '/pos/rewards/locked' qs: - address: "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht" + address: 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' expect: - statusCode: 200 - - name: "Stakers" + - name: 'Stakers' flow: - get: - url: "/pos/stakers" + url: '/pos/stakers' qs: - address: "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht" + address: 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' expect: - statusCode: 200 - - name: "Stakes" + - name: 'Stakes' flow: - get: - url: "/pos/stakes" + url: '/pos/stakes' qs: - address: "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht" + address: 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' expect: - statusCode: 200 - - name: "Unlocks" + - name: 'Unlocks' flow: - get: - url: "/pos/unlocks" + url: '/pos/unlocks' qs: - address: "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht" + address: 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' expect: - statusCode: 200 - - name: "Validators" + - name: 'Validators' flow: - get: - url: "/pos/validators" + url: '/pos/validators' qs: limit: 30 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 30 expect: - statusCode: 200 - get: - url: "/pos/validators" + url: '/pos/validators' qs: limit: 103 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 103 expect: - statusCode: 200 # Reward - - name: "Reward module constants" + - name: 'Reward module constants' flow: - get: - url: "/reward/constants" + url: '/reward/constants' expect: - statusCode: 200 - - name: "Default block generation reward at a specified height" + - name: 'Default block generation reward at a specified height' flow: - get: - url: "/reward/default" + url: '/reward/default' qs: height: 10 expect: - statusCode: 200 - - name: "Inflation rate" + - name: 'Inflation rate' flow: - get: - url: "/reward/inflation" + url: '/reward/inflation' qs: height: 10 expect: - statusCode: 200 # Legacy - - name: "Legacy account information" + - name: 'Legacy account information' flow: - get: - url: "/legacy" + url: '/legacy' qs: - publicKey: "1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcc" + publicKey: '1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcc' expect: - statusCode: 200 # Network - - name: "Network status" + - name: 'Network status' flow: - get: - url: "/network/status" + url: '/network/status' expect: - statusCode: 200 - - name: "Network statistics" + - name: 'Network statistics' flow: - get: - url: "/network/statistics" + url: '/network/statistics' expect: - statusCode: 200 # Peers - - name: "Peers" + - name: 'Peers' flow: - get: - url: "/peers" + url: '/peers' expect: - statusCode: 200 # Generators - - name: "Generators" + - name: 'Generators' flow: - get: - url: "/generators" + url: '/generators' qs: limit: 30 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 30 expect: - statusCode: 200 - get: - url: "/generators" + url: '/generators' qs: limit: 103 response: match: - json: "$.meta.count" + json: '$.meta.count' value: 103 expect: - statusCode: 200 - + # Schemas - - name: "Schemas" + - name: 'Schemas' flow: - get: - url: "/schemas" + url: '/schemas' expect: - statusCode: 200 # Index Status - - name: "Indexing status" + - name: 'Indexing status' flow: - get: - url: "/index/status" + url: '/index/status' expect: - statusCode: 200 # Market - - name: "Market prices" + - name: 'Market prices' flow: - get: - url: "/market/prices" + url: '/market/prices' expect: - statusCode: 200 diff --git a/tests/benchmark/socket_rpc_v2.yaml b/tests/benchmark/socket_rpc_v2.yaml index e42b411f1..4c00dcb91 100644 --- a/tests/benchmark/socket_rpc_v2.yaml +++ b/tests/benchmark/socket_rpc_v2.yaml @@ -1,51 +1,55 @@ config: - target: "{{ $processEnvironment.LISK_SERVICE_URL }}/rpc-v2" + target: '{{ $processEnvironment.LISK_SERVICE_URL }}/rpc-v2' socketio: - transports: ["websocket"] + transports: ['websocket'] phases: - duration: 15 arrivalRate: 50 scenarios: - - name: "Transactions" - engine: "socketio" + - name: 'Transactions' + engine: 'socketio' flow: - emit: - channel: "request" - data: {"method": "get.transactions", "params": {"limit": 30}} + channel: 'request' + data: { 'method': 'get.transactions', 'params': { 'limit': 30 } } response: match: - json: "$.meta.count" + json: '$.meta.count' value: 30 - - name: "Blocks" - engine: "socketio" + - name: 'Blocks' + engine: 'socketio' flow: - emit: - channel: "request" - data: {"method": "get.blocks", "params": {"limit": 30}} + channel: 'request' + data: { 'method': 'get.blocks', 'params': { 'limit': 30 } } - emit: - channel: "request" - data: {"method": "get.blocks", "params": {"limit": 10}} + channel: 'request' + data: { 'method': 'get.blocks', 'params': { 'limit': 10 } } - emit: - channel: "request" - data: {"method": "get.blocks", "params": {"limit": 100}} - - name: "Delegates" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.blocks', 'params': { 'limit': 100 } } + - name: 'Delegates' + engine: 'socketio' flow: - emit: - channel: "request" - data: {"method": "get.accounts", "params": {"isDelegate": true, "limit": 100}} + channel: 'request' + data: { 'method': 'get.accounts', 'params': { 'isDelegate': true, 'limit': 100 } } - emit: - channel: "request" - data: {"method": "get.accounts", "params": {"isDelegate": true, "limit": 30, "offset": 101}} + channel: 'request' + data: + { + 'method': 'get.accounts', + 'params': { 'isDelegate': true, 'limit': 30, 'offset': 101 }, + } - emit: - channel: "request" - data: {"method": "get.forgers", "params": {"limit": 101}} - - name: "Accounts" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.forgers', 'params': { 'limit': 101 } } + - name: 'Accounts' + engine: 'socketio' flow: - emit: - channel: "request" - data: {"method": "get.accounts", "params": {"limit": 30}} + channel: 'request' + data: { 'method': 'get.accounts', 'params': { 'limit': 30 } } - emit: - channel: "request" - data: {"method": "get.accounts", "params": {"limit": 30, "offset": 30}} + channel: 'request' + data: { 'method': 'get.accounts', 'params': { 'limit': 30, 'offset': 30 } } diff --git a/tests/benchmark/socket_rpc_v3.yaml b/tests/benchmark/socket_rpc_v3.yaml index d646b65c2..a76120b8c 100644 --- a/tests/benchmark/socket_rpc_v3.yaml +++ b/tests/benchmark/socket_rpc_v3.yaml @@ -1,389 +1,455 @@ config: - target: "{{ $processEnvironment.LISK_SERVICE_URL }}/rpc-v3" + target: '{{ $processEnvironment.LISK_SERVICE_URL }}/rpc-v3' phases: - duration: 15 arrivalRate: 50 + engines: + socketio-v3: {} scenarios: # Blocks - - name: "Blocks" - engine: "socketio" - flow: - - emit: - channel: "request" - data: {"method": "get.blocks", "params": {"limit": 10}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 10 - - emit: - channel: "request" - data: {"method": "get.blocks", "params": {"limit": 30}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 30 - - emit: - channel: "request" - data: {"method": "get.blocks", "params": {"limit": 100}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 100 - - name: "Blocks assets" - engine: "socketio" - flow: - - emit: - channel: "request" - data: {"method": "get.blocks.assets", "params": {"limit": 10}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 10 - - emit: - channel: "request" - data: {"method": "get.blocks.assets", "params": {"limit": 30}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 30 - - emit: - channel: "request" - data: {"method": "get.blocks.assets", "params": {"limit": 100}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 100 + - name: 'Blocks' + engine: socketio-v3 + flow: + - emit: + channel: 'request' + data: { 'method': 'get.blocks', 'params': { 'limit': 10 } } + response: + on: request + capture: + json: '$.result.meta.count' + value: 10 + - emit: + channel: 'request' + data: { 'method': 'get.blocks', 'params': { 'limit': 30 } } + response: + on: request + match: + json: '$.0.result.meta.count' + value: 30 + - emit: + channel: 'request' + data: { 'method': 'get.blocks', 'params': { 'limit': 100 } } + response: + on: request + match: + json: '$.0.result.meta.count' + value: 100 + - name: 'Blocks assets' + engine: socketio-v3 + flow: + - emit: + channel: 'request' + data: { 'method': 'get.blocks.assets', 'params': { 'limit': 10 } } + response: + on: request + match: + json: '$.0.result.meta.count' + value: 10 + - emit: + channel: 'request' + data: { 'method': 'get.blocks.assets', 'params': { 'limit': 30 } } + response: + on: request + match: + json: '$.0.result.meta.count' + value: 30 + - emit: + channel: 'request' + data: { 'method': 'get.blocks.assets', 'params': { 'limit': 100 } } + response: + on: request + match: + json: '$.0.result.meta.count' + value: 100 # Transactions - - name: "Transactions" - engine: "socketio" + - name: 'Transactions' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.transactions", "params": {"limit": 30}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 30 - - name: "Transactions statistics" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.transactions', 'params': { 'limit': 30 } } + response: + on: request + match: + json: '$.0.result.meta.count' + value: 30 + - name: 'Transactions statistics' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.transactions.statistics", "params": {interval:'day'}} - - name: "Transactions statistics" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.transactions.statistics', 'params': { interval:'day' } } + - name: 'Transactions statistics' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.transactions.statistics", "params": {interval:'month'}} - - name: "Transactions export" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.transactions.statistics', 'params': { interval:'month' } } + - name: 'Transactions export' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.export.transactions", "address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht"} + channel: 'request' + data: + { + 'method': 'get.export.transactions', + 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht', + } # Validator - - name: "Validator information by address" - engine: "socketio" + - name: 'Validator information by address' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.validator", "params": {"address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht"}} + channel: 'request' + data: + { + 'method': 'get.validator', + 'params': { 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' }, + } # Auth - - name: "Auth information by address" - engine: "socketio" + - name: 'Auth information by address' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.auth", "params": {"address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht"}} + channel: 'request' + data: + { + 'method': 'get.auth', + 'params': { 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' }, + } # Token - - name: "Tokens information" - engine: "socketio" + - name: 'Tokens information' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.token.balances", "params": {"address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht"}} + channel: 'request' + data: + { + 'method': 'get.token.balances', + 'params': { 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' }, + } - - name: "Check existence of an account for the specified token" - engine: "socketio" - flow: - - emit: - channel: "request" - data: {"method": "get.token.account.exists", "params": {"address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht", "tokenID": "0400000000000000"}} + - name: 'Check existence of an account for the specified token' + engine: socketio-v3 + flow: + - emit: + channel: 'request' + data: + { + 'method': 'get.token.account.exists', + 'params': + { + 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht', + 'tokenID': '0400000000000000', + }, + } - - name: "Token constants" - engine: "socketio" + - name: 'Token constants' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.token.constants"} + channel: 'request' + data: { 'method': 'get.token.constants' } - - name: "Tokens summary" - engine: "socketio" + - name: 'Tokens summary' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.token.summary"} - - name: "Tokens available IDs" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.token.summary' } + - name: 'Tokens available IDs' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.token.available-ids"} - - name: "Tokens top balances" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.token.available-ids' } + - name: 'Tokens top balances' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.token.balances.top", "params": {"tokenID": "0400000000000000"}} + channel: 'request' + data: { 'method': 'get.token.balances.top', 'params': { 'tokenID': '0400000000000000' } } # Fees - - name: "Fee estimates" - engine: "socketio" + - name: 'Fee estimates' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.fees"} + channel: 'request' + data: { 'method': 'get.fees' } # Interoperability - - name: "Blockchain applications list" - engine: "socketio" + - name: 'Blockchain applications list' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.blockchain.apps"} + channel: 'request' + data: { 'method': 'get.blockchain.apps' } - - name: "Blockchain applications statistics" - engine: "socketio" + - name: 'Blockchain applications statistics' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.blockchain.apps.statistics"} + channel: 'request' + data: { 'method': 'get.blockchain.apps.statistics' } - - name: "Blockchain applications for which the off-chain metadata is available" - engine: "socketio" + - name: 'Blockchain applications for which the off-chain metadata is available' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.blockchain.apps.meta.list"} + channel: 'request' + data: { 'method': 'get.blockchain.apps.meta.list' } - - name: "Blockchain applications off-chain metadata" - engine: "socketio" + - name: 'Blockchain applications off-chain metadata' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.blockchain.apps.meta"} + channel: 'request' + data: { 'method': 'get.blockchain.apps.meta' } - - name: "Blockchain applications off-chain metadata for tokens" - engine: "socketio" + - name: 'Blockchain applications off-chain metadata for tokens' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.blockchain.apps.meta.tokens"} + channel: 'request' + data: { 'method': 'get.blockchain.apps.meta.tokens' } - - name: "Blockchain applications off-chain metadata for tokens supported on the specified chainID" - engine: "socketio" + - name: 'Blockchain applications off-chain metadata for tokens supported on the specified chainID' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.blockchain.apps.meta.tokens.supported", "chainID": "04000000"} - + channel: 'request' + data: { 'method': 'get.blockchain.apps.meta.tokens.supported', 'chainID': '04000000' } + # Events - - name: "Events" - engine: "socketio" - flow: - - emit: - channel: "request" - data: {"method": "get.events", "params": {"limit": 10}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 10 - - emit: - channel: "request" - data: {"method": "get.events", "params": {"limit": 30}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 30 - - emit: - channel: "request" - data: {"method": "get.events", "params": {"limit": 100}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 100 + - name: 'Events' + engine: socketio-v3 + flow: + - emit: + channel: 'request' + data: { 'method': 'get.events', 'params': { 'limit': 10 } } + response: + on: request + capture: + json: '$.result.meta.count' + value: 10 + - emit: + channel: 'request' + data: { 'method': 'get.events', 'params': { 'limit': 30 } } + response: + on: request + capture: + json: '$.result.meta.count' + value: 30 + - emit: + channel: 'request' + data: { 'method': 'get.events', 'params': { 'limit': 100 } } + response: + on: request + capture: + json: '$.result.meta.count' + value: 100 # PoS - - name: "PoS module constants" - engine: "socketio" + - name: 'PoS module constants' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.pos.constants"} + channel: 'request' + data: { 'method': 'get.pos.constants' } - - name: "Validator claimable rewards" - engine: "socketio" + - name: 'Validator claimable rewards' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.pos.rewards.claimable", "params": {"address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht"}} + channel: 'request' + data: + { + 'method': 'get.pos.rewards.claimable', + 'params': { 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' }, + } - - name: "Validator locked rewards" - engine: "socketio" + - name: 'Validator locked rewards' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.pos.rewards.locked", "params": {"address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht"}} + channel: 'request' + data: + { + 'method': 'get.pos.rewards.locked', + 'params': { 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' }, + } - - name: "Stakers" - engine: "socketio" + - name: 'Stakers' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.pos.stakers", "params": {"address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht"}} + channel: 'request' + data: + { + 'method': 'get.pos.stakers', + 'params': { 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' }, + } - - name: "Stakes" - engine: "socketio" + - name: 'Stakes' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.pos.stakes", "params": {"address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht"}} + channel: 'request' + data: + { + 'method': 'get.pos.stakes', + 'params': { 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' }, + } - - name: "Unlocks" - engine: "socketio" + - name: 'Unlocks' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.pos.unlocks", "params": {"address": "lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht"}} + channel: 'request' + data: + { + 'method': 'get.pos.unlocks', + 'params': { 'address': 'lskxvhb3f52hye5huvyzbe6hoq2mrd4qrackdthht' }, + } - - name: "Validators" - engine: "socketio" - flow: - - emit: - channel: "request" - data: {"method": "get.pos.validators", "params": {"limit": 10}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 10 - - emit: - channel: "request" - data: {"method": "get.pos.validators", "params": {"limit": 30}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 30 - - emit: - channel: "request" - data: {"method": "get.pos.validators", "params": {"limit": 20}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 20 + - name: 'Validators' + engine: socketio-v3 + flow: + - emit: + channel: 'request' + data: { 'method': 'get.pos.validators', 'params': { 'limit': 10 } } + response: + on: request + capture: + json: '$.result.meta.count' + value: 10 + - emit: + channel: 'request' + data: { 'method': 'get.pos.validators', 'params': { 'limit': 30 } } + response: + on: request + capture: + json: '$.result.meta.count' + value: 30 + - emit: + channel: 'request' + data: { 'method': 'get.pos.validators', 'params': { 'limit': 20 } } + response: + on: request + capture: + json: '$.result.meta.count' + value: 20 # Reward - - name: "Reward module constants" - engine: "socketio" + - name: 'Reward module constants' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.reward.constants"} - - - name: "Default block generation reward at a specified height" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.reward.constants' } + + - name: 'Default block generation reward at a specified height' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.reward.default", "params": {"height": 10}} + channel: 'request' + data: { 'method': 'get.reward.default', 'params': { 'height': 10 } } - - name: "Inflation rate" - engine: "socketio" + - name: 'Inflation rate' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.reward.inflation", "params": {"height": 10}} + channel: 'request' + data: { 'method': 'get.reward.inflation', 'params': { 'height': 10 } } # Legacy - - name: "Legacy account information" - engine: "socketio" + - name: 'Legacy account information' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.legacy", "params": {"publicKey": "1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcc"}} + channel: 'request' + data: + { + 'method': 'get.legacy', + 'params': + { 'publicKey': '1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcc' }, + } # Network - - name: "Network status" - engine: "socketio" + - name: 'Network status' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.network.status"} - - - name: "Network statistics" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.network.status' } + + - name: 'Network statistics' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.network.statistics"} - - name: "Network Peers" - engine: "socketio" + channel: 'request' + data: { 'method': 'get.network.statistics' } + - name: 'Network Peers' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.network.peers"} + channel: 'request' + data: { 'method': 'get.network.peers' } # Peers - - name: "Peers" - engine: "socketio" + - name: 'Peers' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.peers"} + channel: 'request' + data: { 'method': 'get.peers' } # Generators - - name: "Generators" - engine: "socketio" - flow: - - emit: - channel: "request" - data: {"method": "get.generators", "params": {"limit": 30}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 30 - - emit: - channel: "request" - data: {"method": "get.generators", "params": {"limit": 100}} - acknowledge: - match: - json: "$.0.result.meta.count" - value: 100 + - name: 'Generators' + engine: socketio-v3 + flow: + - emit: + channel: 'request' + data: { 'method': 'get.generators', 'params': { 'limit': 30 } } + response: + on: request + capture: + json: '$.result.meta.count' + value: 30 + - emit: + channel: 'request' + data: { 'method': 'get.generators', 'params': { 'limit': 100 } } + response: + on: request + capture: + json: '$.result.meta.count' + value: 100 # Schemas - - name: "Schemas" - engine: "socketio" + - name: 'Schemas' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.schemas"} + channel: 'request' + data: { 'method': 'get.schemas' } # Index Status - - name: "Indexing status" - engine: "socketio" + - name: 'Indexing status' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.index.status"} + channel: 'request' + data: { 'method': 'get.index.status' } # Market - - name: "Market prices" - engine: "socketio" + - name: 'Market prices' + engine: socketio-v3 flow: - emit: - channel: "request" - data: {"method": "get.market.prices"} + channel: 'request' + data: { 'method': 'get.market.prices' } diff --git a/tests/compare_http_rpc/tests.js b/tests/compare_http_rpc/tests.js index fc2b6481d..ff18144c1 100644 --- a/tests/compare_http_rpc/tests.js +++ b/tests/compare_http_rpc/tests.js @@ -107,16 +107,16 @@ module.exports = [ { http: { url: '/api/v1/network/status' }, rpc: { method: 'get.network.status' }, - commonParams: { }, + commonParams: {}, }, { http: { url: '/api/v1/network/statistics' }, rpc: { method: 'get.network.statistics' }, - commonParams: { }, + commonParams: {}, }, { http: { url: '/api/v1/peers' }, rpc: { method: 'get.peers' }, - commonParams: { }, + commonParams: {}, }, ]; diff --git a/tests/compare_staging_mainnet/compare.test.js b/tests/compare_staging_mainnet/compare.test.js index 124d1a9ee..2c828deea 100644 --- a/tests/compare_staging_mainnet/compare.test.js +++ b/tests/compare_staging_mainnet/compare.test.js @@ -33,7 +33,7 @@ const urls = readFileSync('./integration/api/http_staging_mainnet/routes.txt', ' * contradict its usefulness though. */ describe('Routes match staging server', () => { - urls.forEach((url) => { + urls.forEach(url => { it(`${prodUrl}${url}`, async () => { const responses = await Promise.all([ api.get(`${stagingUrl}${url}`), diff --git a/tests/functional/template/http.test.js b/tests/functional/template/http.test.js deleted file mode 100644 index c218071ae..000000000 --- a/tests/functional/template/http.test.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - * LiskHQ/lisk-service - * Copyright © 2019 Lisk Foundation - * - * See the LICENSE file at the top-level directory of this distribution - * for licensing information. - * - * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, - * no part of this software, including this file, may be copied, modified, - * propagated, or distributed except according to the terms contained in the - * LICENSE file. - * - * Removal or modification of this copyright notice is prohibited. - * - */ -const config = require('../../config'); -const { api } = require('../../helpers/api'); - -const baseUrlRoot = config.SERVICE_ENDPOINT_HTTP; -const baseUrl = `${baseUrlRoot}/api/test`; - -describe('Gateway', () => { - it('provides basic HTTP route', async () => { - const response = await api.get(`${baseUrl}/hello`); - expect(response).toEqual({ - data: [ - { - message: 'Hello World!', - }, - ], - links: {}, - meta: { - count: 1, - }, - }); - }); - - it('provides HTTP route with parameters', async () => { - const response = await api.get(`${baseUrl}/hello/user1`); - expect(response).toEqual({ - data: [ - { - message: 'Hello World!', - name: 'user1', - }, - ], - links: {}, - meta: { - count: 1, - }, - }); - }); - - it('client error returns 400 on wrong param name', async () => { - const expectedStatus = 400; - const response = await api.get(`${baseUrl}/hello/user1?wrong_param_name=some_value`, expectedStatus); - expect(response).toEqual({ - error: true, - message: 'Unknown input parameter(s): wrong_param_name', - }); - }); - - it('client error returns 400 when no param value is defined', async () => { - const expectedStatus = 400; - const response = await api.get(`${baseUrl}/hello/user1?wrong_param_name=`, expectedStatus); - expect(response).toEqual({ - error: true, - message: 'Unknown input parameter(s): wrong_param_name', - }); - }); - - it('client error returns 400 when param value is too short', async () => { - const expectedStatus = 400; - const response = await api.get(`${baseUrl}/hello/ab`, expectedStatus); - expect(response).toEqual({ - error: true, - message: 'Invalid input: The \'path_name\' field length must be greater than or equal to 3 characters long.', - }); - }); - - it('server error returns 500', async () => { - const expectedStatus = 500; - const response = await api.get(`${baseUrl}/server_error`, expectedStatus); - expect(response).toEqual({ - error: true, - message: 'Server error: Called server.error', - }); - }); - - it('handles 404 error properly', async () => { - const expectedStatus = 404; - const response = await api.get(`${baseUrl}/wrong_path`, expectedStatus); - expect(response).toEqual({ - error: true, - message: 'Server error: Not found', - }); - }); -}); diff --git a/tests/functional/template/rpc.test.js b/tests/functional/template/rpc.test.js deleted file mode 100644 index 261ed029c..000000000 --- a/tests/functional/template/rpc.test.js +++ /dev/null @@ -1,151 +0,0 @@ -/* - * LiskHQ/lisk-service - * Copyright © 2019 Lisk Foundation - * - * See the LICENSE file at the top-level directory of this distribution - * for licensing information. - * - * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, - * no part of this software, including this file, may be copied, modified, - * propagated, or distributed except according to the terms contained in the - * LICENSE file. - * - * Removal or modification of this copyright notice is prohibited. - * - */ -import { JSON_RPC } from '../../helpers/errorCodes'; - -const config = require('../../config'); -const { request } = require('../../helpers/socketIoRpcRequest'); - -const { - jsonRpcEnvelopeSchema, - invalidParamsSchema, - serverErrorSchema, - wrongMethodSchema, - metaSchema, -} = require('../../schemas/rpcGenerics.schema'); - -const baseUrlRoot = config.SERVICE_ENDPOINT_RPC; -const baseUrl = `${baseUrlRoot}/rpc-test`; - -const { - INVALID_PARAMS, - METHOD_NOT_FOUND, - SERVER_ERROR, -} = JSON_RPC; - -describe('Gateway', () => { - it('provides basic RPC route', async () => { - const response = await request(baseUrl, 'get.hello', {}); - expect(response).toMap(jsonRpcEnvelopeSchema); - expect(response.id).toEqual(1); - const { result } = response; - expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toEqual(1); - expect(result.meta).toMap(metaSchema, { count: 1 }); - expect(result).toEqual({ - data: [ - { - message: 'Hello World!', - }, - ], - links: {}, - meta: { - count: 1, - }, - }); - }); - - it('provides RPC route with parameters', async () => { - const response = await request(baseUrl, 'get.hello.param', { path_name: 'user1' }); - expect(response).toMap(jsonRpcEnvelopeSchema); - expect(response.id).toEqual(1); - const { result } = response; - expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toEqual(1); - expect(result.meta).toMap(metaSchema, { count: 1 }); - expect(response.result).toEqual({ - data: [ - { - message: 'Hello World!', - name: 'user1', - }, - ], - links: {}, - meta: { - count: 1, - }, - }); - }); - - it('client error returns INVALID_REQUEST on wrong param name', async () => { - const response = await request(baseUrl, 'get.hello', { wrong_param_name: 'user1' }); - expect(response).toMap(invalidParamsSchema); - expect(response.id).toEqual(1); - expect(response).toStrictEqual({ - jsonrpc: '2.0', - id: 1, - error: { - code: INVALID_PARAMS[0], - message: 'Unknown input parameter(s): wrong_param_name', - }, - }); - }); - - it('client error returns INVALID_REQUEST when no param value is defined', async () => { - const response = await request(baseUrl, 'get.hello', { wrong_param_name: null }); - expect(response).toMap(invalidParamsSchema); - expect(response.id).toEqual(1); - expect(response).toStrictEqual({ - jsonrpc: '2.0', - id: 1, - error: { - code: INVALID_PARAMS[0], - message: 'Unknown input parameter(s): wrong_param_name', - }, - }); - }); - - it('client error returns INVALID_REQUEST when param value is too short', async () => { - const response = await request(baseUrl, 'get.hello', { path_name: 'ab' }); - expect(response).toMap(invalidParamsSchema); - expect(response.id).toEqual(1); - expect(response).toStrictEqual({ - jsonrpc: '2.0', - id: 1, - error: { - code: INVALID_PARAMS[0], - message: 'Unknown input parameter(s): path_name', - }, - }); - }); - - it('server error returns SERVER_ERROR', async () => { - const response = await request(baseUrl, 'get.server_error', {}); - expect(response).toMap(serverErrorSchema); - expect(response.id).toEqual(1); - expect(response).toStrictEqual({ - jsonrpc: '2.0', - id: 1, - error: { - code: SERVER_ERROR[0], - message: 'Server error: Called server.error', - }, - }); - }); - - it('handles METHOD_NOT_FOUND error properly', async () => { - const response = await request(baseUrl, 'get.wrong_path', {}); - expect(response).toMap(wrongMethodSchema); - expect(response.id).toEqual(1); - expect(response).toStrictEqual({ - jsonrpc: '2.0', - id: 1, - error: { - code: METHOD_NOT_FOUND[0], - message: 'Service \'get.wrong_path\' is not found.', - }, - }); - }); -}); diff --git a/tests/helpers/api.js b/tests/helpers/api.js index 01db5c5d6..cae7b03d8 100644 --- a/tests/helpers/api.js +++ b/tests/helpers/api.js @@ -29,26 +29,35 @@ const handleError = (error, expectedStatusCode) => { const handleResponse = (response, expectedStatusCode = 200) => { if (response.status === expectedStatusCode) return response.data; - throw new Error(`Status code: ${response.response.status} - \n${JSON.stringify(response.response.data, null, 2)}`); + throw new Error(`Status code: ${response.status} + \n${JSON.stringify(response.data, null, 2)}`); }; const api = { - get: (url, expectedStatusCode) => axios.get(url) - .then(response => handleResponse(response, expectedStatusCode)) - .catch(error => handleError(error, expectedStatusCode)), - post: (url, data, expectedStatusCode) => axios.post(url, data) - .then(response => handleResponse(response, expectedStatusCode)) - .catch(error => handleError(error, expectedStatusCode)), - put: (url, data, expectedStatusCode) => axios.put(url, data) - .then(response => handleResponse(response, expectedStatusCode)) - .catch(error => handleError(error, expectedStatusCode)), - del: (url, expectedStatusCode) => axios.delete(url) - .then(response => handleResponse(response, expectedStatusCode)) - .catch(error => handleError(error, expectedStatusCode)), - request: (config, expectedStatusCode) => axios(config) - .then(response => handleResponse(response, expectedStatusCode)) - .catch(error => handleError(error, expectedStatusCode)), + get: (url, expectedStatusCode) => + axios + .get(url) + .then(response => handleResponse(response, expectedStatusCode)) + .catch(error => handleError(error, expectedStatusCode)), + post: (url, data, expectedStatusCode) => + axios + .post(url, data) + .then(response => handleResponse(response, expectedStatusCode)) + .catch(error => handleError(error, expectedStatusCode)), + put: (url, data, expectedStatusCode) => + axios + .put(url, data) + .then(response => handleResponse(response, expectedStatusCode)) + .catch(error => handleError(error, expectedStatusCode)), + del: (url, expectedStatusCode) => + axios + .delete(url) + .then(response => handleResponse(response, expectedStatusCode)) + .catch(error => handleError(error, expectedStatusCode)), + request: (config, expectedStatusCode) => + axios(config) + .then(response => handleResponse(response, expectedStatusCode)) + .catch(error => handleError(error, expectedStatusCode)), }; module.exports = { diff --git a/tests/helpers/errorCodes.js b/tests/helpers/errorCodes.js index af52d6160..c4ca6086b 100644 --- a/tests/helpers/errorCodes.js +++ b/tests/helpers/errorCodes.js @@ -31,31 +31,31 @@ const errorCodes = [ ]; const HTTP = { - PARSE_ERROR: [400, 'Bad Request'], - INVALID_REQUEST: [400, 'Bad Request'], - METHOD_NOT_FOUND: [404, 'Not Found'], - INVALID_PARAMS: [400, 'Bad Request'], - SERVER_ERROR: [500, 'Internal Server Error'], - NOT_FOUND: [404, 'Not Found'], - UNAUTHORIZED: [401, 'Unauthorized'], - FORBIDDEN: [403, 'Forbidden'], - TOO_MANY_REQUESTS: [429, 'Too Many Requests'], - NOT_IMPLEMENTED: [501, 'Not Implemented'], - SERVICE_UNAVAILABLE: [503, 'Service Unavailable'], + PARSE_ERROR: [400, 'Bad Request'], + INVALID_REQUEST: [400, 'Bad Request'], + METHOD_NOT_FOUND: [404, 'Not Found'], + INVALID_PARAMS: [400, 'Bad Request'], + SERVER_ERROR: [500, 'Internal Server Error'], + NOT_FOUND: [404, 'Not Found'], + UNAUTHORIZED: [401, 'Unauthorized'], + FORBIDDEN: [403, 'Forbidden'], + TOO_MANY_REQUESTS: [429, 'Too Many Requests'], + NOT_IMPLEMENTED: [501, 'Not Implemented'], + SERVICE_UNAVAILABLE: [503, 'Service Unavailable'], }; const JSON_RPC = { - PARSE_ERROR: [-32700, 'Parse error'], - INVALID_REQUEST: [-32600, 'Invalid Request'], - METHOD_NOT_FOUND: [-32601, 'Method not found'], - INVALID_PARAMS: [-32602, 'Invalid params'], - SERVER_ERROR: [-32000, 'Server error'], - NOT_FOUND: [null, ''], // not defined, use {} response instead - UNAUTHORIZED: [-32600, 'Invalid Request'], - FORBIDDEN: [-32600, 'Invalid Request'], - TOO_MANY_REQUESTS: [-32001, 'Server error'], - NOT_IMPLEMENTED: [-32603, 'Internal error'], - SERVICE_UNAVAILABLE: [-32002, 'Server error'], + PARSE_ERROR: [-32700, 'Parse error'], + INVALID_REQUEST: [-32600, 'Invalid Request'], + METHOD_NOT_FOUND: [-32601, 'Method not found'], + INVALID_PARAMS: [-32602, 'Invalid params'], + SERVER_ERROR: [-32000, 'Server error'], + NOT_FOUND: [null, ''], // not defined, use {} response instead + UNAUTHORIZED: [-32600, 'Invalid Request'], + FORBIDDEN: [-32600, 'Invalid Request'], + TOO_MANY_REQUESTS: [-32001, 'Server error'], + NOT_IMPLEMENTED: [-32603, 'Internal error'], + SERVICE_UNAVAILABLE: [-32002, 'Server error'], }; module.exports = { diff --git a/tests/helpers/setupCustomMatchers.js b/tests/helpers/setupCustomMatchers.js index d01afa87a..164b97ecf 100644 --- a/tests/helpers/setupCustomMatchers.js +++ b/tests/helpers/setupCustomMatchers.js @@ -17,14 +17,20 @@ */ const mapRequiredSchema = (response, schema) => { let errors = ''; - Object.keys(schema).forEach((key) => { + Object.keys(schema).forEach(key => { if (!Object.prototype.hasOwnProperty.call(response, key)) { errors += `${key} is not present in response \n`; - } else if (!['array', 'number', 'boolean', 'object', 'string', 'null'].some(type => type === schema[key])) { + } else if ( + !['array', 'number', 'boolean', 'object', 'string', 'null'].some(type => type === schema[key]) + ) { if (response[key] !== schema[key]) { errors += `${key}: ${response[key]} is not equal ${schema[key]}\n`; } - } else if (schema[key] === 'array' ? !Array.isArray(response[key]) : (!typeof response[key] === schema[key])) { + } else if ( + schema[key] === 'array' + ? !Array.isArray(response[key]) + : !typeof response[key] === schema[key] + ) { errors += `${key}: ${response[key]} is not ${schema[key]}\n`; } }); @@ -43,7 +49,7 @@ const mapRequiredSchema = (response, schema) => { const mapOptionalSchema = (response, schema) => { let result; let errors = ''; - Object.keys(schema).forEach((key) => { + Object.keys(schema).forEach(key => { if (Object.prototype.hasOwnProperty.call(response, key)) { // eslint-disable-next-line valid-typeof if (typeof response[key] === schema[key]) { @@ -73,13 +79,12 @@ const toMap = (response, schema, expectedValuesObject) => { } let errors = ''; if (expectedValuesObject) { - Object.entries(expectedValuesObject) - .forEach(([key, value]) => { - if (response && value !== response[key]) { - errors += `${key}: ${response[key]} is not equal ${value}\n`; - errors += `\nObject dump: ${JSON.stringify(response, null, 2)}\n`; - } - }); + Object.entries(expectedValuesObject).forEach(([key, value]) => { + if (response && value !== response[key]) { + errors += `${key}: ${response[key]} is not equal ${value}\n`; + errors += `\nObject dump: ${JSON.stringify(response, null, 2)}\n`; + } + }); if (errors.length) { return { pass: false, diff --git a/tests/helpers/socketIoRpcMultiRequest.js b/tests/helpers/socketIoRpcMultiRequest.js index d19d963ac..11a5f738f 100644 --- a/tests/helpers/socketIoRpcMultiRequest.js +++ b/tests/helpers/socketIoRpcMultiRequest.js @@ -15,14 +15,15 @@ */ const io = require('socket.io-client'); -const request = (endpoint, params) => new Promise((resolve) => { - const socket = io(endpoint, { forceNew: true, transports: ['websocket'] }); +const request = (endpoint, params) => + new Promise(resolve => { + const socket = io(endpoint, { forceNew: true, transports: ['websocket'] }); - socket.emit('request', params, (answer) => { - resolve(answer); - socket.close(); + socket.emit('request', params, answer => { + resolve(answer); + socket.close(); + }); }); -}); module.exports = { request, diff --git a/tests/helpers/socketIoRpcRequest.js b/tests/helpers/socketIoRpcRequest.js index b7845f991..5c3985c70 100644 --- a/tests/helpers/socketIoRpcRequest.js +++ b/tests/helpers/socketIoRpcRequest.js @@ -21,16 +21,17 @@ const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v1`; const socketPool = {}; -const request = (endpoint, method, params) => new Promise(resolve => { - if (!socketPool[endpoint]) { - socketPool[endpoint] = io(endpoint, { forceNew: true, transports: ['websocket'] }); - } - const socket = socketPool[endpoint]; +const request = (endpoint, method, params) => + new Promise(resolve => { + if (!socketPool[endpoint]) { + socketPool[endpoint] = io(endpoint, { forceNew: true, transports: ['websocket'] }); + } + const socket = socketPool[endpoint]; - socket.emit('request', { jsonrpc: '2.0', method, params }, answer => { - resolve(answer); + socket.emit('request', { jsonrpc: '2.0', method, params }, answer => { + resolve(answer); + }); }); -}); const api = { get: async (...args) => { @@ -43,7 +44,7 @@ const api = { getJsonRpcV1: (...args) => api.get(wsRpcUrl, ...args), }; -const close = (socketName) => { +const close = socketName => { if (socketPool[socketName]) { socketPool[socketName].close(); delete socketPool[socketName]; diff --git a/tests/helpers/socketIoSubscribe.js b/tests/helpers/socketIoSubscribe.js index e4a5053f9..66a27701f 100644 --- a/tests/helpers/socketIoSubscribe.js +++ b/tests/helpers/socketIoSubscribe.js @@ -17,15 +17,17 @@ import io from 'socket.io-client'; const socketPool = {}; -export const subscribeAndReturn = (endpoint, event) => new Promise((resolve) => { - if (!socketPool[endpoint]) socketPool[endpoint] = io(endpoint, { forceNew: true, transports: ['websocket'] }); - const socket = socketPool[endpoint]; +export const subscribeAndReturn = (endpoint, event) => + new Promise(resolve => { + if (!socketPool[endpoint]) + socketPool[endpoint] = io(endpoint, { forceNew: true, transports: ['websocket'] }); + const socket = socketPool[endpoint]; - socket.on(event, answer => { - socket.close(); - resolve(answer); + socket.on(event, answer => { + socket.close(); + resolve(answer); + }); }); -}); export const closeAllConnections = () => { Object.keys(socketPool).forEach(s => socketPool[s].close()); diff --git a/tests/helpers/utils.js b/tests/helpers/utils.js index 4d3755599..487cf0c73 100644 --- a/tests/helpers/utils.js +++ b/tests/helpers/utils.js @@ -15,32 +15,33 @@ */ const { parse } = require('csv-parse'); -const waitForSuccess = (fn, successValidator, intervalMs = 500) => new Promise((resolve) => { - const intervalId = setInterval( - () => fn() - .then(result => { - clearInterval(intervalId); - if (!successValidator || successValidator(result)) resolve(result); - }) - .catch(), - intervalMs, - ); -}); +const waitForSuccess = (fn, successValidator, intervalMs = 2000) => + new Promise(resolve => { + const intervalId = setInterval( + () => + fn() + .then(result => { + if (!successValidator || successValidator(result)) { + clearInterval(intervalId); + resolve(result); + } + }) + .catch(), + intervalMs, + ); + }); -const isStringCsvParseable = (string, params) => parse( - string, - params, - (err) => !err, -); +const isStringCsvParsable = (string, params) => parse(string, params, err => !err); -const waitMs = (n) => new Promise((resolve) => { - setTimeout(() => { - resolve(); - }, n); -}); +const waitMs = n => + new Promise(resolve => { + setTimeout(() => { + resolve(); + }, n); + }); module.exports = { waitForSuccess, - isStringCsvParseable, + isStringCsvParsable, waitMs, }; diff --git a/tests/integration/api_v3/http/consistency_blocks.test.js b/tests/integration/api_v3/consistency/http/blocks.test.js similarity index 73% rename from tests/integration/api_v3/http/consistency_blocks.test.js rename to tests/integration/api_v3/consistency/http/blocks.test.js index 91fa18bff..f4f5d882c 100644 --- a/tests/integration/api_v3/http/consistency_blocks.test.js +++ b/tests/integration/api_v3/consistency/http/blocks.test.js @@ -15,8 +15,8 @@ */ jest.setTimeout(2147483647); -const config = require('../../../config'); -const { api } = require('../../../helpers/api'); +const config = require('../../../../config'); +const { api } = require('../../../../helpers/api'); // Add all the service endpoints to the array that you wish to compare the data against const baseUrls = [config.SERVICE_ENDPOINT]; @@ -24,7 +24,7 @@ const baseUrls = [config.SERVICE_ENDPOINT]; for (let i = 0; i < baseUrls.length; i++) { const baseUrl = baseUrls[i]; - xdescribe(`Generators API on baseUrl: ${baseUrl}`, () => { + describe(`Generators API on baseUrl: ${baseUrl}`, () => { const endpoint = `${baseUrl}/api/v3`; const generatorEndpoint = `${endpoint}/generators?limit=103`; const blockEndpoint = `${endpoint}/blocks?limit=1`; @@ -36,18 +36,22 @@ for (let i = 0; i < baseUrls.length; i++) { const validatorAddresses = response.data.map(({ address }) => address); for (let j = 0; j < validatorAddresses.length; j++) { - /* eslint-disable no-await-in-loop */ const n = validatorAddresses[j]; - const { meta: { total } } = await api.get(`${blockEndpoint}&generatorAddress=${n}`); - const { data: [{ generatedBlocks }] } = await api.get(`${validatorEndpoint}&address=${n}`); + const { + meta: { total }, + } = await api.get(`${blockEndpoint}&generatorAddress=${n}`); + const { + data: [{ generatedBlocks }], + } = await api.get(`${validatorEndpoint}&address=${n}`); try { expect(total).toEqual(generatedBlocks); } catch (e) { - console.error(`Mismatch --> validator: ${n}, blockProduced: ${total}, generatedBlocks: ${generatedBlocks}`); + console.error( + `Mismatch --> validator: ${n}, blockProduced: ${total}, generatedBlocks: ${generatedBlocks}`, + ); // console.error(e); // throw e; } - /* eslint-enable no-await-in-loop */ } }); }); diff --git a/tests/integration/api_v3/http/consistency_stakers.test.js b/tests/integration/api_v3/consistency/http/stakers.test.js similarity index 76% rename from tests/integration/api_v3/http/consistency_stakers.test.js rename to tests/integration/api_v3/consistency/http/stakers.test.js index 943b5eb37..f1f19d8ba 100644 --- a/tests/integration/api_v3/http/consistency_stakers.test.js +++ b/tests/integration/api_v3/consistency/http/stakers.test.js @@ -15,8 +15,8 @@ */ jest.setTimeout(2147483647); -const config = require('../../../config'); -const { api } = require('../../../helpers/api'); +const config = require('../../../../config'); +const { api } = require('../../../../helpers/api'); // Add all the service endpoints to the array that you wish to compare the data against const baseUrls = [config.SERVICE_ENDPOINT, config.SERVICE_ENDPOINT]; @@ -25,7 +25,7 @@ for (let i = 1; i < baseUrls.length; i++) { const baseUrl0 = baseUrls[0]; const baseUrl1 = baseUrls[i]; - xdescribe('Votes Received', () => { + describe('Stakers', () => { const endpoint0 = `${baseUrl0}/api/v3`; const endpoint1 = `${baseUrl1}/api/v3`; const generatorsEndpoint0 = `${endpoint0}/pos/validators?limit=103`; @@ -38,11 +38,14 @@ for (let i = 1; i < baseUrls.length; i++) { const validatorsNames = response.data.map(({ name }) => name); for (let j = 0; j < validatorsNames.length; j++) { - /* eslint-disable no-await-in-loop */ const name = validatorsNames[j]; - const { meta: { total: total0 } } = await api.get(`${stakersEndpoint0}?limit=1&name=${name}`); - const { meta: { total: total1 } } = await api.get(`${stakersEndpoint1}?limit=1&name=${name}`); + const { + meta: { total: total0 }, + } = await api.get(`${stakersEndpoint0}?limit=1&name=${name}`); + const { + meta: { total: total1 }, + } = await api.get(`${stakersEndpoint1}?limit=1&name=${name}`); try { expect(total0).toBe(total1); @@ -57,8 +60,12 @@ for (let i = 1; i < baseUrls.length; i++) { const limit = 100; for (let offset = 0; offset * limit < total0 + limit; offset++) { - const result0 = await api.get(`${stakersEndpoint0}?offset=${offset * limit}&limit=${limit}&name=${name}`); - const result1 = await api.get(`${stakersEndpoint1}?offset=${offset * limit}&limit=${limit}&name=${name}`); + const result0 = await api.get( + `${stakersEndpoint0}?offset=${offset * limit}&limit=${limit}&name=${name}`, + ); + const result1 = await api.get( + `${stakersEndpoint1}?offset=${offset * limit}&limit=${limit}&name=${name}`, + ); votes0.push(result0.data); votes1.push(result1.data); @@ -71,7 +78,6 @@ for (let i = 1; i < baseUrls.length; i++) { // console.error(e); // throw e; } - /* eslint-enable no-await-in-loop */ } }); }); diff --git a/tests/integration/api_v3/constants/invalidInputs.js b/tests/integration/api_v3/constants/invalidInputs.js index 7a163ea68..b5ab894f1 100644 --- a/tests/integration/api_v3/constants/invalidInputs.js +++ b/tests/integration/api_v3/constants/invalidInputs.js @@ -43,15 +43,19 @@ const invalidNames = [ '______%', ]; +const invalidChainIDs = [ + '0000000G', // contains invalid character 'G' + '0000000?', // contains invalid character '?' + '0 OR 1=1', // SQL injection +]; + const invalidTokenIDs = [ '0123456789abcdefG', // contains invalid character 'G' '0123456789abcdef?', // contains invalid character '?' '000000000 OR 1=1', // SQL injection ]; -const invalidTokenIDCSV = [ - '___%', -]; +const invalidTokenIDCSV = ['___%']; const invalidPartialSearches = [ '12345678901234567890123456789012345678901234567890123456789012345', // more than 64 characters @@ -62,35 +66,13 @@ const invalidPartialSearches = [ '___%', ]; -const invalidNamesCSV = [ - 'A!', - 'space space', - 'special?char', - '%%%%%', - '__%,__%', -]; +const invalidNamesCSV = ['A!', 'space space', 'special?char', '%%%%%', '__%,__%']; -const invalidLimits = [ - 'abc', - 0, - -1, - 105, - 'one', - '%', -]; +const invalidLimits = ['abc', 0, -1, 105, 'one', '%']; -const invalidOffsets = [ - 'abc', - -1, - 'one', - '%', -]; +const invalidOffsets = ['abc', -1, 'one', '%']; -const invalidChainIDCSV = [ - 'abcdefghijklmnop', - 'ABCDEFGH', - '__%', -]; +const invalidChainIDCSV = ['abcdefghijklmnop', 'ABCDEFGH', '__%']; module.exports = { invalidAddresses, @@ -99,6 +81,7 @@ module.exports = { invalidNames, invalidNamesCSV, invalidTokenIDs, + invalidChainIDs, invalidTokenIDCSV, invalidChainIDCSV, invalidPartialSearches, diff --git a/tests/integration/api_v3/constants/transactionsDryRun.js b/tests/integration/api_v3/constants/transactionsDryRun.js index 103fbd47c..8994d1449 100644 --- a/tests/integration/api_v3/constants/transactionsDryRun.js +++ b/tests/integration/api_v3/constants/transactionsDryRun.js @@ -55,27 +55,30 @@ const TRANSACTION_OBJECT_INVALID = { const TRANSACTION_OBJECT_PENDING = { module: 'token', command: 'transfer', - fee: '166000', + fee: '165000', nonce: '1', senderPublicKey: '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c', signatures: [ 'ea97e1131adbd6059d8922b14c1dc15a9070d28dfa36d5b492a6850a22fde2407d1d95e73785057adec5631906e2639d5e0e5974537606c9f45ce5af2e2fab06', ], params: { - amount: '1000000000000', - recipientAddress: 'lskv6v53emsaen6cwbbk226wusdpa6ojdonunka4x', + amount: '10000000000', + recipientAddress: 'e32913576c52e2b6b466d8fbd017f066778802b8', data: '', tokenID: '0400000000000000', }, id: 'c537391e35f015630350b2fbeda0c63d4fa2165f481557303fa4bdb176e16303', }; -const TRANSACTION_ENCODED_VALID = '0a05746f6b656e12087472616e7366657218012080c2d72f2a203972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c32290a0804000000000000001080a094a58d1d1a141284b458bbcd8ea1dcc6a630abc37a2654ce698722003a40c7fd1abf9a552fa9c91b4121c87ae2c97cb0fc0aecc87d0ee8b1aa742238eef4a6815ddba31e21144c9652a7bd5c05577ae1100eac34fba43da6fc4879b8f206'; +const TRANSACTION_ENCODED_VALID = + '0a05746f6b656e12087472616e7366657218012080c2d72f2a203972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c32290a0804000000000000001080a094a58d1d1a141284b458bbcd8ea1dcc6a630abc37a2654ce698722003a40c7fd1abf9a552fa9c91b4121c87ae2c97cb0fc0aecc87d0ee8b1aa742238eef4a6815ddba31e21144c9652a7bd5c05577ae1100eac34fba43da6fc4879b8f206'; // Transaction has less than minimum required fee -const TRANSACTION_ENCODED_INVALID = '0a05746f6b656e12087472616e7366657218002080c2d72f2a203e0c432cf0e04c31642b1a9aefde03215f778a5fe27ad102b1320b244efe446632280a0804000000000000001080c8afa0251a14e32913576c52e2b6b466d8fbd017f066778802b822003a40cd3e42528d47d63c643832297162e0786cfeabdf92b3adb8d33fdc40a65b1f367a93355b2a25c0abd74b26bba46c0fb47184fac2f49cd172c286836dd707af03'; +const TRANSACTION_ENCODED_INVALID = + '0a05746f6b656e12087472616e7366657218002080c2d72f2a203e0c432cf0e04c31642b1a9aefde03215f778a5fe27ad102b1320b244efe446632280a0804000000000000001080c8afa0251a14e32913576c52e2b6b466d8fbd017f066778802b822003a40cd3e42528d47d63c643832297162e0786cfeabdf92b3adb8d33fdc40a65b1f367a93355b2a25c0abd74b26bba46c0fb47184fac2f49cd172c286836dd707af03'; // Transaction has less than required fee for sending token transfer to a new address // i.e missing account initialization fee -const TRANSACTION_ENCODED_PENDING = '0a05746f6b656e12087472616e7366657218012088890a2a203972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c32280a0804000000000000001080c8afa0251a14e32913576c52e2b6b466d8fbd017f066778802b822003a401b02722ba836d8675becd9357be69b12546d8c2583730b4cc112df54b76288990bf53312e7cf426d91ffeeaaf8c87e9e38ef7205fa16ab237208d96f2d0f0c0e'; +const TRANSACTION_ENCODED_PENDING = + '0a05746f6b656e12087472616e7366657218012088890a2a203972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c32280a0804000000000000001080c8afa0251a14e32913576c52e2b6b466d8fbd017f066778802b822003a401b02722ba836d8675becd9357be69b12546d8c2583730b4cc112df54b76288990bf53312e7cf426d91ffeeaaf8c87e9e38ef7205fa16ab237208d96f2d0f0c0e'; const UNSIGNED_TRANSACTION_OBJECT = { module: 'token', diff --git a/tests/integration/api_v3/constants/transactionsEstimateFees.js b/tests/integration/api_v3/constants/transactionsEstimateFees.js index 223fbd018..59deadc0f 100644 --- a/tests/integration/api_v3/constants/transactionsEstimateFees.js +++ b/tests/integration/api_v3/constants/transactionsEstimateFees.js @@ -43,7 +43,9 @@ const AUTH_REGISTER_MULTI_SIGNATURE_TRANSACTION_OBJECT = { numberOfSignatures: 1, mandatoryKeys: [], optionalKeys: [], - signatures: ['cd3e42528d47d63c643832297162e0786cfeabdf92b3adb8d33fdc40a65b1f367a93355b2a25c0abd74b26bba46c0fb47184fac2f49cd172c286836dd707af03'], + signatures: [ + 'cd3e42528d47d63c643832297162e0786cfeabdf92b3adb8d33fdc40a65b1f367a93355b2a25c0abd74b26bba46c0fb47184fac2f49cd172c286836dd707af03', + ], }, }; @@ -53,8 +55,10 @@ const POS_REGISTER_VALIDATOR_TRANSACTION_OBJECT = { command: 'registerValidator', params: { name: 'test_validator', - blsKey: '8aeba1cc038ad2cf1ba6ae1479f293f1e3c074369c3afe623e6921ac4cd6c959647ca85fe197228c38dda1df18812d32', - proofOfPossession: 'abb6c31f5885022765301fbfcc6c34686ef9a9b0eec34cb487433558071ab57fd28852752f81dda00447e69d61f63f48174c10a0a0a2d34d230b9a75d903a0befdef82708e5f869ff75090c1b5ce85565e8a17e5e06c4cae305c5efb1f37d996', + blsKey: + '8aeba1cc038ad2cf1ba6ae1479f293f1e3c074369c3afe623e6921ac4cd6c959647ca85fe197228c38dda1df18812d32', + proofOfPossession: + 'abb6c31f5885022765301fbfcc6c34686ef9a9b0eec34cb487433558071ab57fd28852752f81dda00447e69d61f63f48174c10a0a0a2d34d230b9a75d903a0befdef82708e5f869ff75090c1b5ce85565e8a17e5e06c4cae305c5efb1f37d996', generatorKey: '59274923432b74133be4def9c9f8e544bf032184a2153b0ca34b1dd5669f5fdf', }, }; @@ -133,8 +137,10 @@ const LEGACY_REGISTER_KEYS_TRANSACTION_OBJECT = { module: 'legacy', command: 'registerKeys', params: { - blsKey: '8aeba1cc038ad2cf1ba6ae1479f293f1e3c074369c3afe623e6921ac4cd6c959647ca85fe197228c38dda1df18812d32', - proofOfPossession: 'abb6c31f5885022765301fbfcc6c34686ef9a9b0eec34cb487433558071ab57fd28852752f81dda00447e69d61f63f48174c10a0a0a2d34d230b9a75d903a0befdef82708e5f869ff75090c1b5ce85565e8a17e5e06c4cae305c5efb1f37d996', + blsKey: + '8aeba1cc038ad2cf1ba6ae1479f293f1e3c074369c3afe623e6921ac4cd6c959647ca85fe197228c38dda1df18812d32', + proofOfPossession: + 'abb6c31f5885022765301fbfcc6c34686ef9a9b0eec34cb487433558071ab57fd28852752f81dda00447e69d61f63f48174c10a0a0a2d34d230b9a75d903a0befdef82708e5f869ff75090c1b5ce85565e8a17e5e06c4cae305c5efb1f37d996', generatorKey: '59274923432b74133be4def9c9f8e544bf032184a2153b0ca34b1dd5669f5fdf', }, }; diff --git a/tests/integration/api_v3/constants/validatorValidateBLSKey.js b/tests/integration/api_v3/constants/validatorValidateBLSKey.js index e0e1e7c0a..99d258cb3 100644 --- a/tests/integration/api_v3/constants/validatorValidateBLSKey.js +++ b/tests/integration/api_v3/constants/validatorValidateBLSKey.js @@ -14,13 +14,17 @@ * */ const BLS_KEY = { - VALID: 'b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81', - INVALID: '1301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81', + VALID: + 'b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81', + INVALID: + '1301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81', }; const PROOF_OF_POSSESSION = { - VALID: '88bb31b27eae23038e14f9d9d1b628a39f5881b5278c3c6f0249f81ba0deb1f68aa5f8847854d6554051aa810fdf1cdb02df4af7a5647b1aa4afb60ec6d446ee17af24a8a50876ffdaf9bf475038ec5f8ebeda1c1c6a3220293e23b13a9a5d26', - INVALID: '18bb31b27eae23038e14f9d9d1b628a39f5881b5278c3c6f0249f81ba0deb1f68aa5f8847854d6554051aa810fdf1cdb02df4af7a5647b1aa4afb60ec6d446ee17af24a8a50876ffdaf9bf475038ec5f8ebeda1c1c6a3220293e23b13a9a5d26', + VALID: + '88bb31b27eae23038e14f9d9d1b628a39f5881b5278c3c6f0249f81ba0deb1f68aa5f8847854d6554051aa810fdf1cdb02df4af7a5647b1aa4afb60ec6d446ee17af24a8a50876ffdaf9bf475038ec5f8ebeda1c1c6a3220293e23b13a9a5d26', + INVALID: + '18bb31b27eae23038e14f9d9d1b628a39f5881b5278c3c6f0249f81ba0deb1f68aa5f8847854d6554051aa810fdf1cdb02df4af7a5647b1aa4afb60ec6d446ee17af24a8a50876ffdaf9bf475038ec5f8ebeda1c1c6a3220293e23b13a9a5d26', }; module.exports = { diff --git a/tests/integration/api_v3/events/blocks.test.js b/tests/integration/api_v3/events/blocks.test.js index fa9cb944e..0a9b2a7dd 100644 --- a/tests/integration/api_v3/events/blocks.test.js +++ b/tests/integration/api_v3/events/blocks.test.js @@ -15,19 +15,11 @@ */ const config = require('../../../config'); -const { - subscribeAndReturn, - closeAllConnections, -} = require('../../../helpers/socketIoSubscribe'); +const { subscribeAndReturn, closeAllConnections } = require('../../../helpers/socketIoSubscribe'); -const { - goodRequestSchema, - metaSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { goodRequestSchema, metaSchema } = require('../../../schemas/httpGenerics.schema'); -const { - blockSchema, -} = require('../../../schemas/api_v3/block.schema'); +const { blockSchema } = require('../../../schemas/api_v3/block.schema'); const endpoint = `${config.SERVICE_ENDPOINT_RPC}/blockchain`; diff --git a/tests/integration/api_v3/events/transactions.test.js b/tests/integration/api_v3/events/transactions.test.js index 912542d09..8111b59bc 100644 --- a/tests/integration/api_v3/events/transactions.test.js +++ b/tests/integration/api_v3/events/transactions.test.js @@ -16,34 +16,33 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - subscribeAndReturn, - closeAllConnections, -} = require('../../../helpers/socketIoSubscribe'); +const { subscribeAndReturn, closeAllConnections } = require('../../../helpers/socketIoSubscribe'); -const { - goodRequestSchema, - metaSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { goodRequestSchema, metaSchema } = require('../../../schemas/httpGenerics.schema'); const { transactionSchema, postTransactionSchema, } = require('../../../schemas/api_v3/transaction.schema'); +const { createTokenTransferTx } = require('../txUtil/createTx'); +const { encodeTransaction } = require('../txUtil/encodeTx'); + const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; const endpoint = `${config.SERVICE_ENDPOINT_RPC}/blockchain`; +const authEndpoint = `${baseUrlV3}/auth`; -// TODO: Enable/update test cases once test blockchain is updated -xdescribe('Test subscribe API transaction event', () => { +describe('Test subscribe API transaction event', () => { it('event new.transactions', async () => { + const transaction = await createTokenTransferTx(authEndpoint); + const encodedTx = await encodeTransaction(transaction, baseUrlV3); + // Post signed transaction to lisk-core (test blockchain CI) - const postTransaction = await api.post( - `${baseUrlV3}/transactions`, - { transaction: '0802100018002080c2d72f2a200fe9a3f1a21b5530f27f87a414b549e79a940bf24fdf2b2f05e7f22aeeecc86a32240880c2d72f1214df0e187bb3895806261c87cf66e1772566ee8e581a07746573742074783a40a972e48ab2ed5222311538ba7bbd3ab139e2d1e8ce07096a277e53859beaedd3641b6cd5498d489514a2f9dbeb1092c4ceb27cd4f387ca3687dd8c3cfc833d02' }, - ); + const postTransaction = await api.post(`${baseUrlV3}/transactions`, { + transaction: encodedTx, + }); expect(postTransaction).toMap(postTransactionSchema); // Subscribe to event update.transactions diff --git a/tests/integration/api_v3/http/auth.test.js b/tests/integration/api_v3/http/auth.test.js index 2c689ded7..18d13b3ca 100644 --- a/tests/integration/api_v3/http/auth.test.js +++ b/tests/integration/api_v3/http/auth.test.js @@ -16,9 +16,7 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { goodRequestSchemaForAuth, @@ -34,7 +32,9 @@ const endpoint = `${baseUrlV3}/auth`; describe('Auth accounts API', () => { let refTransaction; beforeAll(async () => { - const response = await api.get(`${baseUrlV3}/transactions?limit=1&moduleCommand=auth:registerMultisignature`); + const response = await api.get( + `${baseUrlV3}/transactions?limit=1&moduleCommand=auth:registerMultisignature`, + ); [refTransaction] = response.data; }); @@ -52,7 +52,6 @@ describe('Auth accounts API', () => { it('should return bad request for an invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?address=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/blockchainApps.test.js b/tests/integration/api_v3/http/blockchainApps.test.js index de48ec536..318ad29a7 100644 --- a/tests/integration/api_v3/http/blockchainApps.test.js +++ b/tests/integration/api_v3/http/blockchainApps.test.js @@ -16,14 +16,16 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); +const { blockchainAppsSchema } = require('../../../schemas/api_v3/blockchainApps.schema'); const { - blockchainAppsSchema, -} = require('../../../schemas/api_v3/blockchainApps.schema'); -const { invalidOffsets, invalidLimits, invalidPartialSearches, invalidChainIDCSV, invalidNames } = require('../constants/invalidInputs'); + invalidOffsets, + invalidLimits, + invalidPartialSearches, + invalidChainIDCSV, + invalidNames, +} = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -107,7 +109,6 @@ describe('Blockchain apps API', () => { it('should return bad request for an invalid search param', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?search=${invalidPartialSearches[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -115,7 +116,6 @@ describe('Blockchain apps API', () => { it('should return bad request for an invalid chainID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?chainID=${invalidChainIDCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -123,7 +123,6 @@ describe('Blockchain apps API', () => { it('should return bad request for an invalid chain name param', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?chainName=${invalidNames[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -156,7 +155,6 @@ describe('Blockchain apps API', () => { it('should return bad request for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -164,7 +162,6 @@ describe('Blockchain apps API', () => { it('should return bad request for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/blockchainAppsMetaList.test.js b/tests/integration/api_v3/http/blockchainAppsMetaList.test.js index b1aed9785..aea16122a 100644 --- a/tests/integration/api_v3/http/blockchainAppsMetaList.test.js +++ b/tests/integration/api_v3/http/blockchainAppsMetaList.test.js @@ -25,7 +25,13 @@ const { const { blockchainAppMetaListSchema, } = require('../../../schemas/api_v3/blockchainAppsMetaListSchema.schema'); -const { invalidLimits, invalidOffsets, invalidPartialSearches, invalidNames, invalidChainIDCSV } = require('../constants/invalidInputs'); +const { + invalidLimits, + invalidOffsets, + invalidPartialSearches, + invalidNames, + invalidChainIDCSV, +} = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -141,7 +147,6 @@ describe('Blockchain application meta list API', () => { it('should return bad request for an invalid search param', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?search=${invalidPartialSearches[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -149,7 +154,6 @@ describe('Blockchain application meta list API', () => { it('should return bad request for an invalid chainID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?chainID=${invalidChainIDCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -157,7 +161,6 @@ describe('Blockchain application meta list API', () => { it('should return bad request for an invalid chainName param', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?chainName=${invalidNames[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -185,7 +188,6 @@ describe('Blockchain application meta list API', () => { it('should return bad request for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -193,7 +195,6 @@ describe('Blockchain application meta list API', () => { it('should return bad request for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/blockchainAppsMetadata.test.js b/tests/integration/api_v3/http/blockchainAppsMetadata.test.js index 14faedf2b..ed258cf70 100644 --- a/tests/integration/api_v3/http/blockchainAppsMetadata.test.js +++ b/tests/integration/api_v3/http/blockchainAppsMetadata.test.js @@ -15,7 +15,9 @@ */ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { CHAIN_ID_PREFIX_NETWORK_MAP } = require('../../../../services/blockchain-app-registry/config'); +const { + CHAIN_ID_PREFIX_NETWORK_MAP, +} = require('../../../../services/blockchain-app-registry/config'); const { badRequestSchema, @@ -26,7 +28,13 @@ const { const { blockchainAppMetadataSchema, } = require('../../../schemas/api_v3/blockchainAppsMetadataSchema.schema'); -const { invalidChainIDCSV, invalidNamesCSV, invalidOffsets, invalidLimits, invalidPartialSearches } = require('../constants/invalidInputs'); +const { + invalidChainIDCSV, + invalidNamesCSV, + invalidOffsets, + invalidLimits, + invalidPartialSearches, +} = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -88,6 +96,7 @@ describe('Blockchain applications metadata API', () => { expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toEqual(1); + expect(response.data.length).toBeLessThanOrEqual(10); response.data.map(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(response.meta).toMap(metaSchema); }); @@ -97,17 +106,19 @@ describe('Blockchain applications metadata API', () => { expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); - expect(response.data.length).toBeLessThanOrEqual(2); + expect(response.data.length).toBeLessThanOrEqual(10); response.data.map(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(response.meta).toMap(metaSchema); }); it('should retrieve blockchain application off-chain metadata by CSV of chainID and network', async () => { - const response = await api.get(`${endpoint}?chainID=02000000,${curChainID}&network=betanet,${curNetwork}`); + const response = await api.get( + `${endpoint}?chainID=02000000,${curChainID}&network=betanet,${curNetwork}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); - expect(response.data.length).toBeLessThanOrEqual(2); + expect(response.data.length).toBeLessThanOrEqual(10); response.data.map(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(response.meta).toMap(metaSchema); }); @@ -117,6 +128,7 @@ describe('Blockchain applications metadata API', () => { expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeLessThanOrEqual(10); response.data.map(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(response.meta).toMap(metaSchema); }); @@ -126,7 +138,7 @@ describe('Blockchain applications metadata API', () => { expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); - expect(response.data.length).toBeLessThanOrEqual(3); + expect(response.data.length).toBeLessThanOrEqual(10); response.data.map(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(response.meta).toMap(metaSchema); }); @@ -197,8 +209,10 @@ describe('Blockchain applications metadata API', () => { expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(10); - response.data.map(blockchainAppMetadata => expect(blockchainAppMetadata) - .toMap(blockchainAppMetadataSchema), { isDefault: true }); + response.data.map( + blockchainAppMetadata => expect(blockchainAppMetadata).toMap(blockchainAppMetadataSchema), + { isDefault: true }, + ); expect(response.meta).toMap(metaSchema); }); @@ -208,8 +222,10 @@ describe('Blockchain applications metadata API', () => { expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(10); - response.data.map(blockchainAppMetadata => expect(blockchainAppMetadata) - .toMap(blockchainAppMetadataSchema), { isDefault: false }); + response.data.map( + blockchainAppMetadata => expect(blockchainAppMetadata).toMap(blockchainAppMetadataSchema), + { isDefault: false }, + ); expect(response.meta).toMap(metaSchema); }); @@ -235,7 +251,6 @@ describe('Blockchain applications metadata API', () => { it('should return bad request for an invalid chain ID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?chainID=${invalidChainIDCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -243,7 +258,6 @@ describe('Blockchain applications metadata API', () => { it('should return bad request for an invalid chain name param', async () => { for (let i = 0; i < invalidNamesCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?chainName=${invalidNamesCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -251,7 +265,6 @@ describe('Blockchain applications metadata API', () => { it('should return bad request for an invalid display name param', async () => { for (let i = 0; i < invalidNamesCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?displayName=${invalidNamesCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -264,7 +277,6 @@ describe('Blockchain applications metadata API', () => { it('should return bad request for an invalid search param', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?search=${invalidPartialSearches[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -272,7 +284,6 @@ describe('Blockchain applications metadata API', () => { it('should return bad request for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -280,7 +291,6 @@ describe('Blockchain applications metadata API', () => { it('should return bad request for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/blockchainAppsStatistics.test.js b/tests/integration/api_v3/http/blockchainAppsStatistics.test.js index 7d50214d3..5fe9f96e8 100644 --- a/tests/integration/api_v3/http/blockchainAppsStatistics.test.js +++ b/tests/integration/api_v3/http/blockchainAppsStatistics.test.js @@ -16,9 +16,7 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { blockchainAppsStatsSchema, diff --git a/tests/integration/api_v3/http/blockchainAppsTokenMetadata.test.js b/tests/integration/api_v3/http/blockchainAppsTokenMetadata.test.js index b12ab68c2..5a855951c 100644 --- a/tests/integration/api_v3/http/blockchainAppsTokenMetadata.test.js +++ b/tests/integration/api_v3/http/blockchainAppsTokenMetadata.test.js @@ -15,7 +15,9 @@ */ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { CHAIN_ID_PREFIX_NETWORK_MAP } = require('../../../../services/blockchain-app-registry/config'); +const { + CHAIN_ID_PREFIX_NETWORK_MAP, +} = require('../../../../services/blockchain-app-registry/config'); const { badRequestSchema, @@ -26,7 +28,14 @@ const { const { blockchainAppsTokenMetadataSchema, } = require('../../../schemas/api_v3/blockchainAppsTokenMetadataSchema.schema'); -const { invalidNamesCSV, invalidTokenIDCSV, invalidOffsets, invalidLimits, invalidNames, invalidChainIDCSV } = require('../constants/invalidInputs'); +const { + invalidNamesCSV, + invalidTokenIDCSV, + invalidOffsets, + invalidLimits, + invalidNames, + invalidChainIDCSV, +} = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -177,7 +186,9 @@ describe('Blockchain application tokens metadata API', () => { }); it('should return blockchain application off-chain metadata for tokens by chainID and csv tokenName', async () => { - const response = await api.get(`${endpoint}?network=${curNetwork}&tokenName=Lik,Lisk&chainID=${curChainID}`); + const response = await api.get( + `${endpoint}?network=${curNetwork}&tokenName=Lik,Lisk&chainID=${curChainID}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(0); @@ -279,7 +290,6 @@ describe('Blockchain application tokens metadata API', () => { it('should return bad request for an invalid chainID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?chainID=${invalidChainIDCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -287,7 +297,6 @@ describe('Blockchain application tokens metadata API', () => { it('should return bad request for an invalid chainName param', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?chainName=${invalidNames[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -295,7 +304,6 @@ describe('Blockchain application tokens metadata API', () => { it('should return bad request for an invalid tokenName param', async () => { for (let i = 0; i < invalidNamesCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?tokenName=${invalidNamesCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -303,7 +311,6 @@ describe('Blockchain application tokens metadata API', () => { it('should return bad request for an invalid tokenID param', async () => { for (let i = 0; i < invalidTokenIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?tokenID=${invalidTokenIDCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -316,7 +323,6 @@ describe('Blockchain application tokens metadata API', () => { it('should return bad request for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -324,7 +330,6 @@ describe('Blockchain application tokens metadata API', () => { it('should return bad request for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/blockchainAppsTokenSupportedMetadata.test.js b/tests/integration/api_v3/http/blockchainAppsTokenSupportedMetadata.test.js index 722661427..1e5b07cc7 100644 --- a/tests/integration/api_v3/http/blockchainAppsTokenSupportedMetadata.test.js +++ b/tests/integration/api_v3/http/blockchainAppsTokenSupportedMetadata.test.js @@ -100,7 +100,6 @@ describe('Blockchain application supported tokens metadata API', () => { it('should return bad request for an invalid chainID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?chainID=${invalidChainIDCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -108,7 +107,6 @@ describe('Blockchain application supported tokens metadata API', () => { it('should return bad request for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -116,7 +114,6 @@ describe('Blockchain application supported tokens metadata API', () => { it('should return bad request for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/blocks.assets.test.js b/tests/integration/api_v3/http/blocks.assets.test.js index 418550782..e685ea546 100644 --- a/tests/integration/api_v3/http/blocks.assets.test.js +++ b/tests/integration/api_v3/http/blocks.assets.test.js @@ -15,6 +15,7 @@ */ import moment from 'moment'; import { invalidBlockIDs, invalidLimits, invalidOffsets } from '../constants/invalidInputs'; +import { waitMs } from '../../../helpers/utils'; const config = require('../../../config'); const { api } = require('../../../helpers/api'); @@ -22,6 +23,7 @@ const { api } = require('../../../helpers/api'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; const endpoint = `${baseUrlV3}/blocks/assets`; +const invokeEndpoint = `${baseUrlV3}/invoke`; const { goodRequestSchema, @@ -30,16 +32,39 @@ const { metaSchema, } = require('../../../schemas/httpGenerics.schema'); -const { - blockAssetSchema, -} = require('../../../schemas/api_v3/block.schema'); +const { blockAssetSchema } = require('../../../schemas/api_v3/block.schema'); describe('Blocks Assets API', () => { let refBlockAssets; let refAsset; + beforeAll(async () => { - [refBlockAssets] = (await api.get(`${endpoint}?height=0`)).data; - [refAsset] = refBlockAssets.assets; + let retries = 10; + let success = false; + + while (retries > 0 && !success) { + try { + const invokeRes = await api.post(invokeEndpoint, { endpoint: 'system_getNodeInfo' }); + const { genesisHeight } = invokeRes.data; + + [refBlockAssets = {}] = (await api.get(`${endpoint}?height=${genesisHeight}`)).data; + [refAsset] = refBlockAssets.assets; + + if (refAsset) { + success = true; + } + } catch (error) { + console.error(`Error fetching transactions. Retries left: ${retries}`); + retries--; + + // Delay by 3 sec + await waitMs(3000); + } + } + + if (!success) { + throw new Error('Failed to fetch block assets after 10 retries'); + } }); describe('GET /blocks/assets', () => { @@ -52,8 +77,9 @@ describe('Blocks Assets API', () => { response.data.forEach((blockAssets, i) => { expect(blockAssets).toMap(blockAssetSchema); if (i < response.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(response.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + response.data[i + 1].block.height + 1, + ); } }); expect(response.meta).toMap(metaSchema); @@ -68,8 +94,9 @@ describe('Blocks Assets API', () => { response.data.forEach((blockAssets, i) => { expect(blockAssets).toMap(blockAssetSchema); if (i < response.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(response.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + response.data[i + 1].block.height + 1, + ); } }); expect(response.meta).toMap(metaSchema); @@ -81,7 +108,7 @@ describe('Blocks Assets API', () => { expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(10); - response.data.forEach((blockAssets) => { + response.data.forEach(blockAssets => { expect(blockAssets).toMap(blockAssetSchema); blockAssets.assets.forEach(asset => expect(asset.module).toEqual(refAsset.module)); }); @@ -95,7 +122,7 @@ describe('Blocks Assets API', () => { expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(10); - response.data.forEach((blockAssets) => { + response.data.forEach(blockAssets => { expect(blockAssets).toMap(blockAssetSchema); blockAssets.assets.forEach(asset => expect(modules).toContain(asset.module)); }); @@ -107,7 +134,7 @@ describe('Blocks Assets API', () => { expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toEqual(1); - response.data.forEach((blockAssets) => { + response.data.forEach(blockAssets => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.id).toEqual(refBlockAssets.block.id); }); @@ -119,7 +146,7 @@ describe('Blocks Assets API', () => { expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toEqual(1); - response.data.forEach((blockAssets) => { + response.data.forEach(blockAssets => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.height).toEqual(refBlockAssets.block.height); }); @@ -136,8 +163,9 @@ describe('Blocks Assets API', () => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.timestamp).toEqual(refBlockAssets.block.timestamp); if (i < response.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(response.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + response.data[i + 1].block.height + 1, + ); } }); expect(response.meta).toMap(metaSchema); @@ -157,7 +185,6 @@ describe('Blocks Assets API', () => { it('should return bad request if requested with invalid block ID', async () => { for (let i = 0; i < invalidBlockIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?blockID=${invalidBlockIDs[i]}`, 400); expect(response).toMap(wrongInputParamSchema); } @@ -165,7 +192,6 @@ describe('Blocks Assets API', () => { it('should return bad request if requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(wrongInputParamSchema); } @@ -173,7 +199,6 @@ describe('Blocks Assets API', () => { it('should return bad request if requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(wrongInputParamSchema); } @@ -192,7 +217,9 @@ describe('Blocks Assets API', () => { describe('Retrieve blocks assets within timestamps', () => { it('should return blocks assets within set timestamps are returned', async () => { - const from = moment(refBlockAssets.block.timestamp * (10 ** 3)).subtract(1, 'day').unix(); + const from = moment(refBlockAssets.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const toTimestamp = refBlockAssets.block.timestamp; const response = await api.get(`${endpoint}?timestamp=${from}:${toTimestamp}&limit=100`); expect(response).toMap(goodRequestSchema); @@ -204,15 +231,18 @@ describe('Blocks Assets API', () => { expect(blockAssets.block.timestamp).toBeGreaterThanOrEqual(from); expect(blockAssets.block.timestamp).toBeLessThanOrEqual(toTimestamp); if (i < response.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(response.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + response.data[i + 1].block.height + 1, + ); } }); expect(response.meta).toMap(metaSchema); }); it('should return blocks assets with half bounded range: fromTimestamp', async () => { - const from = moment(refBlockAssets.block.timestamp * (10 ** 3)).subtract(1, 'day').unix(); + const from = moment(refBlockAssets.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const response = await api.get(`${endpoint}?timestamp=${from}:&limit=100`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); @@ -222,8 +252,9 @@ describe('Blocks Assets API', () => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.timestamp).toBeGreaterThanOrEqual(from); if (i < response.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(response.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + response.data[i + 1].block.height + 1, + ); } }); expect(response.meta).toMap(metaSchema); @@ -240,8 +271,9 @@ describe('Blocks Assets API', () => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.timestamp).toBeLessThanOrEqual(toTimestamp); if (i < response.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(response.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + response.data[i + 1].block.height + 1, + ); } }); expect(response.meta).toMap(metaSchema); @@ -262,8 +294,9 @@ describe('Blocks Assets API', () => { expect(blockAssets.block.height).toBeGreaterThanOrEqual(minHeight); expect(blockAssets.block.height).toBeLessThanOrEqual(maxHeight); if (i < response.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(response.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + response.data[i + 1].block.height + 1, + ); } }); expect(response.meta).toMap(metaSchema); @@ -280,8 +313,9 @@ describe('Blocks Assets API', () => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.height).toBeGreaterThanOrEqual(minHeight); if (i < response.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(response.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + response.data[i + 1].block.height + 1, + ); } }); expect(response.meta).toMap(metaSchema); @@ -298,8 +332,9 @@ describe('Blocks Assets API', () => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.height).toBeLessThanOrEqual(maxHeight); if (i < response.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(response.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + response.data[i + 1].block.height + 1, + ); } }); expect(response.meta).toMap(metaSchema); diff --git a/tests/integration/api_v3/http/blocks.test.js b/tests/integration/api_v3/http/blocks.test.js index 163b73b68..332f203d0 100644 --- a/tests/integration/api_v3/http/blocks.test.js +++ b/tests/integration/api_v3/http/blocks.test.js @@ -14,7 +14,13 @@ * */ import moment from 'moment'; -import { invalidAddresses, invalidLimits, invalidBlockIDs, invalidOffsets } from '../constants/invalidInputs'; +import { + invalidAddresses, + invalidLimits, + invalidBlockIDs, + invalidOffsets, +} from '../constants/invalidInputs'; +import { waitMs } from '../../../helpers/utils'; const config = require('../../../config'); const { api } = require('../../../helpers/api'); @@ -30,14 +36,33 @@ const { metaSchema, } = require('../../../schemas/httpGenerics.schema'); -const { - blockSchema, -} = require('../../../schemas/api_v3/block.schema'); +const { blockSchema } = require('../../../schemas/api_v3/block.schema'); describe('Blocks API', () => { let refBlock; beforeAll(async () => { - [refBlock] = (await api.get(`${endpoint}?limit=1&offset=5`)).data; + let retries = 10; + let success = false; + + while (retries > 0 && !success) { + try { + [refBlock] = (await api.get(`${endpoint}?limit=1&offset=5`)).data; + + if (refBlock) { + success = true; + } + } catch (error) { + console.error(`Error fetching blocks. Retries left: ${retries}`); + retries--; + + // Delay by 3 sec + await waitMs(3000); + } + } + + if (!success) { + throw new Error('Failed to fetch blocks even after retrying.'); + } }); describe('GET /blocks', () => { @@ -76,7 +101,7 @@ describe('Blocks API', () => { expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toEqual(1); - response.data.forEach((block) => { + response.data.forEach(block => { expect(block).toMap(blockSchema, { id: refBlock.id }); }); expect(response.meta).toMap(metaSchema); @@ -89,7 +114,7 @@ describe('Blocks API', () => { expect(response.data.length).toEqual(1); expect(response.data[0].height).toEqual(refBlock.height); expect(response.data[0]).toEqual(refBlock); - response.data.forEach((block) => { + response.data.forEach(block => { expect(block).toMap(blockSchema, { height: refBlock.height }); }); expect(response.meta).toMap(metaSchema); @@ -116,7 +141,7 @@ describe('Blocks API', () => { expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBe(1); - response.data.forEach((block) => { + response.data.forEach(block => { expect(block).toMap(blockSchema, { timestamp: refBlock.timestamp }); }); expect(response.meta).toMap(metaSchema); @@ -141,7 +166,6 @@ describe('Blocks API', () => { it('should return bad request when requested with invalid Addresse', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?generatorAddress=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -149,7 +173,6 @@ describe('Blocks API', () => { it('should return bad request when requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -157,7 +180,6 @@ describe('Blocks API', () => { it('should return bad request when requested with offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -165,7 +187,6 @@ describe('Blocks API', () => { it('should return bad request when requested with invalid block ID', async () => { for (let i = 0; i < invalidBlockIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?blockID=${invalidBlockIDs[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -179,7 +200,9 @@ describe('Blocks API', () => { describe('Retrieve blocks list within timestamps', () => { it('should return blocks within set timestamps', async () => { - const from = moment(refBlock.timestamp * (10 ** 3)).subtract(1, 'day').unix(); + const from = moment(refBlock.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const toTimestamp = refBlock.timestamp; const response = await api.get(`${endpoint}?timestamp=${from}:${toTimestamp}`); expect(response).toMap(goodRequestSchema); @@ -198,7 +221,9 @@ describe('Blocks API', () => { }); it('should return blocks with half bounded range: fromTimestamp', async () => { - const from = moment(refBlock.timestamp * (10 ** 3)).subtract(1, 'day').unix(); + const from = moment(refBlock.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const response = await api.get(`${endpoint}?timestamp=${from}:`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); @@ -363,7 +388,9 @@ describe('Blocks API', () => { describe('Fetch blocks based on multiple request params', () => { it('should return blocks by generatorAddress sorted by timestamp descending, limit & offset', async () => { - const response = await api.get(`${endpoint}?generatorAddress=${refBlock.generator.address}&sort=timestamp:desc&limit=100`); + const response = await api.get( + `${endpoint}?generatorAddress=${refBlock.generator.address}&sort=timestamp:desc&limit=100`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); @@ -383,7 +410,9 @@ describe('Blocks API', () => { }); it('should return blocks by generatorAddress sorted by height ascending, limit & offset', async () => { - const response = await api.get(`${endpoint}?generatorAddress=${refBlock.generator.address}&sort=height:asc&limit=5`); + const response = await api.get( + `${endpoint}?generatorAddress=${refBlock.generator.address}&sort=height:asc&limit=5`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); @@ -411,7 +440,9 @@ describe('Blocks API', () => { }); it('should return 200 OK when queried with invalid combination: blockID and wrong timestamp', async () => { - const timestamp = moment(refBlock.timestamp * (10 ** 3)).subtract(1, 'day').unix(); + const timestamp = moment(refBlock.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const response = await api.get(`${endpoint}?blockID=${refBlock.id}×tamp=${timestamp}`); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBe(0); diff --git a/tests/integration/api_v3/http/events.test.js b/tests/integration/api_v3/http/events.test.js index f9842ce55..452b273c5 100644 --- a/tests/integration/api_v3/http/events.test.js +++ b/tests/integration/api_v3/http/events.test.js @@ -24,15 +24,18 @@ const { metaSchema, } = require('../../../schemas/httpGenerics.schema'); -const { - eventSchema, -} = require('../../../schemas/api_v3/event.schema'); +const { eventSchema } = require('../../../schemas/api_v3/event.schema'); const baseAddress = config.SERVICE_ENDPOINT; const baseUrl = `${baseAddress}/api/v3`; const endpoint = `${baseUrl}/events`; -const { invalidAddresses, invalidBlockIDs, invalidOffsets, invalidLimits } = require('../constants/invalidInputs'); +const { + invalidAddresses, + invalidBlockIDs, + invalidOffsets, + invalidLimits, +} = require('../constants/invalidInputs'); describe('Events API', () => { let refTransaction; @@ -86,7 +89,6 @@ describe('Events API', () => { it('should return bad request for invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?blockID=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -94,7 +96,6 @@ describe('Events API', () => { it('should return bad request for invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -141,7 +142,10 @@ describe('Events API', () => { }); it('should return bad request for long invalid transactionID', async () => { - const response = await api.get(`${endpoint}?transactionID=a0833fb5b5534a0c53c3a766bf356c92df2a28e1730fba85667b24f139f65b35578`, 400); + const response = await api.get( + `${endpoint}?transactionID=a0833fb5b5534a0c53c3a766bf356c92df2a28e1730fba85667b24f139f65b35578`, + 400, + ); expect(response).toMap(badRequestSchema); }); }); @@ -185,7 +189,6 @@ describe('Events API', () => { it('should return bad request for invalid block ID', async () => { for (let i = 0; i < invalidBlockIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?blockID=${invalidBlockIDs[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -280,7 +283,6 @@ describe('Events API', () => { it('should return bad request for invalid sender address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?senderAddress=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -289,7 +291,9 @@ describe('Events API', () => { describe('Retrieve event list within timestamps', () => { it('should return events within set timestamps', async () => { - const from = moment(refTransaction.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refTransaction.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const toTimestamp = refTransaction.block.timestamp; const response = await api.get(`${endpoint}?timestamp=${from}:${toTimestamp}`); expect(response).toMap(goodRequestSchema); @@ -314,7 +318,9 @@ describe('Events API', () => { }); it('should return events with half bounded range: fromTimestamp', async () => { - const from = moment(refTransaction.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refTransaction.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const response = await api.get(`${endpoint}?timestamp=${from}:`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); @@ -442,7 +448,10 @@ describe('Events API', () => { const expectedStatusCode = 500; const minHeight = refTransaction.block.height; const maxHeight = refTransaction.block.height + 100; - const response = await api.get(`${endpoint}?height=${maxHeight}:${minHeight}&limit=100`, expectedStatusCode); + const response = await api.get( + `${endpoint}?height=${maxHeight}:${minHeight}&limit=100`, + expectedStatusCode, + ); expect(response).toMap(badRequestSchema); }); }); @@ -493,7 +502,9 @@ describe('Events API', () => { describe('Fetch events based on multiple request params', () => { it('should return event when queried with transactionID and blockID', async () => { - const response = await api.get(`${endpoint}?transactionID=${refTransaction.id}&blockID=${refTransaction.block.id}`); + const response = await api.get( + `${endpoint}?transactionID=${refTransaction.id}&blockID=${refTransaction.block.id}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); @@ -508,7 +519,9 @@ describe('Events API', () => { }); it('should return event when queried with transactionID and height', async () => { - const response = await api.get(`${endpoint}?transactionID=${refTransaction.id}&height=${refTransaction.block.height}`); + const response = await api.get( + `${endpoint}?transactionID=${refTransaction.id}&height=${refTransaction.block.height}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); @@ -524,7 +537,10 @@ describe('Events API', () => { it('should return 400 BAD REQUEST with unsupported params', async () => { const expectedStatusCode = 400; - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}`, expectedStatusCode); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}`, + expectedStatusCode, + ); expect(response).toMap(badRequestSchema); }); diff --git a/tests/integration/api_v3/http/export.test.js b/tests/integration/api_v3/http/export.test.js index 211cb3472..f801c238e 100644 --- a/tests/integration/api_v3/http/export.test.js +++ b/tests/integration/api_v3/http/export.test.js @@ -17,9 +17,7 @@ const moment = require('moment'); const config = require('../../../config'); const exportConfig = require('../../../../services/export/config'); -const { - api, -} = require('../../../helpers/api'); +const { api } = require('../../../helpers/api'); const { metaSchemaForExport, @@ -28,15 +26,9 @@ const { goodRequestSchemaForExport, } = require('../../../schemas/api_v3/export.schema'); -const { - notFoundSchema, - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { notFoundSchema, badRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - waitForSuccess, - isStringCsvParseable, -} = require('../../../helpers/utils'); +const { waitForSuccess, isStringCsvParsable } = require('../../../helpers/utils'); const httpStatus = { OK: 200, @@ -47,31 +39,21 @@ const httpStatus = { const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; -const networkStatusEndpoint = `${baseUrlV3}/network/status`; - -let curChainID; - -// TODO: Enable tests once test blockchain is updated with transactions -xdescribe('Export API', () => { - const startDate = moment('2021-01-10').format(exportConfig.csv.dateFormat); - const endDate = moment('2021-11-30').format(exportConfig.csv.dateFormat); - let refTransaction1; - let refTransaction2; - let refTransaction3; - let refTransaction4; - beforeAll(async () => { - const response = await api.get(`${baseUrlV3}/transactions?limit=4`); - [refTransaction1, refTransaction2, refTransaction3, refTransaction4] = response.data; - - const networkStatus = await api.get(networkStatusEndpoint); - curChainID = networkStatus.data.chainID; - }); + +describe('Export API', () => { + const startDate = moment('2023-01-10').format(exportConfig.excel.dateFormat); + const endDate = moment('2023-11-30').format(exportConfig.excel.dateFormat); + + const mockAddress1 = 'lsk969u84bnws8zc52cu59o8aamvpyg8nw86hpgad'; + const mockAddress2 = 'lsk2jjg9ob4qh7jokpdbf7hjgqftkaq4b2925f422'; + const mockPublicKey1 = 'ebe2c469275b2eac44f05684c974454f7eecc6d2a8c1b72bf37fffbeb5419ccd'; + const mockPublicKey2 = '674061bfeea0eddb4c88fc7bc03ef694f5040358b2b14edba99bc8ebddfd7c97'; describe('Schedule file export', () => { - it('Schedule file export from account address with interval -> return 202 Accepted', async () => { + it('should return 202 Accepted when scheduling file export from account address with interval', async () => { const expected = { ready: false }; const response = await api.get( - `${baseUrlV3}/export/transactions?address=${refTransaction1.sender.address}&interval=${startDate}:${endDate}`, + `${baseUrlV3}/export/transactions?address=${mockAddress1}&interval=${startDate}:${endDate}`, httpStatus.ACCEPTED, ); expect(response).toMap(goodRequestSchemaForExport); @@ -81,10 +63,10 @@ xdescribe('Export API', () => { expect(response.meta).toEqual(expect.objectContaining(expected)); }); - it('Schedule file export from account publicKey with interval -> return 202 Accepted', async () => { + it('should return 202 Accepted when scheduling file export from account publicKey with interval', async () => { const expected = { ready: false }; const response = await api.get( - `${baseUrlV3}/export/transactions?publicKey=${refTransaction2.sender.publicKey}&interval=${startDate}:${endDate}`, + `${baseUrlV3}/export/transactions?publicKey=${mockPublicKey1}&interval=${startDate}:${endDate}`, httpStatus.ACCEPTED, ); expect(response).toMap(goodRequestSchemaForExport); @@ -94,10 +76,10 @@ xdescribe('Export API', () => { expect(response.meta).toEqual(expect.objectContaining(expected)); }); - it('Schedule file export from account address -> return 202 Accepted', async () => { + it('should return 202 Accepted when scheduling file export from account address', async () => { const expected = { ready: false }; const response = await api.get( - `${baseUrlV3}/export/transactions?address=${refTransaction3.sender.address}`, + `${baseUrlV3}/export/transactions?address=${mockAddress2}`, httpStatus.ACCEPTED, ); expect(response).toMap(goodRequestSchemaForExport); @@ -107,10 +89,10 @@ xdescribe('Export API', () => { expect(response.meta).toEqual(expect.objectContaining(expected)); }); - it('Schedule file export from account publicKey -> return 202 Accepted', async () => { + it('should return 202 Accepted when scheduling file export from account publicKey', async () => { const expected = { ready: false }; const response = await api.get( - `${baseUrlV3}/export/transactions?publicKey=${refTransaction4.sender.publicKey}`, + `${baseUrlV3}/export/transactions?publicKey=${mockPublicKey2}`, httpStatus.ACCEPTED, ); expect(response).toMap(goodRequestSchemaForExport); @@ -122,60 +104,63 @@ xdescribe('Export API', () => { }); describe('File is ready to export', () => { - it('scheduled from account address -> return 200 OK', async () => { - const scheduleExport = async () => api - .get( - `${baseUrlV3}/export/transactions?address=${refTransaction1.sender.address}&interval=${startDate}:${endDate}`, - httpStatus.OK, - ); - const response = await waitForSuccess(scheduleExport); + const successValidator = response => response.meta.ready; + + it('should return 200 OK when scheduled from account address', async () => { + const scheduleExport = async () => + api.get(`${baseUrlV3}/export/transactions?address=${mockAddress2}`, httpStatus.OK); + const response = await waitForSuccess(scheduleExport, successValidator); const expected = { ready: true }; expect(response).toMap(goodRequestSchemaForExport); expect(response.data).toBeInstanceOf(Object); expect(response.data).toMap(exportSchema); expect(response.meta).toMap(metaSchemaForExport); expect(response.meta).toEqual(expect.objectContaining(expected)); - }); + }, 2147483647); - it('scheduled from account from publicKey -> return 200 OK', async () => { - const scheduleExport = async () => api - .get( - `${baseUrlV3}/export/transactions?publicKey=${refTransaction2.sender.publicKey}&interval=${startDate}:${endDate}`, - httpStatus.OK, - ); - const response = await waitForSuccess(scheduleExport); + it('should return 200 OK when scheduled from account publicKey', async () => { + const scheduleExport = async () => + api.get(`${baseUrlV3}/export/transactions?publicKey=${mockPublicKey2}`, httpStatus.OK); + const response = await waitForSuccess(scheduleExport, successValidator); const expected = { ready: true }; expect(response).toMap(goodRequestSchemaForExport); expect(response.data).toBeInstanceOf(Object); expect(response.data).toMap(exportSchema); expect(response.meta).toMap(metaSchemaForExport); expect(response.meta).toEqual(expect.objectContaining(expected)); - }); + }, 2147483647); }); - describe('Download csv file -> returns 200 OK', () => { - const parseParams = { delimiter: exportConfig.csv.delimiter }; + describe('Download processed transaction history -> returns 200 OK', () => { + const parseParams = { delimiter: exportConfig.excel.delimiter }; + const successValidator = response => response.meta.ready; - it('scheduled from account address -> 200 OK', async () => { - const validFileName = `transactions_${curChainID}_${refTransaction1.sender.address}_${startDate}_${endDate}.csv`; - const response = await api.get(`${baseUrlV3}/export/download?filename=${validFileName}`, httpStatus.OK); - expect(isStringCsvParseable(response, parseParams)).toBeTruthy(); - }); + it('should return 200 OK when scheduled from account address', async () => { + const scheduleExport = async () => + api.get(`${baseUrlV3}/export/transactions?address=${mockAddress2}`, httpStatus.OK); + const res = await waitForSuccess(scheduleExport, successValidator); - it('scheduled from account publicKey -> 200 OK', async () => { - const validFileName = `transactions_${curChainID}_${refTransaction2.sender.address}_${startDate}_${endDate}.csv`; - const response = await api.get(`${baseUrlV3}/export/download?filename=${validFileName}`, httpStatus.OK); - expect(isStringCsvParseable(response, parseParams)).toBeTruthy(); - }); + const response = await api.get(`${baseUrl}${res.data.fileUrl}`, httpStatus.OK); + expect(isStringCsvParsable(response, parseParams)).toBeTruthy(); + }, 2147483647); + + it('should return 200 OK when scheduled from account publicKey', async () => { + const scheduleExport = async () => + api.get(`${baseUrlV3}/export/transactions?publicKey=${mockPublicKey2}`, httpStatus.OK); + const res = await waitForSuccess(scheduleExport, successValidator); + + const response = await api.get(`${baseUrl}${res.data.fileUrl}`, httpStatus.OK); + expect(isStringCsvParsable(response, parseParams)).toBeTruthy(); + }, 2147483647); }); describe('Invalid params/request', () => { - it('Schedule file export -> 400 when no params', async () => { + it('should return 400 BAD REQUEST when scheduling file export with no params', async () => { const response = await api.get(`${baseUrlV3}/export/transactions`, httpStatus.BAD_REQUEST); expect(response).toMap(badRequestSchema); }); - it('Schedule file export -> 400 when invalid address', async () => { + it('should return 400 BAD REQUEST when scheduling file export with an invalid address', async () => { const response = await api.get( `${baseUrlV3}/export/transactions?address=lsknww5x4dv93x3euds4w72d99ouwnqojyw5qrm`, httpStatus.BAD_REQUEST, @@ -183,7 +168,7 @@ xdescribe('Export API', () => { expect(response).toMap(badRequestSchema); }); - it('Schedule file export -> 400 when invalid publicKey', async () => { + it('should return 400 BAD REQUEST when scheduling file export with an invalid publicKey', async () => { const response = await api.get( `${baseUrlV3}/export/transactions?publicKey=d517f9d9ac10a61b57d1959b88f8b5c6e8824d27a5349ec7ece44c4a027c4`, httpStatus.BAD_REQUEST, @@ -191,25 +176,25 @@ xdescribe('Export API', () => { expect(response).toMap(badRequestSchema); }); - it('Schedule file export -> 400 when address with invalid interval', async () => { + it('should return 400 BAD REQUEST when scheduling file export with an address and an invalid interval', async () => { const invalidInterval = '20-10-2021:20-11-2021'; const response = await api.get( - `${baseUrlV3}/export/transactions?address=${refTransaction1.sender.address}&interval=${invalidInterval}`, + `${baseUrlV3}/export/transactions?address=${mockAddress1}&interval=${invalidInterval}`, httpStatus.BAD_REQUEST, ); expect(response).toMap(badRequestSchema); }); - it('Schedule file export -> 400 when publicKey with invalid interval', async () => { + it('should return 400 BAD REQUEST when scheduling file export with a publicKey and an invalid interval', async () => { const invalidInterval = '20-10-2021:20-11-2021'; const response = await api.get( - `${baseUrlV3}/export/transactions?publicKey=${refTransaction2.sender.publicKey}&interval=${invalidInterval}`, + `${baseUrlV3}/export/transactions?publicKey=${mockPublicKey1}&interval=${invalidInterval}`, httpStatus.BAD_REQUEST, ); expect(response).toMap(badRequestSchema); }); - it('Schedule file export -> 400 when invalid address with interval', async () => { + it('should return 400 BAD REQUEST when scheduling file export with an invalid address and a valid interval', async () => { const response = await api.get( `${baseUrlV3}/export/transactions?address=lsknww5x4dv93x3euds4w72d99ouwnqojyw5qrm&interval=${startDate}:${endDate}`, httpStatus.BAD_REQUEST, @@ -217,7 +202,7 @@ xdescribe('Export API', () => { expect(response).toMap(badRequestSchema); }); - it('Schedule file export -> 400 when invalid publicKey with interval', async () => { + it('should return 400 BAD REQUEST when scheduling file export with an invalid publicKey and a valid interval', async () => { const response = await api.get( `${baseUrlV3}/export/transactions?publicKey=d517f9d9ac10a61b57d1959b88f8b5c6e8824d27a5349ec7ece44c4a027c4&interval=${startDate}:${endDate}`, httpStatus.BAD_REQUEST, @@ -225,9 +210,12 @@ xdescribe('Export API', () => { expect(response).toMap(badRequestSchema); }); - it('File not exists -> 404 NOT_FOUND', async () => { - const invalidFile = 'invalid.csv'; - const response = await api.get(`${baseUrlV3}/export/download?filename=${invalidFile}`, httpStatus.NOT_FOUND); + it('should return 404 NOT FOUND when attempting to download a non-existent file', async () => { + const validFileName = `transactions_99999999_${mockAddress1}_${startDate}_${endDate}.xlsx`; + const response = await api.get( + `${baseUrlV3}/export/download?filename=${validFileName}`, + httpStatus.NOT_FOUND, + ); expect(response).toMap(notFoundSchema); }); }); diff --git a/tests/integration/api_v3/http/fees.test.js b/tests/integration/api_v3/http/fees.test.js index f0cabab59..996cf5db8 100644 --- a/tests/integration/api_v3/http/fees.test.js +++ b/tests/integration/api_v3/http/fees.test.js @@ -16,9 +16,7 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { feeEstimateSchema, diff --git a/tests/integration/api_v3/http/generators.test.js b/tests/integration/api_v3/http/generators.test.js index 5641d453a..6c234787e 100644 --- a/tests/integration/api_v3/http/generators.test.js +++ b/tests/integration/api_v3/http/generators.test.js @@ -16,14 +16,14 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); +const { generatorResponseSchema } = require('../../../schemas/api_v3/generator.schema'); const { - generatorResponseSchema, -} = require('../../../schemas/api_v3/generator.schema'); -const { invalidPartialSearches, invalidOffsets, invalidLimits } = require('../constants/invalidInputs'); + invalidPartialSearches, + invalidOffsets, + invalidLimits, +} = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const endpoint = `${baseUrl}/api/v3`; @@ -36,16 +36,23 @@ const STATUS = { describe('Generators API', () => { let numberActiveValidators; let numberStandbyValidators; - beforeAll(async () => { - const response = (await api.get(`${endpoint}/pos/constants`)).data; - numberActiveValidators = response.numberActiveValidators; - numberStandbyValidators = response.numberStandbyValidators; - }); + let selectedGenerator; - let firstGenerator; beforeAll(async () => { + const posRes = (await api.get(`${endpoint}/pos/constants`)).data; + numberActiveValidators = posRes.numberActiveValidators; + numberStandbyValidators = posRes.numberStandbyValidators; + const response = await api.get(`${endpoint}/generators`); - [firstGenerator] = response.data; + [selectedGenerator] = response.data; + + // eslint-disable-next-line no-restricted-syntax + for (const generator of response.data) { + if (![null, undefined].includes(generator.publicKey)) { + selectedGenerator = generator; + break; + } + } }); describe('GET /generators', () => { @@ -62,12 +69,16 @@ describe('Generators API', () => { expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(103); - const activeGenerators = response.data - .filter(generator => generator.status === STATUS.ACTIVE); - const standbyGenerators = response.data - .filter(generator => generator.status === STATUS.STANDBY); - expect(activeGenerators.length).toEqual(numberActiveValidators); - expect(standbyGenerators.length).toEqual(numberStandbyValidators); + const activeGenerators = response.data.filter( + generator => generator.status === STATUS.ACTIVE, + ); + const standbyGenerators = response.data.filter( + generator => generator.status === STATUS.STANDBY, + ); + expect(activeGenerators.length).toBeGreaterThanOrEqual(1); + expect(activeGenerators.length).toBeLessThanOrEqual(numberActiveValidators); + expect(standbyGenerators.length).toBeGreaterThanOrEqual(0); + expect(standbyGenerators.length).toBeLessThanOrEqual(numberStandbyValidators); }); it('should return generators list when called with limit=100', async () => { @@ -85,55 +96,68 @@ describe('Generators API', () => { }); it('should return generators list when searching with generator name', async () => { - const response = await api.get(`${endpoint}/generators?search=${firstGenerator.name}`); + const response = await api.get(`${endpoint}/generators?search=${selectedGenerator.name}`); expect(response).toMap(generatorResponseSchema); - expect(response.data.length).toBe(1); + expect(response.data.length).toBeGreaterThanOrEqual(1); }); it('should return generators list when searching with generator address', async () => { - const response = await api.get(`${endpoint}/generators?search=${firstGenerator.address}`); + const response = await api.get(`${endpoint}/generators?search=${selectedGenerator.address}`); expect(response).toMap(generatorResponseSchema); expect(response.data.length).toBe(1); }); it('should return generators list when searching with generator publicKey', async () => { - const response = await api.get(`${endpoint}/generators?search=${firstGenerator.publicKey}`); - expect(response).toMap(generatorResponseSchema); - expect(response.data.length).toBe(1); + if (selectedGenerator.publicKey) { + const response = await api.get( + `${endpoint}/generators?search=${selectedGenerator.publicKey}`, + ); + expect(response).toMap(generatorResponseSchema); + expect(response.data.length).toBe(1); + } }); it('should return generators list when searching partially with generator name', async () => { - const response = await api.get(`${endpoint}/generators?search=${firstGenerator.name.substring(0, 3)}`); + const response = await api.get( + `${endpoint}/generators?search=${selectedGenerator.name.substring(0, 3)}`, + ); expect(response).toMap(generatorResponseSchema); expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(100); }); it('should return generators list when searching partially with generator address', async () => { - const response = await api.get(`${endpoint}/generators?search=${firstGenerator.address.substring(0, 3)}`); + const response = await api.get( + `${endpoint}/generators?search=${selectedGenerator.address.substring(0, 3)}`, + ); expect(response).toMap(generatorResponseSchema); expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(100); }); it('should return generators list when searching partially with generator publicKey', async () => { - const response = await api.get(`${endpoint}/generators?search=${firstGenerator.publicKey.substring(0, 3)}`); - expect(response).toMap(generatorResponseSchema); - expect(response.data.length).toBeGreaterThanOrEqual(1); - expect(response.data.length).toBeLessThanOrEqual(100); + if (selectedGenerator.publicKey) { + const response = await api.get( + `${endpoint}/generators?search=${selectedGenerator.publicKey.substring(0, 3)}`, + ); + expect(response).toMap(generatorResponseSchema); + expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeLessThanOrEqual(100); + } }); it('should return bad request when called with invalid search param', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}/generators?search=${invalidPartialSearches[i]}`, 400); + const response = await api.get( + `${endpoint}/generators?search=${invalidPartialSearches[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request when called with invalid limit param', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}/generators?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -141,7 +165,6 @@ describe('Generators API', () => { it('should return bad request when called with invalid offset param', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}/generators?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/indexStatus.test.js b/tests/integration/api_v3/http/indexStatus.test.js index 6c8dc833a..cdddb1d39 100644 --- a/tests/integration/api_v3/http/indexStatus.test.js +++ b/tests/integration/api_v3/http/indexStatus.test.js @@ -18,9 +18,7 @@ const { api } = require('../../../helpers/api'); const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - goodResponseSchema, -} = require('../../../schemas/api_v3/indexStatus.schema'); +const { goodResponseSchema } = require('../../../schemas/api_v3/indexStatus.schema'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -42,4 +40,3 @@ describe('Index Status API', () => { expect(response).toMap(badRequestSchema); }); }); - diff --git a/tests/integration/api_v3/http/invoke.test.js b/tests/integration/api_v3/http/invoke.test.js index 8827b3ac4..641e188de 100644 --- a/tests/integration/api_v3/http/invoke.test.js +++ b/tests/integration/api_v3/http/invoke.test.js @@ -16,13 +16,9 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - invokeResponseSchema, -} = require('../../../schemas/api_v3/invoke.schema'); +const { invokeResponseSchema } = require('../../../schemas/api_v3/invoke.schema'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -35,7 +31,10 @@ describe('Invoke API', () => { }); it('should return response when valid SDK endpoint invoked with valid params', async () => { - const response = await api.post(endpoint, { endpoint: 'chain_getBlockByHeight', params: { height: 1 } }); + const response = await api.post(endpoint, { + endpoint: 'chain_getBlockByHeight', + params: { height: 1 }, + }); const [block] = (await api.get(`${baseUrlV3}/blocks?height=1`)).data; expect(response).toMap(invokeResponseSchema); @@ -45,7 +44,11 @@ describe('Invoke API', () => { }); it('should return bad request when requested with valid SDK endpoint invoked with invalid params', async () => { - const response = await api.post(endpoint, { endpoint: 'chain_getBlockByHeight', params: { height: 'abc' } }, 400); + const response = await api.post( + endpoint, + { endpoint: 'chain_getBlockByHeight', params: { height: 'abc' } }, + 400, + ); expect(response).toMap(badRequestSchema); }); diff --git a/tests/integration/api_v3/http/legacyAccounts.test.js b/tests/integration/api_v3/http/legacyAccounts.test.js index 822d70e1c..fab338a51 100644 --- a/tests/integration/api_v3/http/legacyAccounts.test.js +++ b/tests/integration/api_v3/http/legacyAccounts.test.js @@ -16,9 +16,7 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { goodRequestSchema, @@ -40,17 +38,26 @@ describe('Legacy accounts API', () => { }); it('should return bad request if requested with public key less than 64 chars', async () => { - const response = await api.get(`${endpoint}?publicKey=1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bc`, 400); + const response = await api.get( + `${endpoint}?publicKey=1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bc`, + 400, + ); expect(response).toMap(badRequestSchema); }); it('should return bad request if requested with public key more than 64 chars', async () => { - const response = await api.get(`${endpoint}?publicKey=1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcca`, 400); + const response = await api.get( + `${endpoint}?publicKey=1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcca`, + 400, + ); expect(response).toMap(badRequestSchema); }); it('should return bad request if requested with invalid public key of 64 characters', async () => { - const response = await api.get(`${endpoint}?publicKey=!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$`, 400); + const response = await api.get( + `${endpoint}?publicKey=!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$`, + 400, + ); expect(response).toMap(badRequestSchema); }); diff --git a/tests/integration/api_v3/http/networkPeers.test.js b/tests/integration/api_v3/http/networkPeers.test.js index 93efe43e0..effa7f9e4 100644 --- a/tests/integration/api_v3/http/networkPeers.test.js +++ b/tests/integration/api_v3/http/networkPeers.test.js @@ -21,218 +21,219 @@ const { goodRequestSchema, metaSchema, badRequestSchema, + urlNotFoundSchema, } = require('../../../schemas/httpGenerics.schema'); -const { - networkPeerSchema, -} = require('../../../schemas/api_v3/networkPeer.schema'); +const { networkPeerSchema } = require('../../../schemas/api_v3/networkPeer.schema'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; const endpoint = `${baseUrlV3}/network/peers`; +const invokeEndpoint = `${baseUrlV3}/invoke`; -xdescribe('Peers API', () => { +describe('Network peers API', () => { describe('GET /peers', () => { - it('without request params -> ok', async () => { + it('should work without request params', async () => { const response = await api.get(`${endpoint}`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('empty ip -> ok', async () => { + it('should work with empty ip', async () => { const response = await api.get(`${endpoint}?ip=`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('invalid ip -> bad request', async () => { + it('should return a bad request for an invalid IP', async () => { const response = await api.get(`${endpoint}?ip=0`, 400); expect(response).toMap(badRequestSchema); }); - it('valid networkVersion -> ok', async () => { - const response = await api.get(`${endpoint}?networkVersion=2.0`); + it('should work with a valid networkVersion', async () => { + const invokeRes = await api.post(invokeEndpoint, { endpoint: 'system_getNodeInfo' }); + const { networkVersion } = invokeRes.data; + + const response = await api.get(`${endpoint}?networkVersion=${networkVersion}`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('empty networkVersion -> ok', async () => { + it('should work with empty networkVersion', async () => { const response = await api.get(`${endpoint}?networkVersion=`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('non-existent networkVersion -> 200 OK', async () => { + it('should return no peers for a non-existent networkVersion', async () => { const response = await api.get(`${endpoint}?networkVersion=9.99.0`); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBe(0); expect(response.meta).toMap(metaSchema); }); - it('invalid networkVersion -> bad request', async () => { + it('should return a bad request for an invalid networkVersion', async () => { const response = await api.get(`${endpoint}?networkVersion=v3.0`, 400); expect(response).toMap(badRequestSchema); }); - it('\'connected\' state -> ok', async () => { + it('should work with state=connected', async () => { const response = await api.get(`${endpoint}?state=connected`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('\'disconnected\' state -> ok', async () => { + it('should work with state=disconnected', async () => { const response = await api.get(`${endpoint}?state=disconnected`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('\'any\' state -> ok', async () => { + it('should work with state=any', async () => { const response = await api.get(`${endpoint}?state=any`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('empty state -> ok', async () => { + it('should work with empty state', async () => { const response = await api.get(`${endpoint}?state=`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('invalid state 1 -> bad request', async () => { + it('should return a bad request for an invalid state', async () => { const response = await api.get(`${endpoint}?state=invalid`, 400); expect(response).toMap(badRequestSchema); }); - it('invalid state 2 -> bad request', async () => { + it('should return a bad request for an invalid state', async () => { const response = await api.get(`${endpoint}?state=1`, 400); expect(response).toMap(badRequestSchema); }); - it('empty height -> ok', async () => { + it('should work with empty height', async () => { const response = await api.get(`${endpoint}?height=`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('non-existent height -> 200 Ok', async () => { - const response = await api.get(`${endpoint}?height=1000000000`); + it('should return no peers for a non-existent height', async () => { + const response = await api.get(`${endpoint}?height=${Number.MAX_SAFE_INTEGER}`); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBe(0); expect(response.meta).toMap(metaSchema); }); - it('invalid height -> bad request', async () => { + it('should return a bad request for an invalid height', async () => { const response = await api.get(`${endpoint}?height=-10`, 400); expect(response).toMap(badRequestSchema); }); - it('limit=100 -> ok', async () => { + it('should work with limit=100', async () => { const response = await api.get(`${endpoint}?limit=100`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(100); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('empty limit -> ok', async () => { + it('should work with empty limit', async () => { const response = await api.get(`${endpoint}?limit=`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('empty offset -> ok', async () => { + it('should work with empty offset', async () => { const response = await api.get(`${endpoint}?offset=`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('too big offset -> 200 OK', async () => { + it('should return no peers for a too big offset', async () => { const response = await api.get(`${endpoint}?offset=1000000`); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBe(0); expect(response.meta).toMap(metaSchema); }); - it('empty sort -> ok', async () => { + it('should work with empty sort', async () => { const response = await api.get(`${endpoint}?sort=`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(response.meta).toMap(metaSchema); }); - it('wrong sort -> bad request error', async () => { + it('should return a bad request for a wrong sort', async () => { const response = await api.get(`${endpoint}?sort=height:ascc`, 400); expect(response).toMap(badRequestSchema); }); - it('invalid request param -> bad request', async () => { + it('should return a bad request for an invalid request param', async () => { const response = await api.get(`${endpoint}?invalidParam=invalid`, 400); expect(response).toMap(badRequestSchema); }); - it('wrong url -> 200 OK', async () => { - const response = await api.get(`${endpoint}/112`); - expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBe(0); - expect(response.meta).toMap(metaSchema); + it('should return 404 NOT FOUND for a wrong URL', async () => { + const response = await api.get(`${endpoint}/112`, 404); + expect(response).toMap(urlNotFoundSchema); }); }); describe('Peers sorted by height', () => { - it('returns 10 peers sorted by height descending', async () => { + it('should return 10 peers sorted by height descending', async () => { const response = await api.get(`${endpoint}?sort=height:desc`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); if (response.data.length > 1) { @@ -245,11 +246,11 @@ xdescribe('Peers API', () => { expect(response.meta).toMap(metaSchema); }); - it('returns 10 peers sorted by height ascending', async () => { + it('should return 10 peers sorted by height ascending', async () => { const response = await api.get(`${endpoint}?sort=height:asc`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); if (response.data.length > 1) { @@ -264,41 +265,45 @@ xdescribe('Peers API', () => { }); describe('Peers sorted by networkVersion', () => { - it('returns 10 peers sorted by networkVersion descending', async () => { + it('should return 10 peers sorted by networkVersion descending', async () => { const response = await api.get(`${endpoint}?sort=networkVersion:desc`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); if (response.data.length > 1) { for (let i = 1; i < response.data.length; i++) { const prevPeer = response.data[i - 1]; const currPeer = response.data[i]; - expect(semver.gte( - semver.coerce(prevPeer.networkVersion), - semver.coerce(currPeer.networkVersion), - )).toBeTruthy(); + expect( + semver.gte( + semver.coerce(prevPeer.networkVersion), + semver.coerce(currPeer.networkVersion), + ), + ).toBeTruthy(); } } expect(response.meta).toMap(metaSchema); }); - it('returns 10 peers sorted by networkVersion ascending', async () => { + it('should return 10 peers sorted by networkVersion ascending', async () => { const response = await api.get(`${endpoint}?sort=networkVersion:asc`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); - expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); if (response.data.length > 1) { for (let i = 1; i < response.data.length; i++) { const prevPeer = response.data[i - 1]; const currPeer = response.data[i]; - expect(semver.lte( - semver.coerce(prevPeer.networkVersion), - semver.coerce(currPeer.networkVersion), - )).toBeTruthy(); + expect( + semver.lte( + semver.coerce(prevPeer.networkVersion), + semver.coerce(currPeer.networkVersion), + ), + ).toBeTruthy(); } } expect(response.meta).toMap(metaSchema); diff --git a/tests/integration/api_v3/http/networkStatistics.test.js b/tests/integration/api_v3/http/networkStatistics.test.js index 03f6945ce..e9c846391 100644 --- a/tests/integration/api_v3/http/networkStatistics.test.js +++ b/tests/integration/api_v3/http/networkStatistics.test.js @@ -16,14 +16,9 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, - goodRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema, goodRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - networkStatisticsSchema, -} = require('../../../schemas/api_v3/networkStatistics.schema'); +const { networkStatisticsSchema } = require('../../../schemas/api_v3/networkStatistics.schema'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; diff --git a/tests/integration/api_v3/http/networkStatus.test.js b/tests/integration/api_v3/http/networkStatus.test.js index 9836ef2b4..095b78811 100644 --- a/tests/integration/api_v3/http/networkStatus.test.js +++ b/tests/integration/api_v3/http/networkStatus.test.js @@ -16,14 +16,9 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - networkStatusSchema, - metaSchema, -} = require('../../../schemas/api_v3/networkStatus.schema'); +const { networkStatusSchema, metaSchema } = require('../../../schemas/api_v3/networkStatus.schema'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; diff --git a/tests/integration/api_v3/http/posClaimableRewards.test.js b/tests/integration/api_v3/http/posClaimableRewards.test.js index 82a7f5052..3cf57c551 100644 --- a/tests/integration/api_v3/http/posClaimableRewards.test.js +++ b/tests/integration/api_v3/http/posClaimableRewards.test.js @@ -19,14 +19,16 @@ const { api } = require('../../../helpers/api'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); +const { goodResponseSchema } = require('../../../schemas/api_v3/posClaimableRewards.schema'); const { - goodResponseSchema, -} = require('../../../schemas/api_v3/posClaimableRewards.schema'); -const { invalidAddresses, invalidNames, invalidPublicKeys, invalidLimits, invalidOffsets } = require('../constants/invalidInputs'); + invalidAddresses, + invalidNames, + invalidPublicKeys, + invalidLimits, + invalidOffsets, +} = require('../constants/invalidInputs'); const endpoint = `${baseUrlV3}/pos/rewards/claimable`; @@ -34,7 +36,6 @@ describe('Claimable rewards API', () => { let refGenerator; beforeAll(async () => { do { - // eslint-disable-next-line no-await-in-loop const generators = await api.get(`${baseUrlV3}/generators`); if (generators.data.length) { [refGenerator] = generators.data; @@ -127,7 +128,9 @@ describe('Claimable rewards API', () => { it('should return list of claimable rewards with known validator publicKey, offset=1 and limit=5', async () => { if (refGenerator.publicKey) { - const response = await api.get(`${endpoint}?publicKey=${refGenerator.publicKey}&offset=1&limit=5`); + const response = await api.get( + `${endpoint}?publicKey=${refGenerator.publicKey}&offset=1&limit=5`, + ); expect(response).toMap(goodResponseSchema); expect(response.data.length).toBeGreaterThanOrEqual(0); expect(response.data.length).toBeLessThanOrEqual(5); @@ -141,7 +144,6 @@ describe('Claimable rewards API', () => { it('should return bad request if requested with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?address=${invalidAddresses}`, 400); expect(response).toMap(badRequestSchema); } @@ -149,7 +151,6 @@ describe('Claimable rewards API', () => { it('should return bad request if requested with invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?name=${invalidNames[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -157,7 +158,6 @@ describe('Claimable rewards API', () => { it('should return bad request if requested with invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?publicKey=${invalidPublicKeys[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -165,16 +165,20 @@ describe('Claimable rewards API', () => { it('should return bad request if requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refGenerator.address}&limit=${invalidLimits[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refGenerator.address}&limit=${invalidLimits[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request if requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refGenerator.address}&offset=${invalidOffsets[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refGenerator.address}&offset=${invalidOffsets[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); diff --git a/tests/integration/api_v3/http/posConstants.test.js b/tests/integration/api_v3/http/posConstants.test.js index 801576b65..54399ed00 100644 --- a/tests/integration/api_v3/http/posConstants.test.js +++ b/tests/integration/api_v3/http/posConstants.test.js @@ -16,9 +16,7 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { posConstantsSchema, @@ -35,8 +33,9 @@ describe('PoS Constants API', () => { expect(response.data).toMap(posConstantsSchema); expect(response.meta).toMap(posConstantsMetaSchema); - expect(response.data.roundLength) - .toEqual(response.data.numberActiveValidators + response.data.numberStandbyValidators); + expect(response.data.roundLength).toEqual( + response.data.numberActiveValidators + response.data.numberStandbyValidators, + ); }); it('should return bad request for unsupported param', async () => { diff --git a/tests/integration/api_v3/http/posRewardsLocked.test.js b/tests/integration/api_v3/http/posRewardsLocked.test.js index 0043c9ef6..e7a418b66 100644 --- a/tests/integration/api_v3/http/posRewardsLocked.test.js +++ b/tests/integration/api_v3/http/posRewardsLocked.test.js @@ -19,14 +19,16 @@ const { api } = require('../../../helpers/api'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); +const { goodResponseSchema } = require('../../../schemas/api_v3/posRewardsLocked.schema'); const { - goodResponseSchema, -} = require('../../../schemas/api_v3/posRewardsLocked.schema'); -const { invalidOffsets, invalidLimits, invalidPublicKeys, invalidNames, invalidAddresses } = require('../constants/invalidInputs'); + invalidOffsets, + invalidLimits, + invalidPublicKeys, + invalidNames, + invalidAddresses, +} = require('../constants/invalidInputs'); const endpoint = `${baseUrlV3}/pos/rewards/locked`; const stakesEndpoint = `${baseUrlV3}/pos/stakes`; @@ -35,7 +37,9 @@ describe('Rewards Locked API', () => { let refStaker; beforeAll(async () => { let refStakerAddress; - const stakeTransactionResponse = await api.get(`${baseUrlV3}/transactions?moduleCommand=pos:stake&limit=1`); + const stakeTransactionResponse = await api.get( + `${baseUrlV3}/transactions?moduleCommand=pos:stake&limit=1`, + ); const { data: stakeTxs = [] } = stakeTransactionResponse; if (stakeTxs.length) { refStakerAddress = stakeTxs[0].sender.address; @@ -129,7 +133,9 @@ describe('Rewards Locked API', () => { it('should return list of claimable rewards with known validator publicKey, limit=5 and offset=1', async () => { if (refStaker.publicKey) { - const response = await api.get(`${endpoint}?publicKey=${refStaker.publicKey}&limit=5&offset=1`); + const response = await api.get( + `${endpoint}?publicKey=${refStaker.publicKey}&limit=5&offset=1`, + ); expect(response).toMap(goodResponseSchema); expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(5); @@ -143,7 +149,6 @@ describe('Rewards Locked API', () => { it('should return bad request if requested with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?address=${invalidAddresses}`, 400); expect(response).toMap(badRequestSchema); } @@ -151,7 +156,6 @@ describe('Rewards Locked API', () => { it('should return bad request if requested with invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?name=${invalidNames[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -159,7 +163,6 @@ describe('Rewards Locked API', () => { it('should return bad request if requested with invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?publicKey=${invalidPublicKeys[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -167,16 +170,20 @@ describe('Rewards Locked API', () => { it('should return bad request if requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refStaker.address}&limit=${invalidLimits[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refStaker.address}&limit=${invalidLimits[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request if requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refStaker.address}&offset=${invalidOffsets[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refStaker.address}&offset=${invalidOffsets[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); diff --git a/tests/integration/api_v3/http/posStakers.test.js b/tests/integration/api_v3/http/posStakers.test.js index 830aa5ed4..0b3832b76 100644 --- a/tests/integration/api_v3/http/posStakers.test.js +++ b/tests/integration/api_v3/http/posStakers.test.js @@ -21,7 +21,15 @@ const baseUrlV3 = `${baseUrl}/api/v3`; const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { goodRequestSchema } = require('../../../schemas/api_v3/staker.schema'); -const { invalidOffsets, invalidLimits, invalidNames, invalidPublicKeys, invalidAddresses, invalidPartialSearches } = require('../constants/invalidInputs'); +const { + invalidOffsets, + invalidLimits, + invalidNames, + invalidPublicKeys, + invalidAddresses, + invalidPartialSearches, +} = require('../constants/invalidInputs'); +const { waitMs } = require('../../../helpers/utils'); const endpoint = `${baseUrlV3}/pos/stakers`; @@ -31,18 +39,46 @@ describe('Stakers API', () => { beforeAll(async () => { let refValidatorAddress; + let retries = 10; + let success = false; + do { - // eslint-disable-next-line no-await-in-loop - const { data: [stakeTx] = [] } = await api.get(`${baseUrlV3}/transactions?moduleCommand=pos:stake&limit=1`); + const response1 = await api.get(`${baseUrlV3}/transactions?moduleCommand=pos:stake&limit=1`); + const { data: [stakeTx] = [] } = response1; if (stakeTx) { // Destructure to refer first entry of all the sent votes within the transaction - const { params: { stakes: [stake] } } = stakeTx; + const { + params: { + stakes: [stake], + }, + } = stakeTx; refStaker = stakeTx.sender; refValidatorAddress = stake.validatorAddress; } } while (!refValidatorAddress); - const validatorsResponse = await api.get(`${baseUrlV3}/pos/validators?address=${refValidatorAddress}`); - [refValidator] = validatorsResponse.data; + + while (retries > 0 && !success) { + try { + const validatorsResponse = await api.get( + `${baseUrlV3}/pos/validators?address=${refValidatorAddress}`, + ); + [refValidator] = validatorsResponse.data; + + if (refValidator) { + success = true; + } + } catch (error) { + console.error(`Error fetching validators. Retries left: ${retries}`); + retries--; + + // Delay by 3 sec + await waitMs(3000); + } + } + + if (!success) { + throw new Error('Failed to fetch validator address even after retrying.'); + } }); describe(`GET ${endpoint}`, () => { @@ -54,21 +90,27 @@ describe('Stakers API', () => { }); it('should return list of stakers when requested for known validator address and search param (exact staker name)', async () => { - const response = await api.get(`${endpoint}?address=${refValidator.address}&search=${refStaker.name}`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&search=${refStaker.name}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data.stakers.length).toBe(1); expect(response.data.stakers[0].address).toBe(refStaker.address); }); it('should return list of stakers when requested for known validator address and search param (exact staker address)', async () => { - const response = await api.get(`${endpoint}?address=${refValidator.address}&search=${refStaker.address}`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&search=${refStaker.address}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data.stakers.length).toBe(1); expect(response.data.stakers[0].address).toBe(refStaker.address); }); it('should return list of stakers when requested for known validator address and search param (exact staker public key)', async () => { - const response = await api.get(`${endpoint}?address=${refValidator.address}&search=${refStaker.publicKey}`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&search=${refStaker.publicKey}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data.stakers.length).toBe(1); expect(response.data.stakers[0].address).toBe(refStaker.address); @@ -76,32 +118,35 @@ describe('Stakers API', () => { it('should return list of stakers when requested for known validator address and search param (partial staker name)', async () => { const searchParam = refStaker.name ? refStaker.name.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?address=${refValidator.address}&search=${searchParam}`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&search=${searchParam}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data.stakers.length).toBeGreaterThanOrEqual(1); expect(response.data.stakers.length).toBeLessThanOrEqual(10); - expect(response.data.stakers.some(staker => staker.address === refStaker.address)) - .toBe(true); + expect(response.data.stakers.some(staker => staker.address === refStaker.address)).toBe(true); }); it('should return list of stakers when requested for known validator address and search param (partial staker address)', async () => { const searchParam = refStaker.address ? refStaker.address.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?address=${refValidator.address}&search=${searchParam}`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&search=${searchParam}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data.stakers.length).toBeGreaterThanOrEqual(1); expect(response.data.stakers.length).toBeLessThanOrEqual(10); - expect(response.data.stakers.some(staker => staker.address === refStaker.address)) - .toBe(true); + expect(response.data.stakers.some(staker => staker.address === refStaker.address)).toBe(true); }); it('should return list of stakers when requested for known validator address and search param (partial staker public key)', async () => { const searchParam = refStaker.publicKey ? refStaker.publicKey.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?address=${refValidator.address}&search=${searchParam}`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&search=${searchParam}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data.stakers.length).toBeGreaterThanOrEqual(1); expect(response.data.stakers.length).toBeLessThanOrEqual(10); - expect(response.data.stakers.some(staker => staker.address === refStaker.address)) - .toBe(true); + expect(response.data.stakers.some(staker => staker.address === refStaker.address)).toBe(true); }); it('should return list of stakers when requested with known validator address and offset=1', async () => { @@ -119,38 +164,50 @@ describe('Stakers API', () => { }); it('should return list of stakers when requested with known validator address, offset=1 and limit=5', async () => { - const response = await api.get(`${endpoint}?address=${refValidator.address}&offset=1&limit=5`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&offset=1&limit=5`, + ); expect(response).toMap(goodRequestSchema); expect(response.data.stakers.length).toBeGreaterThanOrEqual(0); expect(response.data.stakers.length).toBeLessThanOrEqual(5); }); it('should return list of stakers when requested for known validator publicKey', async () => { - const response = await api.get(`${endpoint}?publicKey=${refValidator.publicKey}`); - expect(response).toMap(goodRequestSchema); - expect(response.data.stakers.length).toBeGreaterThanOrEqual(1); - expect(response.data.stakers.length).toBeLessThanOrEqual(10); + if (refValidator.publicKey) { + const response = await api.get(`${endpoint}?publicKey=${refValidator.publicKey}`); + expect(response).toMap(goodRequestSchema); + expect(response.data.stakers.length).toBeGreaterThanOrEqual(1); + expect(response.data.stakers.length).toBeLessThanOrEqual(10); + } }); it('should return list of stakers when requested with known validator publicKey and offset=1', async () => { - const response = await api.get(`${endpoint}?publicKey=${refValidator.publicKey}&offset=1`); - expect(response).toMap(goodRequestSchema); - expect(response.data.stakers.length).toBeGreaterThanOrEqual(0); - expect(response.data.stakers.length).toBeLessThanOrEqual(10); + if (refValidator.publicKey) { + const response = await api.get(`${endpoint}?publicKey=${refValidator.publicKey}&offset=1`); + expect(response).toMap(goodRequestSchema); + expect(response.data.stakers.length).toBeGreaterThanOrEqual(0); + expect(response.data.stakers.length).toBeLessThanOrEqual(10); + } }); it('should return list of stakers when requested with known validator publicKey and limit=5', async () => { - const response = await api.get(`${endpoint}?publicKey=${refValidator.publicKey}&limit=5`); - expect(response).toMap(goodRequestSchema); - expect(response.data.stakers.length).toBeGreaterThanOrEqual(1); - expect(response.data.stakers.length).toBeLessThanOrEqual(5); + if (refValidator.publicKey) { + const response = await api.get(`${endpoint}?publicKey=${refValidator.publicKey}&limit=5`); + expect(response).toMap(goodRequestSchema); + expect(response.data.stakers.length).toBeGreaterThanOrEqual(1); + expect(response.data.stakers.length).toBeLessThanOrEqual(5); + } }); it('should return list of stakers when requested with known validator publicKey, offset=1 and limit=5', async () => { - const response = await api.get(`${endpoint}?publicKey=${refValidator.publicKey}&offset=1&limit=5`); - expect(response).toMap(goodRequestSchema); - expect(response.data.stakers.length).toBeGreaterThanOrEqual(0); - expect(response.data.stakers.length).toBeLessThanOrEqual(5); + if (refValidator.publicKey) { + const response = await api.get( + `${endpoint}?publicKey=${refValidator.publicKey}&offset=1&limit=5`, + ); + expect(response).toMap(goodRequestSchema); + expect(response.data.stakers.length).toBeGreaterThanOrEqual(0); + expect(response.data.stakers.length).toBeLessThanOrEqual(5); + } }); it('should return list of stakers when requested for known validator name', async () => { @@ -182,13 +239,17 @@ describe('Stakers API', () => { }); it('should return empty list when requested with invalid address and publicKey pair', async () => { - const response = await api.get(`${endpoint}?address=${refValidator.address}&publicKey=796c94fe1e53c4dd63f5a181450811aa53bfc38dcad038c1b884e8cb45e26823`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&publicKey=796c94fe1e53c4dd63f5a181450811aa53bfc38dcad038c1b884e8cb45e26823`, + ); expect(response).toMap(goodRequestSchema); expect(response.data.stakers.length).toBe(0); }); it('should return empty when requested for known non-validator address', async () => { - const response = await api.get(`${endpoint}?address=lsk99999999999999999999999999999999999999`); + const response = await api.get( + `${endpoint}?address=lsk99999999999999999999999999999999999999`, + ); expect(response).toMap(goodRequestSchema); expect(response.data.stakers.length).toBe(0); }); @@ -200,7 +261,6 @@ describe('Stakers API', () => { it('should return bad request for invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?address=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -208,7 +268,6 @@ describe('Stakers API', () => { it('should return bad request for invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?publicKey=${invalidPublicKeys[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -216,7 +275,6 @@ describe('Stakers API', () => { it('should return bad request for invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?name=${invalidNames[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -224,24 +282,30 @@ describe('Stakers API', () => { it('should return bad request for invalid search', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refValidator.address}&search=${invalidPartialSearches[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&search=${invalidPartialSearches[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request for invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refValidator.address}&limit=${invalidLimits[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&limit=${invalidLimits[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request for invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refValidator.address}&offset=${invalidOffsets[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&offset=${invalidOffsets[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); diff --git a/tests/integration/api_v3/http/posStakes.test.js b/tests/integration/api_v3/http/posStakes.test.js index 447f36150..81c2466a4 100644 --- a/tests/integration/api_v3/http/posStakes.test.js +++ b/tests/integration/api_v3/http/posStakes.test.js @@ -19,14 +19,15 @@ const { api } = require('../../../helpers/api'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); +const { stakesResponseSchema } = require('../../../schemas/api_v3/stakes.schema'); const { - stakesResponseSchema, -} = require('../../../schemas/api_v3/stakes.schema'); -const { invalidPublicKeys, invalidAddresses, invalidNames, invalidPartialSearches } = require('../constants/invalidInputs'); + invalidPublicKeys, + invalidAddresses, + invalidNames, + invalidPartialSearches, +} = require('../constants/invalidInputs'); const endpoint = `${baseUrlV3}/pos/stakes`; @@ -40,15 +41,22 @@ describe('Stakes API', () => { maxNumberSentStakes = posConstants.data.maxNumberSentStakes; do { - // eslint-disable-next-line no-await-in-loop - const { data: [stakeTx] = [] } = await api.get(`${baseUrlV3}/transactions?moduleCommand=pos:stake&limit=1`); + const { data: [stakeTx] = [] } = await api.get( + `${baseUrlV3}/transactions?moduleCommand=pos:stake&limit=1`, + ); if (stakeTx) { - const { params: { stakes: [stake] } } = stakeTx; + const { + params: { + stakes: [stake], + }, + } = stakeTx; refValidatorAddress = stake.validatorAddress; refStaker = stakeTx.sender; } } while (!refStaker); - const validatorsResponse = await api.get(`${baseUrlV3}/pos/validators?address=${refValidatorAddress}`); + const validatorsResponse = await api.get( + `${baseUrlV3}/pos/validators?address=${refValidatorAddress}`, + ); [refValidator] = validatorsResponse.data; }); @@ -61,21 +69,29 @@ describe('Stakes API', () => { }); it('should return list of stakes when requested with search param (exact staker name)', async () => { - const response = await api.get(`${endpoint}?address=${refStaker.address}&search=${refValidator.name}`); + const response = await api.get( + `${endpoint}?address=${refStaker.address}&search=${refValidator.name}`, + ); expect(response).toMap(stakesResponseSchema); expect(response.data.stakes.length).toBe(1); expect(response.data.stakes[0].address).toBe(refValidator.address); }); it('should return list of stakes when requested with search param (exact staker public key)', async () => { - const response = await api.get(`${endpoint}?address=${refStaker.address}&search=${refValidator.publicKey}`); - expect(response).toMap(stakesResponseSchema); - expect(response.data.stakes.length).toBe(1); - expect(response.data.stakes[0].address).toBe(refValidator.address); + if (refValidator.publicKey) { + const response = await api.get( + `${endpoint}?address=${refStaker.address}&search=${refValidator.publicKey}`, + ); + expect(response).toMap(stakesResponseSchema); + expect(response.data.stakes.length).toBe(1); + expect(response.data.stakes[0].address).toBe(refValidator.address); + } }); it('should return list of stakes when requested with search param (exact staker address)', async () => { - const response = await api.get(`${endpoint}?address=${refStaker.address}&search=${refValidator.address}`); + const response = await api.get( + `${endpoint}?address=${refStaker.address}&search=${refValidator.address}`, + ); expect(response).toMap(stakesResponseSchema); expect(response.data.stakes.length).toBe(1); expect(response.data.stakes[0].address).toBe(refValidator.address); @@ -83,32 +99,41 @@ describe('Stakes API', () => { it('should return list of stakes when requested with search param (partial staker name)', async () => { const searchParam = refValidator.name ? refValidator.name.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?address=${refStaker.address}&search=${searchParam}`); + const response = await api.get( + `${endpoint}?address=${refStaker.address}&search=${searchParam}`, + ); expect(response).toMap(stakesResponseSchema); expect(response.data.stakes.length).toBeGreaterThanOrEqual(1); expect(response.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); - expect(response.data.stakes.some(staker => staker.address === refValidator.address)) - .toBe(true); + expect(response.data.stakes.some(staker => staker.address === refValidator.address)).toBe( + true, + ); }); it('should return list of stakes when requested with search param (partial staker public key)', async () => { const searchParam = refValidator.publicKey ? refValidator.publicKey.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?address=${refStaker.address}&search=${searchParam}`); + const response = await api.get( + `${endpoint}?address=${refStaker.address}&search=${searchParam}`, + ); expect(response).toMap(stakesResponseSchema); expect(response.data.stakes.length).toBeGreaterThanOrEqual(1); expect(response.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); - expect(response.data.stakes.some(staker => staker.address === refValidator.address)) - .toBe(true); + expect(response.data.stakes.some(staker => staker.address === refValidator.address)).toBe( + true, + ); }); it('should return list of stakes when requested with search param (partial staker address)', async () => { const searchParam = refValidator.address ? refValidator.address.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?address=${refStaker.address}&search=${searchParam}`); + const response = await api.get( + `${endpoint}?address=${refStaker.address}&search=${searchParam}`, + ); expect(response).toMap(stakesResponseSchema); expect(response.data.stakes.length).toBeGreaterThanOrEqual(1); expect(response.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); - expect(response.data.stakes.some(staker => staker.address === refValidator.address)) - .toBe(true); + expect(response.data.stakes.some(staker => staker.address === refValidator.address)).toBe( + true, + ); }); it('should return list of stakes when requested for known staker publicKey', async () => { @@ -119,10 +144,12 @@ describe('Stakes API', () => { }); it('should return list of stakes when requested for known staker name', async () => { - const response = await api.get(`${endpoint}?name=${refStaker.name}`); - expect(response).toMap(stakesResponseSchema); - expect(response.data.stakes.length).toBeGreaterThanOrEqual(1); - expect(response.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); + if (refStaker.name) { + const response = await api.get(`${endpoint}?name=${refStaker.name}`); + expect(response).toMap(stakesResponseSchema); + expect(response.data.stakes.length).toBeGreaterThanOrEqual(1); + expect(response.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); + } }); it('should return bad request if address, publicKey and name is missing', async () => { @@ -132,7 +159,6 @@ describe('Stakes API', () => { it('should return bad request for invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?address=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -140,7 +166,6 @@ describe('Stakes API', () => { it('should return bad request for invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?publicKey=${invalidPublicKeys[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -148,7 +173,6 @@ describe('Stakes API', () => { it('should return bad request for invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?name=${invalidNames[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -156,8 +180,10 @@ describe('Stakes API', () => { it('should return bad request for invalid search', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refStaker.address}&search=${invalidPartialSearches[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refStaker.address}&search=${invalidPartialSearches[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); diff --git a/tests/integration/api_v3/http/posUnlocks.test.js b/tests/integration/api_v3/http/posUnlocks.test.js index 0e94405f2..31b84460b 100644 --- a/tests/integration/api_v3/http/posUnlocks.test.js +++ b/tests/integration/api_v3/http/posUnlocks.test.js @@ -16,15 +16,16 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, - metaSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema, metaSchema } = require('../../../schemas/httpGenerics.schema'); +const { unlockSchema } = require('../../../schemas/api_v3/unlock.schema'); const { - unlockSchema, -} = require('../../../schemas/api_v3/unlock.schema'); -const { invalidOffsets, invalidLimits, invalidNames, invalidPublicKeys, invalidAddresses } = require('../constants/invalidInputs'); + invalidOffsets, + invalidLimits, + invalidNames, + invalidPublicKeys, + invalidAddresses, +} = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -33,7 +34,9 @@ const endpoint = `${baseUrlV3}/pos/unlocks`; describe('PoS Unlocks API', () => { let refTransaction; beforeAll(async () => { - const response = await api.get(`${baseUrlV3}/transactions?limit=1&moduleCommand=pos:registerValidator`); + const response = await api.get( + `${baseUrlV3}/transactions?limit=1&moduleCommand=pos:registerValidator`, + ); [refTransaction] = response.data; }); @@ -47,7 +50,9 @@ describe('PoS Unlocks API', () => { }); it('should return unlocks when requested for existing account by address and isLocked = false', async () => { - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}&isLocked=false`); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}&isLocked=false`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(0); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(10); @@ -58,7 +63,9 @@ describe('PoS Unlocks API', () => { }); it('should return unlocks when requested for existing account by address and isLocked = true', async () => { - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}&isLocked=true`); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}&isLocked=true`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(1); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(10); @@ -80,7 +87,9 @@ describe('PoS Unlocks API', () => { it('should return unlocks when requested for existing account by publicKey and isLocked = false', async () => { if (refTransaction.sender.publicKey) { - const response = await api.get(`${endpoint}?publicKey=${refTransaction.sender.publicKey}&isLocked=false`); + const response = await api.get( + `${endpoint}?publicKey=${refTransaction.sender.publicKey}&isLocked=false`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(0); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(10); @@ -93,7 +102,9 @@ describe('PoS Unlocks API', () => { it('should return unlocks when requested for existing account by publicKey and isLocked = true', async () => { if (refTransaction.sender.publicKey) { - const response = await api.get(`${endpoint}?publicKey=${refTransaction.sender.publicKey}&isLocked=true`); + const response = await api.get( + `${endpoint}?publicKey=${refTransaction.sender.publicKey}&isLocked=true`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(1); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(10); @@ -116,7 +127,9 @@ describe('PoS Unlocks API', () => { it('should return unlocks when requested for existing account by name and isLocked = false', async () => { if (refTransaction.sender.name) { - const response = await api.get(`${endpoint}?name=${refTransaction.sender.name}&isLocked=false`); + const response = await api.get( + `${endpoint}?name=${refTransaction.sender.name}&isLocked=false`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(0); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(10); @@ -129,7 +142,9 @@ describe('PoS Unlocks API', () => { it('should return unlocks when requested for existing account by name and isLocked = true', async () => { if (refTransaction.sender.name) { - const response = await api.get(`${endpoint}?name=${refTransaction.sender.name}&isLocked=true`); + const response = await api.get( + `${endpoint}?name=${refTransaction.sender.name}&isLocked=true`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(1); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(10); @@ -141,7 +156,9 @@ describe('PoS Unlocks API', () => { }); it('should return unlocks when requested for existing account by address and limit=5', async () => { - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}&limit=5`); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}&limit=5`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(1); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(5); @@ -149,7 +166,9 @@ describe('PoS Unlocks API', () => { }); it('should return unlocks when requested for existing account by address, limit=5 and offset=1', async () => { - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}&limit=5&offset=1`); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}&limit=5&offset=1`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(0); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(5); @@ -158,7 +177,9 @@ describe('PoS Unlocks API', () => { it('should return unlocks when requested for existing account by address, name and limit=5', async () => { if (refTransaction.sender.name) { - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}&name=${refTransaction.sender.name}&limit=5`); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}&name=${refTransaction.sender.name}&limit=5`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(1); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(5); @@ -168,7 +189,9 @@ describe('PoS Unlocks API', () => { it('should return unlocks when requested for existing account by address, publicKey and limit=5', async () => { if (refTransaction.sender.publicKey) { - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}&publicKey=${refTransaction.sender.publicKey}&limit=5`); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}&publicKey=${refTransaction.sender.publicKey}&limit=5`, + ); expect(response.data).toMap(unlockSchema); expect(response.data.pendingUnlocks.length).toBeGreaterThanOrEqual(1); expect(response.data.pendingUnlocks.length).toBeLessThanOrEqual(5); @@ -183,7 +206,6 @@ describe('PoS Unlocks API', () => { it('should return bad request for invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?address=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -191,7 +213,6 @@ describe('PoS Unlocks API', () => { it('should return bad request for invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?publicKey=${invalidPublicKeys[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -199,7 +220,6 @@ describe('PoS Unlocks API', () => { it('should return bad request for invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?name=${invalidNames[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -207,16 +227,20 @@ describe('PoS Unlocks API', () => { it('should return bad request for invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}&limit=${invalidLimits[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}&limit=${invalidLimits[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request for invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}&offset=${invalidOffsets[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}&offset=${invalidOffsets[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); diff --git a/tests/integration/api_v3/http/posValidators.test.js b/tests/integration/api_v3/http/posValidators.test.js index d48a31f19..3d71633d5 100644 --- a/tests/integration/api_v3/http/posValidators.test.js +++ b/tests/integration/api_v3/http/posValidators.test.js @@ -14,9 +14,7 @@ * */ const { - address: { - getAddressFromLisk32Address, - }, + address: { getAddressFromLisk32Address }, } = require('@liskhq/lisk-cryptography'); const config = require('../../../config'); @@ -27,7 +25,14 @@ const baseUrlV3 = `${baseUrl}/api/v3`; const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { validatorsResponseSchema } = require('../../../schemas/api_v3/posValidators.schema'); -const { invalidAddresses, invalidPublicKeys, invalidLimits, invalidOffsets, invalidPartialSearches, invalidNamesCSV } = require('../constants/invalidInputs'); +const { + invalidAddresses, + invalidPublicKeys, + invalidLimits, + invalidOffsets, + invalidPartialSearches, + invalidNamesCSV, +} = require('../constants/invalidInputs'); const endpoint = `${baseUrlV3}/pos/validators`; @@ -47,11 +52,14 @@ describe('pos/validators API', () => { describe(`GET ${endpoint}`, () => { it('should return list of validators when requested', async () => { - const response = await api.get(`${endpoint}?limit=${numberActiveValidators + numberStandbyValidators}`); + const response = await api.get( + `${endpoint}?limit=${numberActiveValidators + numberStandbyValidators}`, + ); expect(response).toMap(validatorsResponseSchema); expect(response.data.length).toBeGreaterThanOrEqual(1); - expect(response.data.length) - .toBeLessThanOrEqual(numberActiveValidators + numberStandbyValidators); + expect(response.data.length).toBeLessThanOrEqual( + numberActiveValidators + numberStandbyValidators, + ); }); it('should return list of correctly sorted validators when called with sort=validatorWeight:desc', async () => { @@ -65,19 +73,24 @@ describe('pos/validators API', () => { for (let index = 0; index < validators.length - 1; index++) { const curValidator = validators[index]; const nextValidator = validators[index + 1]; - expect(BigInt(curValidator.validatorWeight)) - .toBeGreaterThanOrEqual(BigInt(nextValidator.validatorWeight)); + expect(BigInt(curValidator.validatorWeight)).toBeGreaterThanOrEqual( + BigInt(nextValidator.validatorWeight), + ); if (curValidator.validatorWeight === nextValidator.validatorWeight) { // Should be sorted by address when validator weights are same if (curValidator.rank < nextValidator.rank) { - expect(getAddressFromLisk32Address(curValidator.address) - .compare(getAddressFromLisk32Address(nextValidator.address))) - .toBe(-1); + expect( + getAddressFromLisk32Address(curValidator.address).compare( + getAddressFromLisk32Address(nextValidator.address), + ), + ).toBe(-1); } else { - expect(getAddressFromLisk32Address(curValidator.address) - .compare(getAddressFromLisk32Address(nextValidator.address))) - .toBe(1); + expect( + getAddressFromLisk32Address(curValidator.address).compare( + getAddressFromLisk32Address(nextValidator.address), + ), + ).toBe(1); } } else { expect(curValidator.rank).toBeLessThan(nextValidator.rank); @@ -94,19 +107,23 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested with search param (partial validator address)', async () => { - const searchParam = refGenerators.address ? refGenerators.address.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?search=${searchParam}`); - expect(response).toMap(validatorsResponseSchema); - expect(response.data.length).toBeGreaterThanOrEqual(1); - expect(response.data.length).toBeLessThanOrEqual(10); + if (refGenerators.address) { + const searchParam = refGenerators.address.substring(0, 3); + const response = await api.get(`${endpoint}?search=${searchParam}`); + expect(response).toMap(validatorsResponseSchema); + expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeLessThanOrEqual(10); + } }); it('should return list of validators when requested with search param (partial validator public key)', async () => { - const searchParam = refGenerators[0].publicKey ? refGenerators[0].publicKey.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?search=${searchParam}`); - expect(response).toMap(validatorsResponseSchema); - expect(response.data.length).toBeGreaterThanOrEqual(1); - expect(response.data.length).toBeLessThanOrEqual(10); + if (refGenerators[0] && refGenerators[0].publicKey) { + const searchParam = refGenerators[0].publicKey.substring(0, 3); + const response = await api.get(`${endpoint}?search=${searchParam}`); + expect(response).toMap(validatorsResponseSchema); + expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeLessThanOrEqual(10); + } }); it('should return list of validators when requested with search param (partial validator name) and offset=1', async () => { @@ -118,19 +135,25 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested with search param (partial validator address) and offset=1', async () => { - const searchParam = refGenerators[0].address ? refGenerators[0].address.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?search=${searchParam}&offset=1`); - expect(response).toMap(validatorsResponseSchema); - expect(response.data.length).toBeGreaterThanOrEqual(0); - expect(response.data.length).toBeLessThanOrEqual(10); + if (refGenerators.address) { + const searchParam = refGenerators[0].address + ? refGenerators[0].address.substring(0, 3) + : ''; + const response = await api.get(`${endpoint}?search=${searchParam}&offset=1`); + expect(response).toMap(validatorsResponseSchema); + expect(response.data.length).toBeGreaterThanOrEqual(0); + expect(response.data.length).toBeLessThanOrEqual(10); + } }); it('should return list of validators when requested with search param (partial validator public key) and offset=1', async () => { - const searchParam = refGenerators[0].publicKey ? refGenerators[0].publicKey.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?search=${searchParam}&offset=1`); - expect(response).toMap(validatorsResponseSchema); - expect(response.data.length).toBeGreaterThanOrEqual(0); - expect(response.data.length).toBeLessThanOrEqual(10); + if (refGenerators[0] && refGenerators[0].publicKey) { + const searchParam = refGenerators[0].publicKey.substring(0, 3); + const response = await api.get(`${endpoint}?search=${searchParam}&offset=1`); + expect(response).toMap(validatorsResponseSchema); + expect(response.data.length).toBeGreaterThanOrEqual(0); + expect(response.data.length).toBeLessThanOrEqual(10); + } }); it('should return list of validators when requested with search param (partial validator name) and limit=5', async () => { @@ -142,19 +165,25 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested with search param (partial validator address) and limit=5', async () => { - const searchParam = refGenerators[0].address ? refGenerators[0].address.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?search=${searchParam}&limit=5`); - expect(response).toMap(validatorsResponseSchema); - expect(response.data.length).toBeGreaterThanOrEqual(1); - expect(response.data.length).toBeLessThanOrEqual(5); + if (refGenerators.address) { + const searchParam = refGenerators[0].address + ? refGenerators[0].address.substring(0, 3) + : ''; + const response = await api.get(`${endpoint}?search=${searchParam}&limit=5`); + expect(response).toMap(validatorsResponseSchema); + expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeLessThanOrEqual(5); + } }); it('should return list of validators when requested with search param (partial validator public key) and limit=5', async () => { - const searchParam = refGenerators[0].publicKey ? refGenerators[0].publicKey.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?search=${searchParam}&limit=5`); - expect(response).toMap(validatorsResponseSchema); - expect(response.data.length).toBeGreaterThanOrEqual(1); - expect(response.data.length).toBeLessThanOrEqual(5); + if (refGenerators[0] && refGenerators[0].publicKey) { + const searchParam = refGenerators[0].publicKey.substring(0, 3); + const response = await api.get(`${endpoint}?search=${searchParam}&limit=5`); + expect(response).toMap(validatorsResponseSchema); + expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeLessThanOrEqual(5); + } }); it('should return list of validators when requested with search param (partial validator name), offset=1 and limit=5', async () => { @@ -166,19 +195,23 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested with search param (partial validator address), offset=1 and limit=5', async () => { - const searchParam = refGenerators[0].address ? refGenerators[0].address.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?search=${searchParam}&offset=1&limit=5`); - expect(response).toMap(validatorsResponseSchema); - expect(response.data.length).toBeGreaterThanOrEqual(0); - expect(response.data.length).toBeLessThanOrEqual(5); + if (refGenerators.address) { + const searchParam = refGenerators[0].address.substring(0, 3); + const response = await api.get(`${endpoint}?search=${searchParam}&offset=1&limit=5`); + expect(response).toMap(validatorsResponseSchema); + expect(response.data.length).toBeGreaterThanOrEqual(0); + expect(response.data.length).toBeLessThanOrEqual(5); + } }); it('should return list of validators when requested with search param (partial validator public key), offset=1 and limit=5', async () => { - const searchParam = refGenerators[0].publicKey ? refGenerators[0].publicKey.substring(0, 3) : ''; - const response = await api.get(`${endpoint}?search=${searchParam}&offset=1&limit=5`); - expect(response).toMap(validatorsResponseSchema); - expect(response.data.length).toBeGreaterThanOrEqual(0); - expect(response.data.length).toBeLessThanOrEqual(5); + if (refGenerators[0] && refGenerators[0].publicKey) { + const searchParam = refGenerators[0].publicKey.substring(0, 3); + const response = await api.get(`${endpoint}?search=${searchParam}&offset=1&limit=5`); + expect(response).toMap(validatorsResponseSchema); + expect(response.data.length).toBeGreaterThanOrEqual(0); + expect(response.data.length).toBeLessThanOrEqual(5); + } }); it('should return list of validators when requested with known validator address', async () => { @@ -220,10 +253,13 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested for known validator publicKey', async () => { - const { publicKey = null } = refGenerators.find(generator => generator.publicKey); - const response = await api.get(`${endpoint}?publicKey=${publicKey}`); - expect(response).toMap(validatorsResponseSchema); - expect(response.data.length).toBe(1); + const generatorWithPubKey = refGenerators.find(generator => generator.publicKey); + + if (generatorWithPubKey && generatorWithPubKey.publicKey) { + const response = await api.get(`${endpoint}?publicKey=${generatorWithPubKey.publicKey}`); + expect(response).toMap(validatorsResponseSchema); + expect(response.data.length).toBe(1); + } }); it('should return list of validators when requested for known validator name', async () => { @@ -265,14 +301,15 @@ describe('pos/validators API', () => { }); it('should return empty when requested for known non-validator address', async () => { - const response = await api.get(`${endpoint}?address=lsk99999999999999999999999999999999999999`); + const response = await api.get( + `${endpoint}?address=lsk99999999999999999999999999999999999999`, + ); expect(response).toMap(validatorsResponseSchema); expect(response.data.length).toBe(0); }); it('should return bad request for invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?address=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -280,7 +317,6 @@ describe('pos/validators API', () => { it('should return bad request for invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?publicKey=${invalidPublicKeys[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -288,7 +324,6 @@ describe('pos/validators API', () => { it('should return bad request for invalid name', async () => { for (let i = 0; i < invalidNamesCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?name=${invalidNamesCSV[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -296,7 +331,6 @@ describe('pos/validators API', () => { it('should return bad request for invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -304,7 +338,6 @@ describe('pos/validators API', () => { it('should return bad request for invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -312,7 +345,6 @@ describe('pos/validators API', () => { it('should return bad request for invalid search', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?search=${invalidPartialSearches[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/postTransactions.test.js b/tests/integration/api_v3/http/postTransactions.test.js index 0e1bc5392..b7d3a3da5 100644 --- a/tests/integration/api_v3/http/postTransactions.test.js +++ b/tests/integration/api_v3/http/postTransactions.test.js @@ -16,14 +16,9 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, - wrongInputParamSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema, wrongInputParamSchema } = require('../../../schemas/httpGenerics.schema'); -const { - postTransactionSchema, -} = require('../../../schemas/api_v3/transaction.schema'); +const { postTransactionSchema } = require('../../../schemas/api_v3/transaction.schema'); const { encodeTransaction } = require('../txUtil/encodeTx'); const { createTokenTransferTx } = require('../txUtil/createTx'); @@ -33,7 +28,8 @@ const endpoint = `${baseUrlV3}/transactions`; const authEndpoint = `${baseUrlV3}/auth`; const networkStatus = `${baseUrlV3}/network/status`; -const INVALID_TRANSACTION = '0802100018002080c2d72f2a2027f87a414b549e79a940bf24fdf2b2f05e7f22aeeecc86a322e0880a0cebdf3ef171214aebd99f07218109162a905d0e0c91e58bedc83c51a0e746f6b656e207472616e736665723a40a30998db4e96911a3d784b0a01b817baf64ec9745d7c0407255967506cb01764220e2e6ce66183d07'; +const INVALID_TRANSACTION = + '0802100018002080c2d72f2a2027f87a414b549e79a940bf24fdf2b2f05e7f22aeeecc86a322e0880a0cebdf3ef171214aebd99f07218109162a905d0e0c91e58bedc83c51a0e746f6b656e207472616e736665723a40a30998db4e96911a3d784b0a01b817baf64ec9745d7c0407255967506cb01764220e2e6ce66183d07'; describe('Post transactions API', () => { let isDevnet = false; @@ -50,32 +46,21 @@ describe('Post transactions API', () => { const transaction = await createTokenTransferTx(authEndpoint); const encodedTx = await encodeTransaction(transaction, baseUrlV3); - const postTransaction = await api.post( - endpoint, - { transaction: encodedTx }, - ); + const postTransaction = await api.post(endpoint, { transaction: encodedTx }); expect(postTransaction).toMap(postTransactionSchema); } }); it('should return bad request when posting invalid binary transaction', async () => { if (isDevnet) { - const postTransaction = await api.post( - endpoint, - { transaction: INVALID_TRANSACTION }, - 400, - ); + const postTransaction = await api.post(endpoint, { transaction: INVALID_TRANSACTION }, 400); expect(postTransaction).toMap(badRequestSchema); } }); it('should return bad request in case of invalid query params', async () => { if (isDevnet) { - const postTransaction = await api.post( - endpoint, - { transactions: INVALID_TRANSACTION }, - 400, - ); + const postTransaction = await api.post(endpoint, { transactions: INVALID_TRANSACTION }, 400); expect(postTransaction).toMap(wrongInputParamSchema); } }); diff --git a/tests/integration/api_v3/http/rewardConstants.test.js b/tests/integration/api_v3/http/rewardConstants.test.js index 85bb61569..05eed0242 100644 --- a/tests/integration/api_v3/http/rewardConstants.test.js +++ b/tests/integration/api_v3/http/rewardConstants.test.js @@ -19,13 +19,9 @@ const { api } = require('../../../helpers/api'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - rewardConstantsResponseSchema, -} = require('../../../schemas/api_v3/rewardConstants.schema'); +const { rewardConstantsResponseSchema } = require('../../../schemas/api_v3/rewardConstants.schema'); const endpoint = `${baseUrlV3}/reward/constants`; diff --git a/tests/integration/api_v3/http/rewardDefault.test.js b/tests/integration/api_v3/http/rewardDefault.test.js index b0bde513e..30720e669 100644 --- a/tests/integration/api_v3/http/rewardDefault.test.js +++ b/tests/integration/api_v3/http/rewardDefault.test.js @@ -19,13 +19,9 @@ const { api } = require('../../../helpers/api'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - rewardDefaultResponseSchema, -} = require('../../../schemas/api_v3/rewardDefault.schema'); +const { rewardDefaultResponseSchema } = require('../../../schemas/api_v3/rewardDefault.schema'); const endpoint = `${baseUrlV3}/reward/default`; diff --git a/tests/integration/api_v3/http/rewardInflation.test.js b/tests/integration/api_v3/http/rewardInflation.test.js index cd104b6c1..855ac1ceb 100644 --- a/tests/integration/api_v3/http/rewardInflation.test.js +++ b/tests/integration/api_v3/http/rewardInflation.test.js @@ -19,13 +19,9 @@ const { api } = require('../../../helpers/api'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - rewardInflationResponseSchema, -} = require('../../../schemas/api_v3/rewardInflation.schema'); +const { rewardInflationResponseSchema } = require('../../../schemas/api_v3/rewardInflation.schema'); const endpoint = `${baseUrlV3}/reward/annual-inflation`; diff --git a/tests/integration/api_v3/http/schemas.test.js b/tests/integration/api_v3/http/schemas.test.js index 6664d3104..53bd778bd 100644 --- a/tests/integration/api_v3/http/schemas.test.js +++ b/tests/integration/api_v3/http/schemas.test.js @@ -23,9 +23,7 @@ const { const schemas = require('../../../schemas/api_v3/constants/schemas'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -44,8 +42,9 @@ describe('Schemas API', () => { expect(response.data.ccm.schema).toStrictEqual(schemas.ccmSchema); expect(response.data.standardEvent.schema).toStrictEqual(schemas.standardEventSchema); - response.data.messages - .forEach(message => expect(message.schema).toStrictEqual(schemas.messageSchema)); + response.data.messages.forEach(message => + expect(message.schema).toStrictEqual(schemas.messageSchema), + ); }); it('should return bad request for invalid param', async () => { diff --git a/tests/integration/api_v3/http/spec.test.js b/tests/integration/api_v3/http/spec.test.js index b6d046c4b..2c0a42d2e 100644 --- a/tests/integration/api_v3/http/spec.test.js +++ b/tests/integration/api_v3/http/spec.test.js @@ -16,13 +16,9 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - specResponseSchema, -} = require('../../../schemas/api_v3/spec.schema'); +const { specResponseSchema } = require('../../../schemas/api_v3/spec.schema'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; diff --git a/tests/integration/api_v3/http/tokenAccountExists.test.js b/tests/integration/api_v3/http/tokenAccountExists.test.js index e058967ba..c6f76edfa 100644 --- a/tests/integration/api_v3/http/tokenAccountExists.test.js +++ b/tests/integration/api_v3/http/tokenAccountExists.test.js @@ -21,7 +21,12 @@ const baseUrlV3 = `${baseUrl}/api/v3`; const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { tokenAccountExistsSchema } = require('../../../schemas/api_v3/tokenAccountExists.schema'); -const { invalidPublicKeys, invalidAddresses, invalidNames, invalidTokenIDs } = require('../constants/invalidInputs'); +const { + invalidPublicKeys, + invalidAddresses, + invalidNames, + invalidTokenIDs, +} = require('../constants/invalidInputs'); const endpoint = `${baseUrlV3}/token/account/exists`; @@ -32,16 +37,23 @@ describe('Token account exists API', () => { beforeAll(async () => { let refValidatorAddress; do { - // eslint-disable-next-line no-await-in-loop - const { data: [stakeTx] = [] } = await api.get(`${baseUrlV3}/transactions?moduleCommand=pos:stake&limit=1`); + const { data: [stakeTx] = [] } = await api.get( + `${baseUrlV3}/transactions?moduleCommand=pos:stake&limit=1`, + ); if (stakeTx) { // Destructure to refer first entry of all the sent votes within the transaction - const { params: { stakes: [stake] } } = stakeTx; + const { + params: { + stakes: [stake], + }, + } = stakeTx; refValidatorAddress = stake.validatorAddress; } } while (!refValidatorAddress); // Fetch validator - const validatorsResponse = await api.get(`${baseUrlV3}/pos/validators?address=${refValidatorAddress}`); + const validatorsResponse = await api.get( + `${baseUrlV3}/pos/validators?address=${refValidatorAddress}`, + ); [refValidator] = validatorsResponse.data; // Fetch tokenID const tokenConstantsResponse = await api.get(`${baseUrlV3}/pos/constants`); @@ -50,45 +62,65 @@ describe('Token account exists API', () => { describe(`GET ${endpoint}`, () => { it('should return isExists:true when requested for known address', async () => { - const response = await api.get(`${endpoint}?address=${refValidator.address}&tokenID=${refTokenID}`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&tokenID=${refTokenID}`, + ); expect(response).toMap(tokenAccountExistsSchema); expect(response.data.isExists).toBe(true); }); it('should return isExists:false when requested for unknown address', async () => { - const response = await api.get(`${endpoint}?address=lskvmcf8bphtskyv49xg866u9a9dm7ftkxremzbkr&tokenID=${refTokenID}`); + const response = await api.get( + `${endpoint}?address=lskvmcf8bphtskyv49xg866u9a9dm7ftkxremzbkr&tokenID=${refTokenID}`, + ); expect(response).toMap(tokenAccountExistsSchema); expect(response.data.isExists).toBe(false); }); it('should return isExists:false when requested for incorrect tokenID with known address', async () => { - const response = await api.get(`${endpoint}?address=${refValidator.address}&tokenID=${unknownTokenID}`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&tokenID=${unknownTokenID}`, + ); expect(response).toMap(tokenAccountExistsSchema); expect(response.data.isExists).toBe(false); }); it('should return isExists:true requested for known publicKey', async () => { - const response = await api.get(`${endpoint}?publicKey=${refValidator.publicKey}&tokenID=${refTokenID}`); - expect(response).toMap(tokenAccountExistsSchema); - expect(response.data.isExists).toBe(true); + if (refValidator.publicKey) { + const response = await api.get( + `${endpoint}?publicKey=${refValidator.publicKey}&tokenID=${refTokenID}`, + ); + expect(response).toMap(tokenAccountExistsSchema); + expect(response.data.isExists).toBe(true); + } }); it('should return isExists:false requested for unknown publicKey', async () => { - const response = await api.get(`${endpoint}?publicKey=7dda7d86986775bd9ee4bc2f974e31d58b5280e02513c216143574866933bbdf&tokenID=${refTokenID}`); + const response = await api.get( + `${endpoint}?publicKey=7dda7d86986775bd9ee4bc2f974e31d58b5280e02513c216143574866933bbdf&tokenID=${refTokenID}`, + ); expect(response).toMap(tokenAccountExistsSchema); expect(response.data.isExists).toBe(false); }); it('should return isExists:false requested for incorrect tokenID with known publicKey', async () => { - const response = await api.get(`${endpoint}?publicKey=${refValidator.publicKey}&tokenID=${unknownTokenID}`); - expect(response).toMap(tokenAccountExistsSchema); - expect(response.data.isExists).toBe(false); + if (refValidator.publicKey) { + const response = await api.get( + `${endpoint}?publicKey=${refValidator.publicKey}&tokenID=${unknownTokenID}`, + ); + expect(response).toMap(tokenAccountExistsSchema); + expect(response.data.isExists).toBe(false); + } }); it('should return isExists:true when requested for known validator name', async () => { - const response = await api.get(`${endpoint}?name=${refValidator.name}&tokenID=${refTokenID}`); - expect(response).toMap(tokenAccountExistsSchema); - expect(response.data.isExists).toBe(true); + if (refValidator.name) { + const response = await api.get( + `${endpoint}?name=${refValidator.name}&tokenID=${refTokenID}`, + ); + expect(response).toMap(tokenAccountExistsSchema); + expect(response.data.isExists).toBe(true); + } }); it('should return isExists:false when requested for unknown validator name', async () => { @@ -98,7 +130,9 @@ describe('Token account exists API', () => { }); it('should return isExists:false when requested for incorrect tokenID with known validator name', async () => { - const response = await api.get(`${endpoint}?name=${refValidator.name}&tokenID=${unknownTokenID}`); + const response = await api.get( + `${endpoint}?name=${refValidator.name}&tokenID=${unknownTokenID}`, + ); expect(response).toMap(tokenAccountExistsSchema); expect(response.data.isExists).toBe(false); }); @@ -124,43 +158,57 @@ describe('Token account exists API', () => { }); it('should return bad request for an invalid param', async () => { - const response = await api.get(`${endpoint}?name=${refValidator.name}&tokenID=${refTokenID}&invalidParam=invalid`, 400); + const response = await api.get( + `${endpoint}?name=${refValidator.name}&tokenID=${refTokenID}&invalidParam=invalid`, + 400, + ); expect(response).toMap(badRequestSchema); }); it('should return bad request for an invalid empty param', async () => { - const response = await api.get(`${endpoint}?name=${refValidator.name}&tokenID=${refTokenID}&invalidParam=`, 400); + const response = await api.get( + `${endpoint}?name=${refValidator.name}&tokenID=${refTokenID}&invalidParam=`, + 400, + ); expect(response).toMap(badRequestSchema); }); it('should return bad request for an invalid token ID', async () => { for (let i = 0; i < invalidTokenIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?tokenID=${invalidTokenIDs[i]}&address=${refValidator.address}`, 400); + const response = await api.get( + `${endpoint}?tokenID=${invalidTokenIDs[i]}&address=${refValidator.address}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request for an invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?tokenID=${refTokenID}&address=${invalidAddresses[i]}`, 400); + const response = await api.get( + `${endpoint}?tokenID=${refTokenID}&address=${invalidAddresses[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request for an invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?tokenID=${refTokenID}&publicKey=${invalidPublicKeys[i]}`, 400); + const response = await api.get( + `${endpoint}?tokenID=${refTokenID}&publicKey=${invalidPublicKeys[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request for an invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?tokenID=${refTokenID}&name=${invalidNames[i]}`, 400); + const response = await api.get( + `${endpoint}?tokenID=${refTokenID}&name=${invalidNames[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); diff --git a/tests/integration/api_v3/http/tokenAvailableIDs.test.js b/tests/integration/api_v3/http/tokenAvailableIDs.test.js index 8ce31b47b..201fab70e 100644 --- a/tests/integration/api_v3/http/tokenAvailableIDs.test.js +++ b/tests/integration/api_v3/http/tokenAvailableIDs.test.js @@ -16,9 +16,7 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { goodResponseSchemaForTokenAvailableIDs, @@ -86,7 +84,6 @@ describe('Token IDs API', () => { it('should return bad request when called with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -94,7 +91,6 @@ describe('Token IDs API', () => { it('should return bad request when called with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/tokenBalances.test.js b/tests/integration/api_v3/http/tokenBalances.test.js index 794821669..524246f63 100644 --- a/tests/integration/api_v3/http/tokenBalances.test.js +++ b/tests/integration/api_v3/http/tokenBalances.test.js @@ -16,16 +16,18 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, - goodRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema, goodRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { tokenBalancesSchema, tokenBalancesMetaSchema, } = require('../../../schemas/api_v3/tokenBalances.schema'); -const { invalidAddresses, invalidTokenIDs, invalidLimits, invalidOffsets } = require('../constants/invalidInputs'); +const { + invalidAddresses, + invalidTokenIDs, + invalidLimits, + invalidOffsets, +} = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -73,7 +75,9 @@ describe('Tokens API', () => { }); it('should return token info when call with address and tokenID', async () => { - const response = await api.get(`${endpoint}?address=${refValidator.address}&tokenID=${currTokenID}`); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&tokenID=${currTokenID}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toEqual(1); @@ -83,32 +87,40 @@ describe('Tokens API', () => { it('should return bad request when requested with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${invalidAddresses[i]}&tokenID=${currTokenID}`, 400); + const response = await api.get( + `${endpoint}?address=${invalidAddresses[i]}&tokenID=${currTokenID}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request when requested with invalid tokenIDs', async () => { for (let i = 0; i < invalidTokenIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refValidator.address}&tokenID=${invalidTokenIDs[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&tokenID=${invalidTokenIDs[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request when requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refValidator.address}&tokenID=${currTokenID}&limit=${invalidLimits[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&tokenID=${currTokenID}&limit=${invalidLimits[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request when requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?address=${refValidator.address}&tokenID=${currTokenID}&offset=${invalidOffsets[i]}`, 400); + const response = await api.get( + `${endpoint}?address=${refValidator.address}&tokenID=${currTokenID}&offset=${invalidOffsets[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); diff --git a/tests/integration/api_v3/http/tokenConstants.test.js b/tests/integration/api_v3/http/tokenConstants.test.js index 41943f430..2cd39a333 100644 --- a/tests/integration/api_v3/http/tokenConstants.test.js +++ b/tests/integration/api_v3/http/tokenConstants.test.js @@ -16,9 +16,7 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { tokenConstantsSchema, diff --git a/tests/integration/api_v3/http/tokenSummary.test.js b/tests/integration/api_v3/http/tokenSummary.test.js index 78bf5de8e..bf14e43af 100644 --- a/tests/integration/api_v3/http/tokenSummary.test.js +++ b/tests/integration/api_v3/http/tokenSummary.test.js @@ -47,4 +47,3 @@ describe('Tokens API', () => { expect(response).toMap(badRequestSchema); }); }); - diff --git a/tests/integration/api_v3/http/tokenTopBalances.test.js b/tests/integration/api_v3/http/tokenTopBalances.test.js index 45f31bfef..2b322252b 100644 --- a/tests/integration/api_v3/http/tokenTopBalances.test.js +++ b/tests/integration/api_v3/http/tokenTopBalances.test.js @@ -21,7 +21,12 @@ const { badRequestSchema, goodRequestSchema } = require('../../../schemas/httpGe const { goodResponseSchemaForTokenTopBalances, } = require('../../../schemas/api_v3/tokenTopBalances.schema'); -const { invalidPartialSearches, invalidTokenIDs, invalidLimits, invalidOffsets } = require('../constants/invalidInputs'); +const { + invalidPartialSearches, + invalidTokenIDs, + invalidLimits, + invalidOffsets, +} = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -115,11 +120,15 @@ describe('Tokens top balances API', () => { }); it('should retrieve top token balances when called with token ID and search param (exact public key)', async () => { - const response = await api.get(`${endpoint}?tokenID=${tokenID}&search=${tokenInfo.publicKey}`); - expect(response).toMap(goodRequestSchema); - expect(response).toMap(goodResponseSchemaForTokenTopBalances); - expect(response.data[tokenID].length).toBeGreaterThanOrEqual(1); - expect(response.data[tokenID].length).toBeLessThanOrEqual(10); + if (tokenInfo.publicKey) { + const response = await api.get( + `${endpoint}?tokenID=${tokenID}&search=${tokenInfo.publicKey}`, + ); + expect(response).toMap(goodRequestSchema); + expect(response).toMap(goodResponseSchemaForTokenTopBalances); + expect(response.data[tokenID].length).toBeGreaterThanOrEqual(1); + expect(response.data[tokenID].length).toBeLessThanOrEqual(10); + } }); it('should return bad request when called without token ID', async () => { @@ -129,7 +138,6 @@ describe('Tokens top balances API', () => { it('should return bad request when called with invalid token ID', async () => { for (let i = 0; i < invalidTokenIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?tokenID=${invalidTokenIDs[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -137,24 +145,30 @@ describe('Tokens top balances API', () => { it('should return bad request when called with token ID and invalid search', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?tokenID=${tokenID}&search=${invalidPartialSearches[i]}`, 400); + const response = await api.get( + `${endpoint}?tokenID=${tokenID}&search=${invalidPartialSearches[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request when called with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?tokenID=${tokenID}&limit=${invalidLimits[i]}`, 400); + const response = await api.get( + `${endpoint}?tokenID=${tokenID}&limit=${invalidLimits[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); it('should return bad request when called with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${endpoint}?tokenID=${tokenID}&offset=${invalidOffsets[i]}`, 400); + const response = await api.get( + `${endpoint}?tokenID=${tokenID}&offset=${invalidOffsets[i]}`, + 400, + ); expect(response).toMap(badRequestSchema); } }); diff --git a/tests/integration/api_v3/http/transactionStatistics.test.js b/tests/integration/api_v3/http/transactionStatistics.test.js index 02583bd80..730b60e23 100644 --- a/tests/integration/api_v3/http/transactionStatistics.test.js +++ b/tests/integration/api_v3/http/transactionStatistics.test.js @@ -20,10 +20,7 @@ const config = require('../../../config'); const regex = require('../../../schemas/api_v3/regex'); const { api } = require('../../../helpers/api'); -const { - wrongInputParamSchema, - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { wrongInputParamSchema, badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { timelineItemSchema, @@ -38,14 +35,16 @@ const baseEndpoint = `${baseUrlV3}/transactions/statistics`; describe('Transaction statistics API', () => { describe('GET /transactions/statistics', () => { - [{ - interval: 'day', - dateFormat: 'YYYY-MM-DD', - }, - { - interval: 'month', - dateFormat: 'YYYY-MM', - }].forEach(({ interval, dateFormat }) => { + [ + { + interval: 'day', + dateFormat: 'YYYY-MM-DD', + }, + { + interval: 'month', + dateFormat: 'YYYY-MM', + }, + ].forEach(({ interval, dateFormat }) => { describe(`GET /transactions/statistics?interval=${interval}`, () => { const startOfIntervalInUTC = moment().utc().startOf(interval); @@ -78,11 +77,12 @@ describe('Transaction statistics API', () => { tokensListEntries.forEach(([tokenID, timeline]) => { expect(tokenID).toMatch(regex.TOKEN_ID); expect(timeline).toHaveLength(1); - timeline.forEach(timelineItem => expect(timelineItem) - .toMap(timelineItemSchema, { + timeline.forEach(timelineItem => + expect(timelineItem).toMap(timelineItemSchema, { date: startOfIntervalInUTC.format(dateFormat), timestamp: startOfIntervalInUTC.unix(), - })); + }), + ); }); expect(response.meta).toMap(metaSchema, { limit }); }); @@ -93,18 +93,21 @@ describe('Transaction statistics API', () => { const offset = 1; const startOfYesterday = moment(startOfIntervalInUTC).subtract(1, interval); - const response = await api.get(`${baseEndpoint}?interval=${interval}&limit=${limit}&offset=${offset}`); + const response = await api.get( + `${baseEndpoint}?interval=${interval}&limit=${limit}&offset=${offset}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toMap(transactionStatisticsSchema); const tokensListEntries = Object.entries(response.data.timeline); tokensListEntries.forEach(([tokenID, timeline]) => { expect(tokenID).toMatch(regex.TOKEN_ID); expect(timeline.length).toBeGreaterThanOrEqual(0); - timeline.forEach(timelineItem => expect(timelineItem) - .toMap(timelineItemSchema, { + timeline.forEach(timelineItem => + expect(timelineItem).toMap(timelineItemSchema, { date: startOfYesterday.format(dateFormat), timestamp: startOfYesterday.unix(), - })); + }), + ); }); expect(response.meta.duration).toMatchObject({ @@ -121,7 +124,9 @@ describe('Transaction statistics API', () => { const limit = 2; const offset = 1; - const response = await api.get(`${baseEndpoint}?interval=${interval}&limit=${limit}&offset=${offset}`); + const response = await api.get( + `${baseEndpoint}?interval=${interval}&limit=${limit}&offset=${offset}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toMap(transactionStatisticsSchema); const tokensListEntries = Object.entries(response.data.timeline); @@ -146,16 +151,20 @@ describe('Transaction statistics API', () => { it('should return error 400 if called with invalid limits', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${baseEndpoint}?interval=${interval}&limit=${invalidLimits[i]}`, 400); + const response = await api.get( + `${baseEndpoint}?interval=${interval}&limit=${invalidLimits[i]}`, + 400, + ); expect(response).toMap(wrongInputParamSchema); } }); it('should return error 400 if called with invalid offset', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await api.get(`${baseEndpoint}?interval=${interval}&offset=${invalidOffsets[i]}`, 400); + const response = await api.get( + `${baseEndpoint}?interval=${interval}&offset=${invalidOffsets[i]}`, + 400, + ); expect(response).toMap(wrongInputParamSchema); } }); diff --git a/tests/integration/api_v3/http/transactions.test.js b/tests/integration/api_v3/http/transactions.test.js index 3ab97f00b..ed0a0d044 100644 --- a/tests/integration/api_v3/http/transactions.test.js +++ b/tests/integration/api_v3/http/transactions.test.js @@ -15,7 +15,16 @@ */ import moment from 'moment'; import { TRANSACTION_EXECUTION_STATUSES } from '../../../schemas/api_v3/constants/transactions'; -import { invalidAddresses, invalidBlockIDs, invalidLimits, invalidOffsets } from '../constants/invalidInputs'; +import { + invalidAddresses, + invalidBlockIDs, + invalidChainIDs, + invalidLimits, + invalidOffsets, +} from '../constants/invalidInputs'; +import { waitMs } from '../../../helpers/utils'; + +jest.setTimeout(1200000); const config = require('../../../config'); const { api } = require('../../../helpers/api'); @@ -35,11 +44,56 @@ const baseAddress = config.SERVICE_ENDPOINT; const baseUrl = `${baseAddress}/api/v3`; const endpoint = `${baseUrl}/transactions`; +const fetchTxWithRetry = async txEndpoint => { + let retries = 10; + + while (retries > 0) { + try { + const response = await api.get(txEndpoint); + const [tx] = response.data; + + if (tx) { + return { + success: true, + data: tx, + }; + } + } catch (error) { + console.error(`Error fetching transactions. Retries left: ${retries}`); + + // Delay by 3 sec + await waitMs(3000); + } + retries--; + } + + return { + success: false, + }; +}; + describe('Transactions API', () => { let refTransaction; + beforeAll(async () => { - const response = await api.get(`${endpoint}?limit=1&moduleCommand=token:transfer`); - [refTransaction] = response.data; + const crossChainTxRes = await fetchTxWithRetry( + `${endpoint}?limit=1&moduleCommand=token:transferCrossChain`, + ); + + // Try to fetch transfer transaction on same chain, incase no transactions with transfer cross chain + if (!crossChainTxRes.success) { + const sameChainTxRes = await fetchTxWithRetry( + `${endpoint}?limit=1&moduleCommand=token:transfer`, + ); + + if (!sameChainTxRes.success) { + throw new Error('Failed to fetch transactions after 10 retries'); + } else { + refTransaction = sameChainTxRes.data; + } + } else { + refTransaction = crossChainTxRes.data; + } }); describe('Retrieve transaction lists', () => { @@ -60,13 +114,17 @@ describe('Transactions API', () => { expect(response.meta).toMap(metaSchema); }); - it(`should return list of transactions when called with executionStatus=${TRANSACTION_EXECUTION_STATUSES.join(',')}`, async () => { - const response = await api.get(`${endpoint}?executionStatus=${TRANSACTION_EXECUTION_STATUSES.join(',')}`); + it(`should return list of transactions when called with executionStatus=${TRANSACTION_EXECUTION_STATUSES.join( + ',', + )}`, async () => { + const response = await api.get( + `${endpoint}?executionStatus=${TRANSACTION_EXECUTION_STATUSES.join(',')}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(10); - response.data.forEach((transaction) => { + response.data.forEach(transaction => { if (transaction.executionStatus === 'pending') { expect(transaction).toMap(pendingTransactionSchema); } else { @@ -83,8 +141,9 @@ describe('Transactions API', () => { expect(response.data.length).toBeGreaterThanOrEqual(1); expect(response.data.length).toBeLessThanOrEqual(10); response.data.forEach((transaction, i) => { - expect(transaction) - .toMap(transactionSchema, { moduleCommand: refTransaction.moduleCommand }); + expect(transaction).toMap(transactionSchema, { + moduleCommand: refTransaction.moduleCommand, + }); if (i > 0) { const prevTx = response.data[i - 1]; const prevTxTimestamp = prevTx.block.timestamp; @@ -134,7 +193,10 @@ describe('Transactions API', () => { }); it('should throw 400 BAD REQUEST error when called with long invalid transactionID', async () => { - const response = await api.get(`${endpoint}?transactionID=a0833fb5b5534a0c53c3a766bf356c92df2a28e1730fba85667b24f139f65b35578`, 400); + const response = await api.get( + `${endpoint}?transactionID=a0833fb5b5534a0c53c3a766bf356c92df2a28e1730fba85667b24f139f65b35578`, + 400, + ); expect(response).toMap(badRequestSchema); }); @@ -177,7 +239,6 @@ describe('Transactions API', () => { it('should return bad request when called with invalid blockID', async () => { for (let i = 0; i < invalidBlockIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?blockID=${invalidBlockIDs[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -259,7 +320,6 @@ describe('Transactions API', () => { it('should return bad request when called with invalid senderAddress', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?senderAddress=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -268,7 +328,9 @@ describe('Transactions API', () => { describe('Retrieve transaction list by recipientAddress', () => { it('should return transactions when called with known address', async () => { - const response = await api.get(`${endpoint}?recipientAddress=${refTransaction.params.recipientAddress}`); + const response = await api.get( + `${endpoint}?recipientAddress=${refTransaction.params.recipientAddress}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toBeGreaterThanOrEqual(1); @@ -304,13 +366,45 @@ describe('Transactions API', () => { it('should throw error when called with invalid recipientAddress', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?recipientAddress=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } }); }); + describe('Retrieve transaction list by receivingChainID', () => { + it('should return transactions when called with receivingChainID', async () => { + if (refTransaction.params.receivingChainID) { + const response = await api.get( + `${endpoint}?receivingChainID=${refTransaction.params.receivingChainID}`, + ); + expect(response).toMap(goodRequestSchema); + expect(response.data).toBeInstanceOf(Array); + expect(response.data.length).toBeGreaterThanOrEqual(1); + expect(response.data.length).toBeLessThanOrEqual(10); + response.data.forEach((transaction, i) => { + expect(transaction).toMap(transactionSchema); + expect(transaction.params.receivingChainID).toEqual( + refTransaction.params.receivingChainID, + ); + if (i > 0) { + const prevTx = response.data[i]; + const prevTxTimestamp = prevTx.block.timestamp; + expect(prevTxTimestamp).toBeGreaterThanOrEqual(transaction.block.timestamp); + } + }); + expect(response.meta).toMap(metaSchema); + } + }); + + it('should throw error when called with invalid receivingChainID', async () => { + for (let i = 0; i < invalidChainIDs.length; i++) { + const response = await api.get(`${endpoint}?receivingChainID=${invalidChainIDs[i]}`, 400); + expect(response).toMap(badRequestSchema); + } + }); + }); + describe('Retrieve transaction list by address', () => { it('should return transactions when called with known address', async () => { const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}`); @@ -320,8 +414,9 @@ describe('Transactions API', () => { response.data.forEach((transaction, i) => { expect(transaction).toMap(transactionSchema); if (transaction.params.recipientAddress) { - expect([transaction.sender.address, transaction.params.recipientAddress]) - .toContain(refTransaction.sender.address); + expect([transaction.sender.address, transaction.params.recipientAddress]).toContain( + refTransaction.sender.address, + ); } else { expect(transaction.sender.address).toMatch(refTransaction.sender.address); } @@ -336,7 +431,6 @@ describe('Transactions API', () => { it('should throw error when called with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?address=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -345,7 +439,9 @@ describe('Transactions API', () => { describe('Retrieve transaction list within timestamps', () => { it('should return transactions when called with timestamp range', async () => { - const from = moment(refTransaction.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refTransaction.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const toTimestamp = refTransaction.block.timestamp; const response = await api.get(`${endpoint}?timestamp=${from}:${toTimestamp}`); expect(response).toMap(goodRequestSchema); @@ -366,7 +462,9 @@ describe('Transactions API', () => { }); it('should return transactions when called with fromTimestamp', async () => { - const from = moment(refTransaction.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refTransaction.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const response = await api.get(`${endpoint}?timestamp=${from}:`); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); @@ -468,7 +566,10 @@ describe('Transactions API', () => { const expectedStatusCode = 400; const minHeight = refTransaction.block.height; const maxHeight = refTransaction.block.height + 100; - const response = await api.get(`${endpoint}?height=${maxHeight}:${minHeight}&limit=100`, expectedStatusCode); + const response = await api.get( + `${endpoint}?height=${maxHeight}:${minHeight}&limit=100`, + expectedStatusCode, + ); expect(response).toMap(badRequestSchema); }); }); @@ -552,7 +653,11 @@ describe('Transactions API', () => { describe('Fetch transactions based on multiple request params', () => { it('should return transaction when called with senderAddress and nonce', async () => { - const response = await api.get(`${endpoint}?senderAddress=${refTransaction.sender.address}&nonce=${Number(refTransaction.nonce)}`); + const response = await api.get( + `${endpoint}?senderAddress=${refTransaction.sender.address}&nonce=${Number( + refTransaction.nonce, + )}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toEqual(1); @@ -566,7 +671,12 @@ describe('Transactions API', () => { it('should throw error when called with unsupported params', async () => { const expectedStatusCode = 400; - const response = await api.get(`${endpoint}?address=${refTransaction.sender.address}&nonce=${Number(refTransaction.nonce) - 1}`, expectedStatusCode); + const response = await api.get( + `${endpoint}?address=${refTransaction.sender.address}&nonce=${ + Number(refTransaction.nonce) - 1 + }`, + expectedStatusCode, + ); expect(response).toMap(badRequestSchema); }); @@ -578,7 +688,9 @@ describe('Transactions API', () => { }); it('should return transaction when called with transactionID and blockID', async () => { - const response = await api.get(`${endpoint}?transactionID=${refTransaction.id}&blockID=${refTransaction.block.id}`); + const response = await api.get( + `${endpoint}?transactionID=${refTransaction.id}&blockID=${refTransaction.block.id}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toEqual(1); @@ -591,7 +703,9 @@ describe('Transactions API', () => { }); it('should return transaction when called with transactionID and height', async () => { - const response = await api.get(`${endpoint}?transactionID=${refTransaction.id}&height=${refTransaction.block.height}`); + const response = await api.get( + `${endpoint}?transactionID=${refTransaction.id}&height=${refTransaction.block.height}`, + ); expect(response).toMap(goodRequestSchema); expect(response.data).toBeInstanceOf(Array); expect(response.data.length).toEqual(1); @@ -629,7 +743,6 @@ describe('Transactions API', () => { it('should return bad request if requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?limit=${invalidLimits[i]}`, 400); expect(response).toMap(badRequestSchema); } @@ -637,7 +750,6 @@ describe('Transactions API', () => { it('should return bad request if requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?offset=${invalidOffsets[i]}`, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/transactionsDryRun.test.js b/tests/integration/api_v3/http/transactionsDryRun.test.js index 355935775..ffe9610e8 100644 --- a/tests/integration/api_v3/http/transactionsDryRun.test.js +++ b/tests/integration/api_v3/http/transactionsDryRun.test.js @@ -159,7 +159,6 @@ describe('Post dryrun transactions API', () => { const { senderPublicKey, ...remTransactionObject } = TRANSACTION_OBJECT_VALID; for (let i = 0; i < invalidPublicKeys.length; i++) { remTransactionObject.senderPublicKey = invalidPublicKeys[i]; - // eslint-disable-next-line no-await-in-loop const response = await api.post(endpoint, { transaction: remTransactionObject }, 400); expect(response).toMap(badRequestSchema); } @@ -174,7 +173,6 @@ describe('Post dryrun transactions API', () => { ...params, recipientAddress: invalidAddresses[i], }; - // eslint-disable-next-line no-await-in-loop const response = await api.post(endpoint, { transaction: remTransactionObject }, 400); expect(response).toMap(badRequestSchema); } diff --git a/tests/integration/api_v3/http/transactionsEstimateFees.test.js b/tests/integration/api_v3/http/transactionsEstimateFees.test.js index 8261457fe..f811893aa 100644 --- a/tests/integration/api_v3/http/transactionsEstimateFees.test.js +++ b/tests/integration/api_v3/http/transactionsEstimateFees.test.js @@ -22,30 +22,26 @@ const { } = require('../constants/transactionsDryRun'); const { transactionsMap } = require('../constants/transactionsEstimateFees'); -const { - badRequestSchema, - wrongInputParamSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema, wrongInputParamSchema } = require('../../../schemas/httpGenerics.schema'); -const { transactionEstimateFees } = require('../../../schemas/api_v3/transactionsEstimateFees.schema'); +const { + transactionEstimateFees, +} = require('../../../schemas/api_v3/transactionsEstimateFees.schema'); const { invalidAddresses, invalidPublicKeys } = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; const endpoint = `${baseUrlV3}/transactions/estimate-fees`; -const getEntries = (o, prefix = '') => Object - .entries(o) - .flatMap( - ([k, v]) => Object(v) === v ? getEntries(v, `${prefix}${k}.`) : [[`${prefix}${k}`, v]], +const getEntries = (o, prefix = '') => + Object.entries(o).flatMap(([k, v]) => + Object(v) === v ? getEntries(v, `${prefix}${k}.`) : [[`${prefix}${k}`, v]], ); -const getSumOfMetaValues = (meta) => { +const getSumOfMetaValues = meta => { const flattenedEntries = getEntries(meta.breakdown); const flattenedObject = Object.fromEntries(flattenedEntries); - const sum = Object - .values(flattenedObject) - .reduce((a, b) => BigInt(a) + BigInt(b), BigInt(0)); + const sum = Object.values(flattenedObject).reduce((a, b) => BigInt(a) + BigInt(b), BigInt(0)); return sum.toString(); }; @@ -56,10 +52,9 @@ describe('Post estimate-fees transactions API', () => { }); it('should return transaction fees with valid transaction object with only required properties', async () => { - const response = await api.post( - endpoint, - { transaction: TRANSACTION_OBJECT_VALID_WITH_REQUIRED_PROPS }, - ); + const response = await api.post(endpoint, { + transaction: TRANSACTION_OBJECT_VALID_WITH_REQUIRED_PROPS, + }); expect(response).toMap(transactionEstimateFees); }); @@ -85,7 +80,6 @@ describe('Post estimate-fees transactions API', () => { const { senderPublicKey, ...remTransactionObject } = TRANSACTION_OBJECT_VALID; for (let i = 0; i < invalidPublicKeys.length; i++) { remTransactionObject.senderPublicKey = invalidPublicKeys[i]; - // eslint-disable-next-line no-await-in-loop const response = await api.post(endpoint, { transaction: remTransactionObject }, 400); expect(response).toMap(badRequestSchema); } @@ -98,23 +92,20 @@ describe('Post estimate-fees transactions API', () => { ...params, recipientAddress: invalidAddresses[i], }; - // eslint-disable-next-line no-await-in-loop const response = await api.post(endpoint, { transaction: remTransactionObject }, 400); expect(response).toMap(badRequestSchema); } }); describe('Test estimate-fees transactions for all transaction types', () => { - Object - .entries(transactionsMap) - .forEach(([transactionType, transactionObject]) => { - it(`should return transaction fees when called with ${transactionType} transaction object`, async () => { - const { fee, ...remTransactionObject } = transactionObject; - const response = await api.post(endpoint, { transaction: remTransactionObject }); - expect(response).toMap(transactionEstimateFees); - expect(getSumOfMetaValues(response.meta)).toEqual(response.data.transaction.fee.minimum); - }); + Object.entries(transactionsMap).forEach(([transactionType, transactionObject]) => { + it(`should return transaction fees when called with ${transactionType} transaction object`, async () => { + const { fee, ...remTransactionObject } = transactionObject; + const response = await api.post(endpoint, { transaction: remTransactionObject }); + expect(response).toMap(transactionEstimateFees); + expect(getSumOfMetaValues(response.meta)).toEqual(response.data.transaction.fee.minimum); }); + }); }); it('should return bad request when called with valid transaction string', async () => { diff --git a/tests/integration/api_v3/http/validator.test.js b/tests/integration/api_v3/http/validator.test.js index 83f8f9fef..fe64b2251 100644 --- a/tests/integration/api_v3/http/validator.test.js +++ b/tests/integration/api_v3/http/validator.test.js @@ -16,9 +16,7 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); -const { - badRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const { goodRequestSchemaForValidator, @@ -26,9 +24,7 @@ const { validatorMetaSchema, } = require('../../../schemas/api_v3/validatorSchema.schema'); -const { - invalidAddresses, -} = require('../constants/invalidInputs'); +const { invalidAddresses } = require('../constants/invalidInputs'); const baseUrl = config.SERVICE_ENDPOINT; const baseUrlV3 = `${baseUrl}/api/v3`; @@ -55,14 +51,16 @@ describe('Validator API', () => { it('should return bad request when requested with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await api.get(`${endpoint}?address=${invalidAddresses[i]}`, 400); expect(response).toMap(badRequestSchema); } }); it('should return bad request when requested with address CSV', async () => { - const response = await api.get(`${endpoint}?address=${refGenerator.address},${refGenerator.address}`, 400); + const response = await api.get( + `${endpoint}?address=${refGenerator.address},${refGenerator.address}`, + 400, + ); expect(response).toMap(badRequestSchema); }); diff --git a/tests/integration/api_v3/http/validatorValidateBLSKey.test.js b/tests/integration/api_v3/http/validatorValidateBLSKey.test.js index 16995ca88..dc1f49a78 100644 --- a/tests/integration/api_v3/http/validatorValidateBLSKey.test.js +++ b/tests/integration/api_v3/http/validatorValidateBLSKey.test.js @@ -17,7 +17,10 @@ const config = require('../../../config'); const { api } = require('../../../helpers/api'); const { BLS_KEY, PROOF_OF_POSSESSION } = require('../constants/validatorValidateBLSKey'); -const { validateBLSKeySchema, validateBLSKeyGoodRequestSchema } = require('../../../schemas/api_v3/validatorSchema.schema'); +const { + validateBLSKeySchema, + validateBLSKeyGoodRequestSchema, +} = require('../../../schemas/api_v3/validatorSchema.schema'); const { badRequestSchema } = require('../../../schemas/httpGenerics.schema'); const baseUrl = config.SERVICE_ENDPOINT; @@ -26,13 +29,10 @@ const endpoint = `${baseUrlV3}/validator/validate-bls-key`; describe('validate BLS Key API', () => { it('should return false when requested with valid blsKey and proofOfPossession pair', async () => { - const response = await api.post( - endpoint, - { - blsKey: BLS_KEY.VALID, - proofOfPossession: PROOF_OF_POSSESSION.VALID, - }, - ); + const response = await api.post(endpoint, { + blsKey: BLS_KEY.VALID, + proofOfPossession: PROOF_OF_POSSESSION.VALID, + }); expect(response).toMap(validateBLSKeyGoodRequestSchema); expect(response.data).toMap(validateBLSKeySchema); @@ -40,13 +40,10 @@ describe('validate BLS Key API', () => { }); it('should return false when requested with invalid blsKey', async () => { - const response = await api.post( - endpoint, - { - blsKey: BLS_KEY.INVALID, - proofOfPossession: PROOF_OF_POSSESSION.VALID, - }, - ); + const response = await api.post(endpoint, { + blsKey: BLS_KEY.INVALID, + proofOfPossession: PROOF_OF_POSSESSION.VALID, + }); expect(response).toMap(validateBLSKeyGoodRequestSchema); expect(response.data).toMap(validateBLSKeySchema); @@ -54,13 +51,10 @@ describe('validate BLS Key API', () => { }); it('should return false when requested with invalid proofOfPossession', async () => { - const response = await api.post( - endpoint, - { - blsKey: BLS_KEY.VALID, - proofOfPossession: PROOF_OF_POSSESSION.INVALID, - }, - ); + const response = await api.post(endpoint, { + blsKey: BLS_KEY.VALID, + proofOfPossession: PROOF_OF_POSSESSION.INVALID, + }); expect(response).toMap(validateBLSKeyGoodRequestSchema); expect(response.data).toMap(validateBLSKeySchema); @@ -68,13 +62,10 @@ describe('validate BLS Key API', () => { }); it('should return false when requested with invalid blsKey and proofOfPossession', async () => { - const response = await api.post( - endpoint, - { - blsKey: BLS_KEY.INVALID, - proofOfPossession: PROOF_OF_POSSESSION.INVALID, - }, - ); + const response = await api.post(endpoint, { + blsKey: BLS_KEY.INVALID, + proofOfPossession: PROOF_OF_POSSESSION.INVALID, + }); expect(response).toMap(validateBLSKeyGoodRequestSchema); expect(response.data).toMap(validateBLSKeySchema); @@ -82,8 +73,11 @@ describe('validate BLS Key API', () => { }); it('should return bad request when requested without blsKey', async () => { - const response = await api.post(endpoint, - { proofOfPossession: PROOF_OF_POSSESSION.VALID }, 400); + const response = await api.post( + endpoint, + { proofOfPossession: PROOF_OF_POSSESSION.VALID }, + 400, + ); expect(response).toMap(badRequestSchema); }); @@ -98,7 +92,8 @@ describe('validate BLS Key API', () => { }); it('should return bad request when requested with invalid param', async () => { - const response = await api.post(endpoint, + const response = await api.post( + endpoint, { blsKey: BLS_KEY.VALID, proofOfPossession: PROOF_OF_POSSESSION.VALID, diff --git a/tests/integration/api_v3/rpc/auth.test.js b/tests/integration/api_v3/rpc/auth.test.js index 51df05a54..691ef61d3 100644 --- a/tests/integration/api_v3/rpc/auth.test.js +++ b/tests/integration/api_v3/rpc/auth.test.js @@ -15,9 +15,7 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -30,18 +28,19 @@ const { authAccountMetaSchema, } = require('../../../schemas/api_v3/authAccountSchema.schema'); -const { - invalidAddresses, -} = require('../constants/invalidInputs'); +const { invalidAddresses } = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getAuthAccountInfo = async (params) => request(wsRpcUrl, 'get.auth', params); -const getTransactions = async (params) => request(wsRpcUrl, 'get.transactions', params); +const getAuthAccountInfo = async params => request(wsRpcUrl, 'get.auth', params); +const getTransactions = async params => request(wsRpcUrl, 'get.transactions', params); describe('get.auth', () => { let refTransaction; beforeAll(async () => { - const response = await getTransactions({ moduleCommand: 'auth:registerMultisignature', limit: 1 }); + const response = await getTransactions({ + moduleCommand: 'auth:registerMultisignature', + limit: 1, + }); [refTransaction] = response.result.data; }); @@ -61,7 +60,6 @@ describe('get.auth', () => { it('should return invalid params for an invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getAuthAccountInfo({ address: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/blockchainApps.test.js b/tests/integration/api_v3/rpc/blockchainApps.test.js index 73c389561..3516d8d19 100644 --- a/tests/integration/api_v3/rpc/blockchainApps.test.js +++ b/tests/integration/api_v3/rpc/blockchainApps.test.js @@ -15,27 +15,28 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, jsonRpcEnvelopeSchema, } = require('../../../schemas/rpcGenerics.schema'); +const { blockchainAppsSchema } = require('../../../schemas/api_v3/blockchainApps.schema'); const { - blockchainAppsSchema, -} = require('../../../schemas/api_v3/blockchainApps.schema'); -const { invalidPartialSearches, invalidLimits, invalidOffsets, invalidNames, invalidChainIDCSV } = require('../constants/invalidInputs'); + invalidPartialSearches, + invalidLimits, + invalidOffsets, + invalidNames, + invalidChainIDCSV, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getBlockchainApps = async (params) => request(wsRpcUrl, 'get.blockchain.apps', params); +const getBlockchainApps = async params => request(wsRpcUrl, 'get.blockchain.apps', params); const getNetworkStatus = async params => request(wsRpcUrl, 'get.network.status', params); let curChainID; -// TODO: Update test when data is available in blockchain_apps table describe('get.blockchain.apps', () => { beforeAll(async () => { const response = await getNetworkStatus(); @@ -131,7 +132,6 @@ describe('get.blockchain.apps', () => { it('should return invalid params for an invalid search param', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ search: invalidPartialSearches[i] }); expect(response).toMap(invalidParamsSchema); } @@ -139,7 +139,6 @@ describe('get.blockchain.apps', () => { it('should return invalid params for an invalid chainID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ chainID: invalidChainIDCSV[i] }); expect(response).toMap(invalidParamsSchema); } @@ -147,7 +146,6 @@ describe('get.blockchain.apps', () => { it('should return invalid params for an invalid chain name param', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ chainName: invalidNames[i] }); expect(response).toMap(invalidParamsSchema); } @@ -185,7 +183,6 @@ describe('get.blockchain.apps', () => { it('should return invalid params for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ limit: invalidLimits[i] }); expect(response).toMap(invalidParamsSchema); } @@ -193,7 +190,6 @@ describe('get.blockchain.apps', () => { it('should return invalid params for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ offset: invalidOffsets[i] }); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/blockchainAppsMetaList.test.js b/tests/integration/api_v3/rpc/blockchainAppsMetaList.test.js index 88c666c72..3778ee1b2 100644 --- a/tests/integration/api_v3/rpc/blockchainAppsMetaList.test.js +++ b/tests/integration/api_v3/rpc/blockchainAppsMetaList.test.js @@ -15,9 +15,7 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -28,10 +26,17 @@ const { const { blockchainAppMetaListSchema, } = require('../../../schemas/api_v3/blockchainAppsMetaListSchema.schema'); -const { invalidOffsets, invalidLimits, invalidPartialSearches, invalidNames, invalidChainIDCSV } = require('../constants/invalidInputs'); +const { + invalidOffsets, + invalidLimits, + invalidPartialSearches, + invalidNames, + invalidChainIDCSV, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getBlockchainApps = async (params) => request(wsRpcUrl, 'get.blockchain.apps.meta.list', params); +const getBlockchainApps = async params => + request(wsRpcUrl, 'get.blockchain.apps.meta.list', params); describe('get.blockchain.apps.meta.list', () => { it('should return blockchain applications meta list', async () => { @@ -150,7 +155,6 @@ describe('get.blockchain.apps.meta.list', () => { it('should return invalid params for an invalid search param', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ search: invalidPartialSearches[i] }); expect(response).toMap(invalidParamsSchema); } @@ -158,7 +162,6 @@ describe('get.blockchain.apps.meta.list', () => { it('should return invalid params for an invalid chainID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ chainID: invalidChainIDCSV[i] }); expect(response).toMap(invalidParamsSchema); } @@ -166,7 +169,6 @@ describe('get.blockchain.apps.meta.list', () => { it('should return invalid params for an invalid chainName param', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ chainName: invalidNames[i] }); expect(response).toMap(invalidParamsSchema); } @@ -194,7 +196,6 @@ describe('get.blockchain.apps.meta.list', () => { it('should return invalid params for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ limit: invalidLimits[i] }); expect(response).toMap(invalidParamsSchema); } @@ -202,7 +203,6 @@ describe('get.blockchain.apps.meta.list', () => { it('should return invalid params for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainApps({ offset: invalidOffsets[i] }); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/blockchainAppsMetadata.test.js b/tests/integration/api_v3/rpc/blockchainAppsMetadata.test.js index b93afebe3..c4bf9a815 100644 --- a/tests/integration/api_v3/rpc/blockchainAppsMetadata.test.js +++ b/tests/integration/api_v3/rpc/blockchainAppsMetadata.test.js @@ -14,11 +14,11 @@ * */ const config = require('../../../config'); -const { CHAIN_ID_PREFIX_NETWORK_MAP } = require('../../../../services/blockchain-app-registry/config'); - const { - request, -} = require('../../../helpers/socketIoRpcRequest'); + CHAIN_ID_PREFIX_NETWORK_MAP, +} = require('../../../../services/blockchain-app-registry/config'); + +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -30,10 +30,17 @@ const { blockchainAppMetadataSchema, } = require('../../../schemas/api_v3/blockchainAppsMetadataSchema.schema'); -const { invalidChainIDCSV, invalidNamesCSV, invalidOffsets, invalidLimits, invalidPartialSearches } = require('../constants/invalidInputs'); +const { + invalidChainIDCSV, + invalidNamesCSV, + invalidOffsets, + invalidLimits, + invalidPartialSearches, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getBlockchainAppsMetadata = async (params) => request(wsRpcUrl, 'get.blockchain.apps.meta', params); +const getBlockchainAppsMetadata = async params => + request(wsRpcUrl, 'get.blockchain.apps.meta', params); const getNetworkStatus = async params => request(wsRpcUrl, 'get.network.status', params); let curChainID; @@ -80,7 +87,11 @@ describe('get.blockchain.apps.meta', () => { }); it('should retrieve blockchain applications off-chain metadata with limit=5, offset=1, and sort=chainName:desc', async () => { - const response = await getBlockchainAppsMetadata({ limit: 5, offset: 1, sort: 'chainName:desc' }); + const response = await getBlockchainAppsMetadata({ + limit: 5, + offset: 1, + sort: 'chainName:desc', + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); @@ -96,6 +107,7 @@ describe('get.blockchain.apps.meta', () => { const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toEqual(1); + expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(result.meta).toMap(metaSchema); }); @@ -106,7 +118,7 @@ describe('get.blockchain.apps.meta', () => { const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); - expect(result.data.length).toBeLessThanOrEqual(2); + expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(result.meta).toMap(metaSchema); }); @@ -120,7 +132,7 @@ describe('get.blockchain.apps.meta', () => { const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); - expect(result.data.length).toBeLessThanOrEqual(2); + expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(result.meta).toMap(metaSchema); }); @@ -131,6 +143,7 @@ describe('get.blockchain.apps.meta', () => { const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(result.meta).toMap(metaSchema); }); @@ -141,7 +154,7 @@ describe('get.blockchain.apps.meta', () => { const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); - expect(result.data.length).toBeLessThanOrEqual(3); + expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(blockchainApp => expect(blockchainApp).toMap(blockchainAppMetadataSchema)); expect(result.meta).toMap(metaSchema); }); @@ -219,8 +232,9 @@ describe('get.blockchain.apps.meta', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach(blockchainAppMetadata => expect(blockchainAppMetadata) - .toMap(blockchainAppMetadataSchema, { isDefault: true })); + result.data.forEach(blockchainAppMetadata => + expect(blockchainAppMetadata).toMap(blockchainAppMetadataSchema, { isDefault: true }), + ); expect(result.meta).toMap(metaSchema); }); @@ -231,8 +245,9 @@ describe('get.blockchain.apps.meta', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach(blockchainAppMetadata => expect(blockchainAppMetadata) - .toMap(blockchainAppMetadataSchema, { isDefault: false })); + result.data.forEach(blockchainAppMetadata => + expect(blockchainAppMetadata).toMap(blockchainAppMetadataSchema, { isDefault: false }), + ); expect(result.meta).toMap(metaSchema); }); @@ -258,7 +273,6 @@ describe('get.blockchain.apps.meta', () => { it('should return invalid params for an invalid chain ID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsMetadata({ chainID: invalidChainIDCSV[i] }); expect(response).toMap(invalidParamsSchema); } @@ -266,7 +280,6 @@ describe('get.blockchain.apps.meta', () => { it('should return invalid params for an invalid chain name param', async () => { for (let i = 0; i < invalidNamesCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsMetadata({ chainName: invalidNamesCSV[i] }); expect(response).toMap(invalidParamsSchema); } @@ -274,7 +287,6 @@ describe('get.blockchain.apps.meta', () => { it('should return invalid params for an invalid display name param', async () => { for (let i = 0; i < invalidNamesCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsMetadata({ displayName: invalidNamesCSV[i] }); expect(response).toMap(invalidParamsSchema); } @@ -287,7 +299,6 @@ describe('get.blockchain.apps.meta', () => { it('should return invalid params for an invalid search param', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsMetadata({ search: invalidPartialSearches[i] }); expect(response).toMap(invalidParamsSchema); } @@ -300,7 +311,6 @@ describe('get.blockchain.apps.meta', () => { it('should return invalid params for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsMetadata({ limit: invalidLimits[i] }); expect(response).toMap(invalidParamsSchema); } @@ -308,7 +318,6 @@ describe('get.blockchain.apps.meta', () => { it('should return invalid params for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsMetadata({ offset: invalidOffsets[i] }); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/blockchainAppsStatistics.test.js b/tests/integration/api_v3/rpc/blockchainAppsStatistics.test.js index e85a3160e..424a82636 100644 --- a/tests/integration/api_v3/rpc/blockchainAppsStatistics.test.js +++ b/tests/integration/api_v3/rpc/blockchainAppsStatistics.test.js @@ -15,13 +15,9 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); -const { - invalidParamsSchema, -} = require('../../../schemas/rpcGenerics.schema'); +const { invalidParamsSchema } = require('../../../schemas/rpcGenerics.schema'); const { blockchainAppsStatsSchema, @@ -29,7 +25,8 @@ const { } = require('../../../schemas/api_v3/blockchainApps.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getBlockchainAppsStatistics = async (params) => request(wsRpcUrl, 'get.blockchain.apps.statistics', params); +const getBlockchainAppsStatistics = async params => + request(wsRpcUrl, 'get.blockchain.apps.statistics', params); describe('get.blockchain.apps.statistics', () => { it('should return blockchain apps statistics', async () => { diff --git a/tests/integration/api_v3/rpc/blockchainAppsTokenMetadata.test.js b/tests/integration/api_v3/rpc/blockchainAppsTokenMetadata.test.js index b687461d9..d07dd09b7 100644 --- a/tests/integration/api_v3/rpc/blockchainAppsTokenMetadata.test.js +++ b/tests/integration/api_v3/rpc/blockchainAppsTokenMetadata.test.js @@ -14,11 +14,11 @@ * */ const config = require('../../../config'); -const { CHAIN_ID_PREFIX_NETWORK_MAP } = require('../../../../services/blockchain-app-registry/config'); - const { - request, -} = require('../../../helpers/socketIoRpcRequest'); + CHAIN_ID_PREFIX_NETWORK_MAP, +} = require('../../../../services/blockchain-app-registry/config'); + +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -29,10 +29,18 @@ const { const { blockchainAppsTokenMetadataSchema, } = require('../../../schemas/api_v3/blockchainAppsTokenMetadataSchema.schema'); -const { invalidNamesCSV, invalidTokenIDCSV, invalidOffsets, invalidLimits, invalidNames, invalidChainIDCSV } = require('../constants/invalidInputs'); +const { + invalidNamesCSV, + invalidTokenIDCSV, + invalidOffsets, + invalidLimits, + invalidNames, + invalidChainIDCSV, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getBlockchainAppsTokenMetadata = async (params) => request(wsRpcUrl, 'get.blockchain.apps.meta.tokens', params); +const getBlockchainAppsTokenMetadata = async params => + request(wsRpcUrl, 'get.blockchain.apps.meta.tokens', params); const getNetworkStatus = async params => request(wsRpcUrl, 'get.network.status', params); let curChainID; @@ -87,7 +95,11 @@ describe('get.blockchain.apps.meta.tokens', () => { }); it('should return blockchain applications off-chain metadata for tokens with limit=5, offset=1 and sort=chainName:desc', async () => { - const response = await getBlockchainAppsTokenMetadata({ limit: 5, offset: 1, sort: 'chainName:desc' }); + const response = await getBlockchainAppsTokenMetadata({ + limit: 5, + offset: 1, + sort: 'chainName:desc', + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); @@ -138,7 +150,9 @@ describe('get.blockchain.apps.meta.tokens', () => { }); it('should return blockchain application off-chain metadata for tokens by csv tokenID', async () => { - const response = await getBlockchainAppsTokenMetadata({ tokenID: `${defaultToken},0400000000000000` }); + const response = await getBlockchainAppsTokenMetadata({ + tokenID: `${defaultToken},0400000000000000`, + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); @@ -167,7 +181,10 @@ describe('get.blockchain.apps.meta.tokens', () => { }); it('should return blockchain application off-chain metadata for tokens by tokenName and chainID', async () => { - const response = await getBlockchainAppsTokenMetadata({ tokenName: 'Lisk', chainID: curChainID }); + const response = await getBlockchainAppsTokenMetadata({ + tokenName: 'Lisk', + chainID: curChainID, + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); @@ -180,7 +197,10 @@ describe('get.blockchain.apps.meta.tokens', () => { }); it('should return blockchain application off-chain metadata for tokens by tokenName and tokenID', async () => { - const response = await getBlockchainAppsTokenMetadata({ tokenName: 'Lisk', tokenID: defaultToken }); + const response = await getBlockchainAppsTokenMetadata({ + tokenName: 'Lisk', + tokenID: defaultToken, + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); @@ -193,7 +213,10 @@ describe('get.blockchain.apps.meta.tokens', () => { }); it('should return blockchain application off-chain metadata for tokens by chainID and csv tokenName', async () => { - const response = await getBlockchainAppsTokenMetadata({ chainID: curChainID, tokenName: 'Lik,Lisk' }); + const response = await getBlockchainAppsTokenMetadata({ + chainID: curChainID, + tokenName: 'Lik,Lisk', + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); @@ -303,7 +326,6 @@ describe('get.blockchain.apps.meta.tokens', () => { it('should return invalid params for an invalid chainID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsTokenMetadata({ chainID: invalidChainIDCSV[i] }); expect(response).toMap(invalidParamsSchema); } @@ -311,7 +333,6 @@ describe('get.blockchain.apps.meta.tokens', () => { it('should return invalid params for an invalid chainName param', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsTokenMetadata({ chainName: invalidNames[i] }); expect(response).toMap(invalidParamsSchema); } @@ -319,7 +340,6 @@ describe('get.blockchain.apps.meta.tokens', () => { it('should return invalid params for an invalid tokenName param', async () => { for (let i = 0; i < invalidNamesCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsTokenMetadata({ tokenName: invalidNamesCSV[i] }); expect(response).toMap(invalidParamsSchema); } @@ -327,7 +347,6 @@ describe('get.blockchain.apps.meta.tokens', () => { it('should return invalid params for an invalid tokenID param', async () => { for (let i = 0; i < invalidTokenIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsTokenMetadata({ tokenID: invalidTokenIDCSV[i] }); expect(response).toMap(invalidParamsSchema); } @@ -340,7 +359,6 @@ describe('get.blockchain.apps.meta.tokens', () => { it('should return invalid params for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsTokenMetadata({ limit: invalidLimits[i] }); expect(response).toMap(invalidParamsSchema); } @@ -348,7 +366,6 @@ describe('get.blockchain.apps.meta.tokens', () => { it('should return invalid params for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsTokenMetadata({ offset: invalidOffsets[i] }); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/blockchainAppsTokenSupportedMetadata.test.js b/tests/integration/api_v3/rpc/blockchainAppsTokenSupportedMetadata.test.js index 2d17c25e2..9112dac82 100644 --- a/tests/integration/api_v3/rpc/blockchainAppsTokenSupportedMetadata.test.js +++ b/tests/integration/api_v3/rpc/blockchainAppsTokenSupportedMetadata.test.js @@ -15,9 +15,7 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -31,7 +29,8 @@ const { const { invalidLimits, invalidChainIDCSV, invalidOffsets } = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getBlockchainAppsTokensSupportedMetadata = async (params) => request(wsRpcUrl, 'get.blockchain.apps.meta.tokens.supported', params); +const getBlockchainAppsTokensSupportedMetadata = async params => + request(wsRpcUrl, 'get.blockchain.apps.meta.tokens.supported', params); const getNetworkStatus = async params => request(wsRpcUrl, 'get.network.status', params); let curChainID; @@ -89,7 +88,10 @@ describe('get.blockchain.apps.meta.tokens.supported', () => { }); it('should return blockchain applications off-chain metadata for supported tokens by chainID and sort=tokenID:desc', async () => { - const response = await getBlockchainAppsTokensSupportedMetadata({ chainID: curChainID, sort: 'tokenID:desc' }); + const response = await getBlockchainAppsTokensSupportedMetadata({ + chainID: curChainID, + sort: 'tokenID:desc', + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); @@ -113,7 +115,6 @@ describe('get.blockchain.apps.meta.tokens.supported', () => { it('should return invalid params for an invalid chainID param', async () => { for (let i = 0; i < invalidChainIDCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsTokensSupportedMetadata({ chainID: invalidChainIDCSV[i], }); @@ -123,7 +124,6 @@ describe('get.blockchain.apps.meta.tokens.supported', () => { it('should return invalid params for an invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsTokensSupportedMetadata({ limit: invalidLimits[i] }); expect(response).toMap(invalidParamsSchema); } @@ -131,7 +131,6 @@ describe('get.blockchain.apps.meta.tokens.supported', () => { it('should return invalid params for an invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlockchainAppsTokensSupportedMetadata({ offset: invalidOffsets[i], }); diff --git a/tests/integration/api_v3/rpc/blocks.assets.test.js b/tests/integration/api_v3/rpc/blocks.assets.test.js index e4b77a46d..a3a89537e 100644 --- a/tests/integration/api_v3/rpc/blocks.assets.test.js +++ b/tests/integration/api_v3/rpc/blocks.assets.test.js @@ -15,12 +15,11 @@ */ import moment from 'moment'; import { invalidBlockIDs, invalidLimits, invalidOffsets } from '../constants/invalidInputs'; +import { waitMs } from '../../../helpers/utils'; const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -28,19 +27,46 @@ const { metaSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - blockAssetSchema, -} = require('../../../schemas/api_v3/block.schema'); +const { blockAssetSchema } = require('../../../schemas/api_v3/block.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; const getBlocksAssets = async params => request(wsRpcUrl, 'get.blocks.assets', params); +const invoke = async params => request(wsRpcUrl, 'post.invoke', params); describe('Method get.blocks.assets', () => { let refBlockAssets; let refAsset; + beforeAll(async () => { - [refBlockAssets] = (await getBlocksAssets({ height: '0' })).result.data; - [refAsset] = refBlockAssets.assets; + let retries = 10; + let success = false; + + while (retries > 0 && !success) { + try { + const invokeRes = await invoke({ endpoint: 'system_getNodeInfo' }); + const { genesisHeight } = invokeRes.result.data; + + [refBlockAssets = {}] = ( + await getBlocksAssets({ height: String(genesisHeight) }) + ).result.data; + + [refAsset] = refBlockAssets.assets; + + if (refAsset) { + success = true; + } + } catch (error) { + console.error(`Error fetching transactions. Retries left: ${retries}`); + retries--; + + // Delay by 3 sec + await waitMs(3000); + } + } + + if (!success) { + throw new Error('Failed to fetch block assets after 10 retries'); + } }); describe('is able to retireve block assets', () => { @@ -54,8 +80,9 @@ describe('Method get.blocks.assets', () => { result.data.forEach((blockAssets, i) => { expect(blockAssets).toMap(blockAssetSchema); if (i < result.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(result.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + result.data[i + 1].block.height + 1, + ); } }); expect(result.meta).toMap(metaSchema); @@ -71,8 +98,9 @@ describe('Method get.blocks.assets', () => { result.data.forEach((blockAssets, i) => { expect(blockAssets).toMap(blockAssetSchema); if (i < result.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(result.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + result.data[i + 1].block.height + 1, + ); } }); expect(result.meta).toMap(metaSchema); @@ -84,7 +112,7 @@ describe('Method get.blocks.assets', () => { const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toEqual(1); - result.data.forEach((blockAssets) => { + result.data.forEach(blockAssets => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.id).toEqual(refBlockAssets.block.id); }); @@ -97,7 +125,7 @@ describe('Method get.blocks.assets', () => { const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toEqual(1); - result.data.forEach((blockAssets) => { + result.data.forEach(blockAssets => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.height).toEqual(refBlockAssets.block.height); }); @@ -107,7 +135,7 @@ describe('Method get.blocks.assets', () => { const response = await getBlocksAssets({ module: refAsset.module }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; - result.data.forEach((blockAssets) => { + result.data.forEach(blockAssets => { expect(blockAssets).toMap(blockAssetSchema); blockAssets.assets.forEach(asset => expect(asset.module).toEqual(refAsset.module)); }); @@ -118,7 +146,7 @@ describe('Method get.blocks.assets', () => { const response = await getBlocksAssets({ module: modules.join(',') }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; - result.data.forEach((blockAssets) => { + result.data.forEach(blockAssets => { expect(blockAssets).toMap(blockAssetSchema); blockAssets.assets.forEach(asset => expect(modules).toContain(asset.module)); }); @@ -126,7 +154,6 @@ describe('Method get.blocks.assets', () => { it('should return invalid params if requested with invalid block ID', async () => { for (let i = 0; i < invalidBlockIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlocksAssets({ blockID: invalidBlockIDs[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } @@ -134,7 +161,6 @@ describe('Method get.blocks.assets', () => { it('should return invalid params if requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlocksAssets({ limit: invalidLimits[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } @@ -142,7 +168,6 @@ describe('Method get.blocks.assets', () => { it('should return invalid params if requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlocksAssets({ offset: invalidOffsets[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } @@ -161,7 +186,9 @@ describe('Method get.blocks.assets', () => { describe('is able to retireve block assets by timestamp', () => { it('should return blocks assets with from...to timestamp', async () => { - const from = moment(refBlockAssets.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refBlockAssets.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const to = refBlockAssets.block.timestamp; const response = await getBlocksAssets({ timestamp: `${from}:${to}`, limit: 100 }); expect(response).toMap(jsonRpcEnvelopeSchema); @@ -174,14 +201,17 @@ describe('Method get.blocks.assets', () => { expect(blockAssets.block.timestamp).toBeGreaterThanOrEqual(from); expect(blockAssets.block.timestamp).toBeLessThanOrEqual(to); if (i < result.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(result.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + result.data[i + 1].block.height + 1, + ); } }); }); it('should return blocks assets with from... timestamp', async () => { - const from = moment(refBlockAssets.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refBlockAssets.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const response = await getBlocksAssets({ timestamp: `${from}:`, limit: 100 }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; @@ -192,8 +222,9 @@ describe('Method get.blocks.assets', () => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.timestamp).toBeGreaterThanOrEqual(from); if (i < result.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(result.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + result.data[i + 1].block.height + 1, + ); } }); }); @@ -210,8 +241,9 @@ describe('Method get.blocks.assets', () => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.timestamp).toBeLessThanOrEqual(to); if (i < result.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(result.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + result.data[i + 1].block.height + 1, + ); } }); }); @@ -232,8 +264,9 @@ describe('Method get.blocks.assets', () => { expect(blockAssets.block.height).toBeGreaterThanOrEqual(minHeight); expect(blockAssets.block.height).toBeLessThanOrEqual(maxHeight); if (i < result.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(result.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + result.data[i + 1].block.height + 1, + ); } }); }); @@ -250,8 +283,9 @@ describe('Method get.blocks.assets', () => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.height).toBeGreaterThanOrEqual(minHeight); if (i < result.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(result.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + result.data[i + 1].block.height + 1, + ); } }); }); @@ -268,8 +302,9 @@ describe('Method get.blocks.assets', () => { expect(blockAssets).toMap(blockAssetSchema); expect(blockAssets.block.height).toBeLessThanOrEqual(maxHeight); if (i < result.data.length - 1) { - expect(blockAssets.block.height) - .toBeGreaterThanOrEqual(result.data[i + 1].block.height + 1); + expect(blockAssets.block.height).toBeGreaterThanOrEqual( + result.data[i + 1].block.height + 1, + ); } }); }); @@ -283,7 +318,7 @@ describe('Method get.blocks.assets', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach((blockAssets) => expect(blockAssets).toMap(blockAssetSchema)); + result.data.forEach(blockAssets => expect(blockAssets).toMap(blockAssetSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevBlockAsset = result.data[i - 1]; @@ -302,7 +337,7 @@ describe('Method get.blocks.assets', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach((blockAssets) => expect(blockAssets).toMap(blockAssetSchema)); + result.data.forEach(blockAssets => expect(blockAssets).toMap(blockAssetSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevBlockAsset = result.data[i - 1]; @@ -322,7 +357,7 @@ describe('Method get.blocks.assets', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach((blockAssets) => expect(blockAssets).toMap(blockAssetSchema)); + result.data.forEach(blockAssets => expect(blockAssets).toMap(blockAssetSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevBlockAsset = result.data[i - 1]; @@ -341,7 +376,7 @@ describe('Method get.blocks.assets', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach((blockAssets) => expect(blockAssets).toMap(blockAssetSchema)); + result.data.forEach(blockAssets => expect(blockAssets).toMap(blockAssetSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevBlockAsset = result.data[i - 1]; diff --git a/tests/integration/api_v3/rpc/blocks.test.js b/tests/integration/api_v3/rpc/blocks.test.js index 66246758a..0b1b681ab 100644 --- a/tests/integration/api_v3/rpc/blocks.test.js +++ b/tests/integration/api_v3/rpc/blocks.test.js @@ -14,15 +14,19 @@ * */ import moment from 'moment'; -import { invalidAddresses, invalidBlockIDs, invalidLimits, invalidOffsets } from '../constants/invalidInputs'; +import { + invalidAddresses, + invalidBlockIDs, + invalidLimits, + invalidOffsets, +} from '../constants/invalidInputs'; +import { waitMs } from '../../../helpers/utils'; const util = require('util'); const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -32,9 +36,7 @@ const { metaSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - blockSchema, -} = require('../../../schemas/api_v3/block.schema'); +const { blockSchema } = require('../../../schemas/api_v3/block.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; const getBlocks = async params => request(wsRpcUrl, 'get.blocks', params); @@ -42,7 +44,28 @@ const getBlocks = async params => request(wsRpcUrl, 'get.blocks', params); describe('Method get.blocks', () => { let refBlock; beforeAll(async () => { - [refBlock] = (await getBlocks({ limit: 1, offset: 5 })).result.data; + let retries = 10; + let success = false; + + while (retries > 0 && !success) { + try { + [refBlock] = (await getBlocks({ limit: 1, offset: 5 })).result.data; + + if (refBlock) { + success = true; + } + } catch (error) { + console.error(`Error fetching blocks. Retries left: ${retries}`); + retries--; + + // Delay by 3 sec + await waitMs(3000); + } + } + + if (!success) { + throw new Error('Failed to fetch blocks even after retrying.'); + } }); describe('is able to retireve block lists', () => { @@ -83,8 +106,8 @@ describe('Method get.blocks', () => { const [...topTenOffsetBlocks] = (await getBlocks({ offset: 1 })).result.data; [...Array(topTenBlocks.length)].forEach((_, i) => { - if (i) expect(util.isDeepStrictEqual(topTenBlocks[i], topTenOffsetBlocks[i - 1])) - .toBeTruthy(); + if (i) + expect(util.isDeepStrictEqual(topTenBlocks[i], topTenOffsetBlocks[i - 1])).toBeTruthy(); }); }); @@ -93,8 +116,8 @@ describe('Method get.blocks', () => { const [...topTenOffsetBlocks] = (await getBlocks({ offset: 1, limit: 12 })).result.data; [...Array(topTenBlocks.length)].forEach((_, i) => { - if (i) expect(util.isDeepStrictEqual(topTenBlocks[i], topTenOffsetBlocks[i - 1])) - .toBeTruthy(); + if (i) + expect(util.isDeepStrictEqual(topTenBlocks[i], topTenOffsetBlocks[i - 1])).toBeTruthy(); }); }); }); @@ -106,15 +129,19 @@ describe('Method get.blocks', () => { const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toEqual(1); - result.data.forEach((block) => { + result.data.forEach(block => { expect(block).toMap(blockSchema, { id: refBlock.id }); }); expect(result.meta).toMap(metaSchema); }); it('should return invalid params if requested with invalid blockID', async () => { - expect(await getBlocks({ blockID: 'fkfkfkkkffkfkfk1010101010101010101' }).catch(e => e)).toMap(invalidParamsSchema); - expect(await getBlocks({ blockID: '12602944501676077162' }).catch(e => e)).toMap(invalidParamsSchema); + expect( + await getBlocks({ blockID: 'fkfkfkkkffkfkfk1010101010101010101' }).catch(e => e), + ).toMap(invalidParamsSchema); + expect(await getBlocks({ blockID: '12602944501676077162' }).catch(e => e)).toMap( + invalidParamsSchema, + ); }); it('shoudd return invalid query parameter for invalid param', async () => { @@ -124,7 +151,6 @@ describe('Method get.blocks', () => { it('should return bad request when requested with invalid Addresse', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlocks({ generatorAddress: invalidAddresses[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } @@ -132,7 +158,6 @@ describe('Method get.blocks', () => { it('should return bad request when requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlocks({ limit: invalidLimits[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } @@ -140,7 +165,6 @@ describe('Method get.blocks', () => { it('should return bad request when requested with offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlocks({ offset: invalidOffsets[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } @@ -148,7 +172,6 @@ describe('Method get.blocks', () => { it('should return bad request when requested with invalid block ID', async () => { for (let i = 0; i < invalidBlockIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getBlocks({ blockID: invalidBlockIDs[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } @@ -162,7 +185,7 @@ describe('Method get.blocks', () => { const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toEqual(1); - result.data.forEach((block) => { + result.data.forEach(block => { expect(block).toMap(blockSchema, { height: refBlock.height }); }); }); @@ -193,7 +216,9 @@ describe('Method get.blocks', () => { describe('is able to retireve block lists by timestamp', () => { it('should return blocks with from...to timestamp', async () => { - const from = moment(refBlock.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refBlock.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const to = refBlock.timestamp; const response = await getBlocks({ timestamp: `${from}:${to}` }); expect(response).toMap(jsonRpcEnvelopeSchema); @@ -212,7 +237,9 @@ describe('Method get.blocks', () => { }); it('should return blocks with from... timestamp', async () => { - const from = moment(refBlock.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refBlock.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const response = await getBlocks({ timestamp: `${from}:` }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; @@ -309,7 +336,7 @@ describe('Method get.blocks', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach((blockItem) => expect(blockItem).toMap(blockSchema)); + result.data.forEach(blockItem => expect(blockItem).toMap(blockSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevBlock = result.data[i - 1]; @@ -328,7 +355,7 @@ describe('Method get.blocks', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach((blockItem) => expect(blockItem).toMap(blockSchema)); + result.data.forEach(blockItem => expect(blockItem).toMap(blockSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevBlock = result.data[i - 1]; @@ -348,7 +375,7 @@ describe('Method get.blocks', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach((blockItem) => expect(blockItem).toMap(blockSchema)); + result.data.forEach(blockItem => expect(blockItem).toMap(blockSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevBlock = result.data[i - 1]; @@ -367,7 +394,7 @@ describe('Method get.blocks', () => { expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); - result.data.forEach((blockItem) => expect(blockItem).toMap(blockSchema)); + result.data.forEach(blockItem => expect(blockItem).toMap(blockSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevBlock = result.data[i - 1]; @@ -381,13 +408,18 @@ describe('Method get.blocks', () => { describe('Fetch blocks based on multiple request params', () => { it('should return blocks by generatorAddress sorted by timestamp descending, limit & offset', async () => { - const response = await getBlocks({ generatorAddress: refBlock.generatorAddress, sort: 'timestamp:desc', limit: 100, offset: 0 }); + const response = await getBlocks({ + generatorAddress: refBlock.generatorAddress, + sort: 'timestamp:desc', + limit: 100, + offset: 0, + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(100); - result.data.forEach((blockItem) => { + result.data.forEach(blockItem => { expect(blockItem).toMap(blockSchema); expect(blockItem.generatorAddress).toEqual(refBlock.generatorAddress); }); @@ -402,13 +434,18 @@ describe('Method get.blocks', () => { }); it('should return blocks by generatorAddress sorted by height ascending, limit & offset', async () => { - const response = await getBlocks({ generatorAddress: refBlock.generator.address, sort: 'height:asc', limit: 5, offset: 0 }); + const response = await getBlocks({ + generatorAddress: refBlock.generator.address, + sort: 'height:asc', + limit: 5, + offset: 0, + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(5); - result.data.forEach((blockItem) => { + result.data.forEach(blockItem => { expect(blockItem).toMap(blockSchema); expect(blockItem.generatorAddress).toEqual(refBlock.generatorAddress); }); @@ -431,7 +468,11 @@ describe('Method get.blocks', () => { }); it('should return empty response when queried with blockID and wrong timestamp', async () => { - const timestamp = String(moment(refBlock.timestamp * (10 ** 3)).subtract(1, 'day').unix()); + const timestamp = String( + moment(refBlock.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(), + ); const response = await getBlocks({ blockID: refBlock.id, timestamp }).catch(e => e); expect(response).toMap(emptyResponseSchema); const { result } = response; @@ -456,8 +497,9 @@ describe('Method get.blocks', () => { }); it('should return empty response when queried with block timestamp and non-zero offset', async () => { - const response = await getBlocks({ timestamp: String(refBlock.timestamp), offset: 1 }) - .catch(e => e); + const response = await getBlocks({ timestamp: String(refBlock.timestamp), offset: 1 }).catch( + e => e, + ); expect(response).toMap(emptyResponseSchema); const { result } = response; expect(result).toMap(emptyResultEnvelopeSchema); diff --git a/tests/integration/api_v3/rpc/events.test.js b/tests/integration/api_v3/rpc/events.test.js index f6e85d525..730501a72 100644 --- a/tests/integration/api_v3/rpc/events.test.js +++ b/tests/integration/api_v3/rpc/events.test.js @@ -14,7 +14,12 @@ * */ import moment from 'moment'; -import { invalidAddresses, invalidBlockIDs, invalidLimits, invalidOffsets } from '../constants/invalidInputs'; +import { + invalidAddresses, + invalidBlockIDs, + invalidLimits, + invalidOffsets, +} from '../constants/invalidInputs'; const config = require('../../../config'); const { request } = require('../../../helpers/socketIoRpcRequest'); @@ -25,11 +30,10 @@ const { invalidParamsSchema, metaSchema, serverErrorSchema, + invalidRequestSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - eventSchema, -} = require('../../../schemas/api_v3/event.schema'); +const { eventSchema } = require('../../../schemas/api_v3/event.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; const getEvents = async params => request(wsRpcUrl, 'get.events', params); @@ -89,19 +93,17 @@ describe('Method get.events', () => { expect(result.meta).toMap(metaSchema); }); - it('should return bad request for invalid limit', async () => { + it('should return invalid params for invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getEvents({ limit: invalidLimits[i] }); - expect(response).toMap(serverErrorSchema); + expect(response).toMap(invalidParamsSchema); } }); - it('should return bad request for invalid offset', async () => { + it('should return invalid params for invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getEvents({ offset: invalidOffsets[i] }); - expect(response).toMap(serverErrorSchema); + expect(response).toMap(invalidParamsSchema); } }); }); @@ -148,16 +150,15 @@ describe('Method get.events', () => { expect(result.meta).toMap(metaSchema); }); - it('should return server error for empty blockID', async () => { + it('should return invalid request for empty blockID', async () => { const response = await getEvents({ blockID: '' }); - expect(response).toMap(serverErrorSchema); + expect(response).toMap(invalidRequestSchema); }); - it('should return bad request for invalid block ID', async () => { + it('should return invalid params for invalid block ID', async () => { for (let i = 0; i < invalidBlockIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getEvents({ blockID: invalidBlockIDs[i] }); - expect(response).toMap(serverErrorSchema); + expect(response).toMap(invalidParamsSchema); } }); }); @@ -192,15 +193,16 @@ describe('Method get.events', () => { }); it('should return invalid param for invalid senderAddress', async () => { - const response = await getEvents({ senderAddress: 'lsydxc4ta5j43jp9ro3f8zqbxta9fn6jwzjucw7yj' }); + const response = await getEvents({ + senderAddress: 'lsydxc4ta5j43jp9ro3f8zqbxta9fn6jwzjucw7yj', + }); expect(response).toMap(invalidParamsSchema); }); - it('should return bad request for invalid senderAddress', async () => { + it('should return invalid params for invalid senderAddress', async () => { for (let i = 0; i < invalidBlockIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getEvents({ senderAddress: invalidAddresses[i] }); - expect(response).toMap(serverErrorSchema); + expect(response).toMap(invalidParamsSchema); } }); }); @@ -318,7 +320,9 @@ describe('Method get.events', () => { describe('is able to retrieve events using timestamps', () => { it('should return from to', async () => { - const from = moment(refTransaction.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refTransaction.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const toTimestamp = refTransaction.block.timestamp; const response = await getEvents({ timestamp: `${from}:${toTimestamp}` }); @@ -346,7 +350,9 @@ describe('Method get.events', () => { }); it('should return half bounded range from', async () => { - const from = moment(refTransaction.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refTransaction.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const response = await getEvents({ timestamp: `${from}:` }); expect(response).toMap(jsonRpcEnvelopeSchema); @@ -529,7 +535,7 @@ describe('Method get.events', () => { expect(result.meta).toMap(metaSchema); }); - it('should return empty topic', async () => { + it('should return invalid params for empty topic', async () => { const response = await getEvents({ topic: '' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; diff --git a/tests/integration/api_v3/rpc/export.test.js b/tests/integration/api_v3/rpc/export.test.js index 8d3e0c2f2..74925ea3d 100644 --- a/tests/integration/api_v3/rpc/export.test.js +++ b/tests/integration/api_v3/rpc/export.test.js @@ -17,9 +17,7 @@ const moment = require('moment'); const config = require('../../../config'); const exportConfig = require('../../../../services/export/config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { jsonRpcEnvelopeSchema, invalidParamsSchema, @@ -35,68 +33,37 @@ const { const { waitForSuccess } = require('../../../helpers/utils'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const requestTransactionExport = async (params) => request(wsRpcUrl, 'get.export.transactions', params); -const requestTransactions = async (params) => request(wsRpcUrl, 'get.transactions', params); - -// TODO: Enable tests once test blockchain is updated with transactions -xdescribe('Export API', () => { - const startDate = moment('2021-01-10').format(exportConfig.csv.dateFormat); - const endDate = moment('2021-11-30').format(exportConfig.csv.dateFormat); - let refTransaction1; - let refTransaction2; - let refTransaction3; - let refTransaction4; - beforeAll(async () => { - const response = await requestTransactions({ limit: 4 }); - [refTransaction1, refTransaction2, refTransaction3, refTransaction4] = response.result.data; - }); +const requestTransactionExport = async params => + request(wsRpcUrl, 'get.export.transactions', params); + +describe('Export API', () => { + const startDate = moment('2023-01-10').format(exportConfig.excel.dateFormat); + const endDate = moment('2023-12-30').format(exportConfig.excel.dateFormat); + + const mockAddress = 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad'; + const mockPublicKey = '44e2b746594f74272d15b6f7d18dffbf83c749bbf1babc5f1d314bdbd08f8215'; describe('Schedule file export', () => { - it('Schedule file export from account address with interval', async () => { + it('should schedule file export from account address with interval', async () => { const expected = { ready: false }; const response = await requestTransactionExport({ - address: refTransaction1.sender.address, + address: mockAddress, interval: `${startDate}:${endDate}`, }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; - expect(result).toMap(goodRequestSchemaForExport); - expect(result.data).toMap(exportSchemaAccepted); - expect(result.meta).toMap(metaSchemaForExport); - expect(result.meta).toEqual(expect.objectContaining(expected)); - }); - it('Schedule file export from account publicKey with interval', async () => { - const expected = { ready: false }; - const response = await requestTransactionExport({ - publicKey: refTransaction2.sender.publicKey, - interval: `${startDate}:${endDate}`, - }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; expect(result).toMap(goodRequestSchemaForExport); expect(result.data).toMap(exportSchemaAccepted); expect(result.meta).toMap(metaSchemaForExport); expect(result.meta).toEqual(expect.objectContaining(expected)); }); - it('Schedule file export from account address', async () => { + it('should schedule file export from account publicKey with interval', async () => { const expected = { ready: false }; const response = await requestTransactionExport({ - address: refTransaction3.sender.address, - }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(goodRequestSchemaForExport); - expect(result.data).toMap(exportSchemaAccepted); - expect(result.meta).toMap(metaSchemaForExport); - expect(result.meta).toEqual(expect.objectContaining(expected)); - }); - - it('Schedule file export from account publicKey', async () => { - const expected = { ready: false }; - const response = await requestTransactionExport({ - publicKey: refTransaction4.sender.publicKey, + publicKey: mockPublicKey, + interval: `${startDate}:${endDate}`, }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; @@ -108,13 +75,14 @@ xdescribe('Export API', () => { }); describe('File is ready to export', () => { - const successValidator = (response) => response.result.meta.ready; - - it('scheduled from account address', async () => { - const scheduleExport = async () => requestTransactionExport({ - address: refTransaction1.sender.address, - interval: `${startDate}:${endDate}`, - }); + const successValidator = response => response.result.meta.ready; + + it('should schedule from account address and confirm it is ready', async () => { + const scheduleExport = async () => + requestTransactionExport({ + address: mockAddress, + interval: `${startDate}:${endDate}`, + }); const response = await waitForSuccess(scheduleExport, successValidator); const expected = { ready: true }; expect(response).toMap(jsonRpcEnvelopeSchema); @@ -123,13 +91,14 @@ xdescribe('Export API', () => { expect(result.data).toMap(exportSchema); expect(result.meta).toMap(metaSchemaForExport); expect(result.meta).toEqual(expect.objectContaining(expected)); - }); - - it('scheduled from account publicKey', async () => { - const scheduleExport = async () => requestTransactionExport({ - publicKey: refTransaction2.sender.publicKey, - interval: `${startDate}:${endDate}`, - }); + }, 2147483647); + + it('should schedule from account publicKey and confirm it is ready', async () => { + const scheduleExport = async () => + requestTransactionExport({ + publicKey: mockPublicKey, + interval: `${startDate}:${endDate}`, + }); const response = await waitForSuccess(scheduleExport, successValidator); const expected = { ready: true }; expect(response).toMap(jsonRpcEnvelopeSchema); @@ -138,16 +107,16 @@ xdescribe('Export API', () => { expect(result.data).toMap(exportSchema); expect(result.meta).toMap(metaSchemaForExport); expect(result.meta).toEqual(expect.objectContaining(expected)); - }); + }, 2147483647); }); describe('Invalid params/request', () => { - it('return INVALID_REQUEST when no address', async () => { + it('should return INVALID_REQUEST when no address', async () => { const response = await requestTransactionExport(); expect(response).toMap(invalidRequestSchema); }); - it('return INVALID_PARAMS when invalid address', async () => { + it('should return INVALID_PARAMS when invalid address', async () => { const response = await requestTransactionExport({ address: 'lsknww5x4dv93x3euds4w72d99ouwnqojyw5qrm', interval: `${startDate}:${endDate}`, @@ -155,7 +124,7 @@ xdescribe('Export API', () => { expect(response).toMap(invalidParamsSchema); }); - it('return INVALID_PARAMS when invalid publicKey', async () => { + it('should return INVALID_PARAMS when invalid publicKey', async () => { const response = await requestTransactionExport({ publicKey: 'd517f9d9ac10a61b57d1959b88f8b5c6e8824d27a5349ec7ece44c4a027c4', interval: `${startDate}:${endDate}`, @@ -163,25 +132,25 @@ xdescribe('Export API', () => { expect(response).toMap(invalidParamsSchema); }); - it('return INVALID_PARAMS when address with invalid interval', async () => { + it('should return INVALID_PARAMS when address with invalid interval', async () => { const invalidInterval = '20-10-2021:20-11-2021'; const response = await requestTransactionExport({ - address: refTransaction1.sender.address, + address: mockAddress, interval: invalidInterval, }); expect(response).toMap(invalidParamsSchema); }); - it('return INVALID_PARAMS when publicKey with invalid interval', async () => { + it('should return INVALID_PARAMS when publicKey with invalid interval', async () => { const invalidInterval = '20-10-2021:20-11-2021'; const response = await requestTransactionExport({ - publicKey: refTransaction2.sender.publicKey, + publicKey: mockPublicKey, interval: invalidInterval, }); expect(response).toMap(invalidParamsSchema); }); - it('return INVALID_PARAMS when invalid address with interval', async () => { + it('should return INVALID_PARAMS when invalid address with interval', async () => { const response = await requestTransactionExport({ address: 'lsknww5x4dv93x3euds4w72d99ouwnqojyw5qrm', interval: `${startDate}:${endDate}`, @@ -189,7 +158,7 @@ xdescribe('Export API', () => { expect(response).toMap(invalidParamsSchema); }); - it('return INVALID_PARAMS when invalid publicKey with interval', async () => { + it('should return INVALID_PARAMS when invalid publicKey with interval', async () => { const response = await requestTransactionExport({ publicKey: 'd517f9d9ac10a61b57d1959b88f8b5c6e8824d27a5349ec7ece44c4a027c4', interval: `${startDate}:${endDate}`, diff --git a/tests/integration/api_v3/rpc/generators.test.js b/tests/integration/api_v3/rpc/generators.test.js index 549451a16..6182ad51f 100644 --- a/tests/integration/api_v3/rpc/generators.test.js +++ b/tests/integration/api_v3/rpc/generators.test.js @@ -21,10 +21,12 @@ const { invalidParamsSchema, } = require('../../../schemas/rpcGenerics.schema'); +const { generatorResponseSchema } = require('../../../schemas/api_v3/generator.schema'); const { - generatorResponseSchema, -} = require('../../../schemas/api_v3/generator.schema'); -const { invalidPartialSearches, invalidOffsets, invalidLimits } = require('../constants/invalidInputs'); + invalidPartialSearches, + invalidOffsets, + invalidLimits, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; const getGenerators = async params => request(wsRpcUrl, 'get.generators', params); @@ -38,17 +40,24 @@ const STATUS = { describe('Generators API', () => { let numberActiveValidators; let numberStandbyValidators; + let selectedGenerator; + beforeAll(async () => { const response = await getPoSConstants(); const constants = response.result.data; numberActiveValidators = constants.numberActiveValidators; numberStandbyValidators = constants.numberStandbyValidators; - }); - let firstGenerator; - beforeAll(async () => { const { result } = await getGenerators(); - [firstGenerator] = result.data; + [selectedGenerator] = result.data; + + // eslint-disable-next-line no-restricted-syntax + for (const generator of result.data) { + if (![null, undefined].includes(generator.publicKey)) { + selectedGenerator = generator; + break; + } + } }); describe('GET /generators', () => { @@ -69,12 +78,14 @@ describe('Generators API', () => { expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(103); - const activeGenerators = result.data - .filter(generator => generator.status === STATUS.ACTIVE); - const standbyGenerators = result.data - .filter(generator => generator.status === STATUS.STANDBY); - expect(activeGenerators.length).toEqual(numberActiveValidators); - expect(standbyGenerators.length).toEqual(numberStandbyValidators); + const activeGenerators = result.data.filter(generator => generator.status === STATUS.ACTIVE); + const standbyGenerators = result.data.filter( + generator => generator.status === STATUS.STANDBY, + ); + expect(activeGenerators.length).toBeGreaterThanOrEqual(1); + expect(activeGenerators.length).toBeLessThanOrEqual(numberActiveValidators); + expect(standbyGenerators.length).toBeGreaterThanOrEqual(0); + expect(standbyGenerators.length).toBeLessThanOrEqual(numberStandbyValidators); }); it('should return generators list when called with limit=100', async () => { @@ -105,15 +116,15 @@ describe('Generators API', () => { }); it('should return generators list when searching with generator name', async () => { - const response = await getGenerators({ search: firstGenerator.name }); + const response = await getGenerators({ search: selectedGenerator.name }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result).toMap(generatorResponseSchema); - expect(result.data.length).toBe(1); + expect(result.data.length).toBeGreaterThanOrEqual(1); }); it('should return generators list when searching with generator address', async () => { - const response = await getGenerators({ search: firstGenerator.address }); + const response = await getGenerators({ search: selectedGenerator.address }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result).toMap(generatorResponseSchema); @@ -121,15 +132,17 @@ describe('Generators API', () => { }); it('should return generators list when searching with generator publicKey', async () => { - const response = await getGenerators({ search: firstGenerator.publicKey }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(generatorResponseSchema); - expect(result.data.length).toBe(1); + if (selectedGenerator.publicKey) { + const response = await getGenerators({ search: selectedGenerator.publicKey }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(generatorResponseSchema); + expect(result.data.length).toBe(1); + } }); it('should return generators list when searching partially with generator name', async () => { - const response = await getGenerators({ search: firstGenerator.name.substring(0, 3) }); + const response = await getGenerators({ search: selectedGenerator.name.substring(0, 3) }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result).toMap(generatorResponseSchema); @@ -138,7 +151,7 @@ describe('Generators API', () => { }); it('should return generators list when searching partially with generator address', async () => { - const response = await getGenerators({ search: firstGenerator.address.substring(0, 3) }); + const response = await getGenerators({ search: selectedGenerator.address.substring(0, 3) }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result).toMap(generatorResponseSchema); @@ -147,17 +160,20 @@ describe('Generators API', () => { }); it('should return generators list when searching partially with generator publicKey', async () => { - const response = await getGenerators({ search: firstGenerator.publicKey.substring(0, 3) }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(generatorResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(1); - expect(result.data.length).toBeLessThanOrEqual(103); + if (selectedGenerator.publicKey) { + const response = await getGenerators({ + search: selectedGenerator.publicKey.substring(0, 3), + }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(generatorResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeLessThanOrEqual(103); + } }); it('should return invalid params when called with invalid search param', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getGenerators({ search: invalidPartialSearches[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } @@ -165,7 +181,6 @@ describe('Generators API', () => { it('should return invalid params when called with invalid limit param', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getGenerators({ limit: invalidLimits[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } @@ -173,7 +188,6 @@ describe('Generators API', () => { it('should return invalid params when called with invalid offset param', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getGenerators({ offset: invalidOffsets[i] }).catch(e => e); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/indexStatus.test.js b/tests/integration/api_v3/rpc/indexStatus.test.js index a95ec2e48..a687b527d 100644 --- a/tests/integration/api_v3/rpc/indexStatus.test.js +++ b/tests/integration/api_v3/rpc/indexStatus.test.js @@ -15,21 +15,17 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, jsonRpcEnvelopeSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - goodResponseSchema, -} = require('../../../schemas/api_v3/indexStatus.schema'); +const { goodResponseSchema } = require('../../../schemas/api_v3/indexStatus.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getIndexStatus = async (params) => request(wsRpcUrl, 'get.index.status', params); +const getIndexStatus = async params => request(wsRpcUrl, 'get.index.status', params); describe('get.index.status', () => { it('should return index status', async () => { diff --git a/tests/integration/api_v3/rpc/invoke.test.js b/tests/integration/api_v3/rpc/invoke.test.js index 49860b008..974e09b94 100644 --- a/tests/integration/api_v3/rpc/invoke.test.js +++ b/tests/integration/api_v3/rpc/invoke.test.js @@ -22,13 +22,11 @@ const { invalidRequestSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - invokeResponseSchema, -} = require('../../../schemas/api_v3/invoke.schema'); +const { invokeResponseSchema } = require('../../../schemas/api_v3/invoke.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const invoke = async (params) => request(wsRpcUrl, 'post.invoke', params); -const getBlocks = async (params) => request(wsRpcUrl, 'get.blocks', params); +const invoke = async params => request(wsRpcUrl, 'post.invoke', params); +const getBlocks = async params => request(wsRpcUrl, 'get.blocks', params); describe('post.invoke', () => { it('should return response when valid SDK endpoint invoked', async () => { @@ -51,7 +49,10 @@ describe('post.invoke', () => { }); it('should return invalid request when requested with valid SDK endpoint invoked with invalid params', async () => { - const response = await invoke({ endpoint: 'chain_getBlockByHeight', params: { height: 'abc' } }); + const response = await invoke({ + endpoint: 'chain_getBlockByHeight', + params: { height: 'abc' }, + }); expect(response).toMap(invalidRequestSchema); }); diff --git a/tests/integration/api_v3/rpc/legacyAccounts.test.js b/tests/integration/api_v3/rpc/legacyAccounts.test.js index fb7b3f151..c2242db25 100644 --- a/tests/integration/api_v3/rpc/legacyAccounts.test.js +++ b/tests/integration/api_v3/rpc/legacyAccounts.test.js @@ -15,9 +15,7 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -30,11 +28,13 @@ const { } = require('../../../schemas/api_v3/legacyAccountsSchema.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getLegacyAccountInfo = async (params) => request(wsRpcUrl, 'get.legacy', params); +const getLegacyAccountInfo = async params => request(wsRpcUrl, 'get.legacy', params); describe('get.legacy', () => { it('should return legacy account info', async () => { - const response = await getLegacyAccountInfo({ publicKey: '1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcc' }); + const response = await getLegacyAccountInfo({ + publicKey: '1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcc', + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toMap(legacyAccountsSchema); @@ -42,17 +42,23 @@ describe('get.legacy', () => { }); it('should return bad request if requested with public key less than 64 chars', async () => { - const response = await getLegacyAccountInfo({ publicKey: '1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bc' }); + const response = await getLegacyAccountInfo({ + publicKey: '1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bc', + }); expect(response).toMap(invalidParamsSchema); }); it('should return bad request if requested with public key more than 64 chars', async () => { - const response = await getLegacyAccountInfo({ publicKey: '1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcca' }); + const response = await getLegacyAccountInfo({ + publicKey: '1ec4a852f5cd5a86877243aca6f3585e5582fd22e8dc8b9d9232241b182c6bcca', + }); expect(response).toMap(invalidParamsSchema); }); it('should return bad request if requested with invalid public key of 64 characters', async () => { - const response = await getLegacyAccountInfo({ publicKey: '!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$' }); + const response = await getLegacyAccountInfo({ + publicKey: '!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$%^&*()!@#$', + }); expect(response).toMap(invalidParamsSchema); }); diff --git a/tests/integration/api_v3/rpc/networkPeers.test.js b/tests/integration/api_v3/rpc/networkPeers.test.js index 20ddc6b70..e1442518c 100644 --- a/tests/integration/api_v3/rpc/networkPeers.test.js +++ b/tests/integration/api_v3/rpc/networkPeers.test.js @@ -31,215 +31,219 @@ const { const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; const requestPeers = async params => request(wsRpcUrl, 'get.network.peers', params); +const invoke = async params => request(wsRpcUrl, 'post.invoke', params); -xdescribe('Peers API', () => { +describe('Network peers API', () => { describe('get.peers', () => { - it('without request params -> ok', async () => { + it('should return peers without request params', async () => { const response = await requestPeers({}); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('empty ip -> ok', async () => { + it('should return peers with empty IP', async () => { const response = await requestPeers({ ip: '' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('invalid ip -> bad request', async () => { + it('should return a bad request for invalid IP', async () => { const response = await requestPeers({ ip: '0' }); expect(response).toMap(invalidParamsSchema); }); - it('valid networkVersion -> ok', async () => { - const response = await requestPeers({ networkVersion: '2.0' }); + it('should return peers with valid networkVersion', async () => { + const invokeRes = await invoke({ endpoint: 'system_getNodeInfo' }); + const { networkVersion } = invokeRes.result.data; + + const response = await requestPeers({ networkVersion }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('empty networkVersion -> ok', async () => { + it('should return peers with empty networkVersion', async () => { const response = await requestPeers({ networkVersion: '' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('non-existent networkVersion -> empty response', async () => { + it('should return an empty response for non-existent networkVersion', async () => { const error = await requestPeers({ networkVersion: '9.99.0' }); expect(error).toMap(emptyResponseSchema); }); - it('invalid networkVersion -> invalid param', async () => { + it('should return a bad request for an invalid networkVersion', async () => { const error = await requestPeers({ networkVersion: 'v3.0' }); expect(error).toMap(invalidParamsSchema); }); - it('\'connected\' state -> ok', async () => { + it('should return peers in the "connected" state', async () => { const response = await requestPeers({ state: 'connected' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('\'disconnected\' state -> ok', async () => { + it('should return peers in the "disconnected" state', async () => { const response = await requestPeers({ state: 'disconnected' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('\'any\' state -> ok', async () => { + it('should return peers in the "any" state', async () => { const response = await requestPeers({ state: 'any' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('empty state -> ok', async () => { + it('should return peers with empty state', async () => { const response = await requestPeers({ state: '' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('invalid state 1 -> invalid param', async () => { + it('should return a bad request for an invalid state 1', async () => { const error = await requestPeers({ state: 'invalid' }); expect(error).toMap(invalidParamsSchema); }); - it('invalid state 2 -> invalid param', async () => { + it('should return a bad request for an invalid state 2', async () => { const error = await requestPeers({ state: 1 }); expect(error).toMap(invalidParamsSchema); }); - it('empty height -> ok', async () => { + it('should return peers with empty height', async () => { const response = await requestPeers({ height: '' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('non-existent height -> empty response', async () => { - const error = await requestPeers({ height: 1000000000 }); + it('should return an empty response for a non-existent height', async () => { + const error = await requestPeers({ height: Number.MAX_SAFE_INTEGER }); expect(error).toMap(emptyResponseSchema); }); - it('invalid height -> bad request', async () => { + it('should return a bad request for an invalid height', async () => { const error = await requestPeers({ height: -10 }); expect(error).toMap(invalidParamsSchema); }); - it('limit=100 -> ok', async () => { + it('should return up to 100 peers with limit=100', async () => { const response = await requestPeers({ limit: 100 }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(100); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('empty limit -> ok', async () => { + it('should return peers with empty limit', async () => { const response = await requestPeers({ limit: '' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('empty offset -> ok', async () => { + it('should return peers with empty offset', async () => { const response = await requestPeers({ offset: '' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('too big offset -> empty response', async () => { + it('should return an empty response for a too big offset', async () => { const response = await requestPeers({ offset: 1000000 }); expect(response).toMap(emptyResponseSchema); }); - it('empty sort -> ok', async () => { + it('should return peers with empty sort', async () => { const response = await requestPeers({ sort: '' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); expect(result.meta).toMap(metaSchema); }); - it('wrong sort -> invalid param', async () => { + it('should return a bad request for a wrong sort', async () => { const response = await requestPeers({ sort: 'height:ascc' }); expect(response).toMap(invalidParamsSchema); }); - it('invalid request param -> invalid param', async () => { + it('should return a bad request for an invalid request param', async () => { const response = await requestPeers({ invalidParam: 'invalid' }); expect(response).toMap(invalidParamsSchema); }); - it('wrong url -> invalid request', async () => { + it('should return an invalid request for a wrong URL', async () => { const response = await request(wsRpcUrl, 'get.peers.connected', {}); expect(response).toMap(wrongMethodSchema); }); }); describe('Peers sorted by height', () => { - it('returns 10 peers sorted by height descending', async () => { + it('should return 10 peers sorted by height descending', async () => { const response = await requestPeers({ sort: 'height:desc' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); if (result.data.length > 1) { @@ -252,12 +256,12 @@ xdescribe('Peers API', () => { expect(result.meta).toMap(metaSchema); }); - it('returns 10 peers sorted by height ascending', async () => { + it('should return 10 peers sorted by height ascending', async () => { const response = await requestPeers({ sort: 'height:asc' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); if (result.data.length > 1) { @@ -272,43 +276,47 @@ xdescribe('Peers API', () => { }); describe('Peers sorted by networkVersion', () => { - it('returns 10 peers sorted by networkVersion descending', async () => { + it('should return 10 peers sorted by networkVersion descending', async () => { const response = await requestPeers({ sort: 'networkVersion:desc' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevPeer = result.data[i - 1]; const currPeer = result.data[i]; - expect(semver.gte( - semver.coerce(prevPeer.networkVersion), - semver.coerce(currPeer.networkVersion), - )).toBeTruthy(); + expect( + semver.gte( + semver.coerce(prevPeer.networkVersion), + semver.coerce(currPeer.networkVersion), + ), + ).toBeTruthy(); } } expect(result.meta).toMap(metaSchema); }); - it('returns 10 peers sorted by networkVersion ascending', async () => { - const response = await requestPeers({ sort: 'networkVersion:desc' }); + it('should return 10 peers sorted by networkVersion ascending', async () => { + const response = await requestPeers({ sort: 'networkVersion:asc' }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); - expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeGreaterThanOrEqual(0); expect(result.data.length).toBeLessThanOrEqual(10); result.data.forEach(peer => expect(peer).toMap(networkPeerSchema)); if (result.data.length > 1) { for (let i = 1; i < result.data.length; i++) { const prevPeer = result.data[i - 1]; const currPeer = result.data[i]; - expect(semver.lte( - semver.coerce(prevPeer.networkVersion), - semver.coerce(currPeer.networkVersion), - )).toBeTruthy(); + expect( + semver.lte( + semver.coerce(prevPeer.networkVersion), + semver.coerce(currPeer.networkVersion), + ), + ).toBeTruthy(); } } expect(result.meta).toMap(metaSchema); diff --git a/tests/integration/api_v3/rpc/networkStatistics.test.js b/tests/integration/api_v3/rpc/networkStatistics.test.js index ea8649fab..631eb8c10 100644 --- a/tests/integration/api_v3/rpc/networkStatistics.test.js +++ b/tests/integration/api_v3/rpc/networkStatistics.test.js @@ -15,25 +15,19 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, jsonRpcEnvelopeSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - goodRequestSchema, -} = require('../../../schemas/httpGenerics.schema'); +const { goodRequestSchema } = require('../../../schemas/httpGenerics.schema'); -const { - networkStatisticsSchema, -} = require('../../../schemas/api_v3/networkStatistics.schema'); +const { networkStatisticsSchema } = require('../../../schemas/api_v3/networkStatistics.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getNetworkStatistics = async (params) => request(wsRpcUrl, 'get.network.statistics', params); +const getNetworkStatistics = async params => request(wsRpcUrl, 'get.network.statistics', params); describe('get.network.statistics', () => { it('should return network statistics', async () => { diff --git a/tests/integration/api_v3/rpc/networkStatus.test.js b/tests/integration/api_v3/rpc/networkStatus.test.js index 4887654b1..3d1f3344d 100644 --- a/tests/integration/api_v3/rpc/networkStatus.test.js +++ b/tests/integration/api_v3/rpc/networkStatus.test.js @@ -21,10 +21,7 @@ const { invalidParamsSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - networkStatusSchema, - metaSchema, -} = require('../../../schemas/api_v3/networkStatus.schema'); +const { networkStatusSchema, metaSchema } = require('../../../schemas/api_v3/networkStatus.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; const requestNetworkStatus = async params => request(wsRpcUrl, 'get.network.status', params); diff --git a/tests/integration/api_v3/rpc/posClaimableRewards.test.js b/tests/integration/api_v3/rpc/posClaimableRewards.test.js index a96cce856..606b17d84 100644 --- a/tests/integration/api_v3/rpc/posClaimableRewards.test.js +++ b/tests/integration/api_v3/rpc/posClaimableRewards.test.js @@ -22,21 +22,25 @@ const { invalidRequestSchema, } = require('../../../schemas/rpcGenerics.schema'); +const { goodResponseSchema } = require('../../../schemas/api_v3/posClaimableRewards.schema'); const { - goodResponseSchema, -} = require('../../../schemas/api_v3/posClaimableRewards.schema'); -const { invalidAddresses, invalidNames, invalidPublicKeys, invalidLimits, invalidOffsets } = require('../constants/invalidInputs'); + invalidAddresses, + invalidNames, + invalidPublicKeys, + invalidLimits, + invalidOffsets, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getPosClaimableRewards = async (params) => request(wsRpcUrl, 'get.pos.rewards.claimable', params); +const getPosClaimableRewards = async params => + request(wsRpcUrl, 'get.pos.rewards.claimable', params); const getGenerators = async () => request(wsRpcUrl, 'get.generators'); describe('Claimable rewards API', () => { let refGenerator; beforeAll(async () => { do { - // eslint-disable-next-line no-await-in-loop const { result } = await getGenerators(); if (result.data.length) { [refGenerator] = result.data; @@ -110,7 +114,9 @@ describe('Claimable rewards API', () => { it('should return list of claimable rewards with known validator address, offset=1 and limit=5', async () => { const response = await getPosClaimableRewards({ - address: refGenerator.address, offset: 1, limit: 5, + address: refGenerator.address, + offset: 1, + limit: 5, }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; @@ -120,19 +126,22 @@ describe('Claimable rewards API', () => { }); it('should return list of claimable rewards with known validator publicKey', async () => { - const response = await getPosClaimableRewards({ publicKey: refGenerator.publicKey }); - expect(response).toMap(jsonRpcEnvelopeSchema); + if (refGenerator.publicKey) { + const response = await getPosClaimableRewards({ publicKey: refGenerator.publicKey }); + expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(goodResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(0); - expect(result.data.length).toBeLessThanOrEqual(10); + const { result } = response; + expect(result).toMap(goodResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(0); + expect(result.data.length).toBeLessThanOrEqual(10); + } }); it('should return list of of claimable rewards with known validator publicKey and offset=1', async () => { if (refGenerator.publicKey) { const response = await getPosClaimableRewards({ - publicKey: refGenerator.publicKey, offset: 1, + publicKey: refGenerator.publicKey, + offset: 1, }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; @@ -145,7 +154,8 @@ describe('Claimable rewards API', () => { it('should return list of claimable rewards with known validator publicKey and limit=5', async () => { if (refGenerator.publicKey) { const response = await getPosClaimableRewards({ - publicKey: refGenerator.publicKey, limit: 5, + publicKey: refGenerator.publicKey, + limit: 5, }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; @@ -158,7 +168,9 @@ describe('Claimable rewards API', () => { it('should return list of claimable rewards with known validator publicKey, offset=1 and limit=5', async () => { if (refGenerator.publicKey) { const response = await getPosClaimableRewards({ - publicKey: refGenerator.publicKey, offset: 1, limit: 5, + publicKey: refGenerator.publicKey, + offset: 1, + limit: 5, }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; @@ -175,7 +187,6 @@ describe('Claimable rewards API', () => { it('should return invalid params if requested with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosClaimableRewards({ address: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } @@ -183,7 +194,6 @@ describe('Claimable rewards API', () => { it('should return invalid params if requested with invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosClaimableRewards({ name: invalidNames[i] }); expect(response).toMap(invalidParamsSchema); } @@ -191,7 +201,6 @@ describe('Claimable rewards API', () => { it('should return invalid params if requested with invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosClaimableRewards({ publicKey: invalidPublicKeys[i] }); expect(response).toMap(invalidParamsSchema); } @@ -199,7 +208,6 @@ describe('Claimable rewards API', () => { it('should return invalid params if requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosClaimableRewards({ address: refGenerator.address, limit: invalidLimits[i], @@ -210,7 +218,6 @@ describe('Claimable rewards API', () => { it('should return invalid params if requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosClaimableRewards({ address: refGenerator.address, offset: invalidOffsets[i], diff --git a/tests/integration/api_v3/rpc/posConstants.test.js b/tests/integration/api_v3/rpc/posConstants.test.js index b8f57c798..5e28b3a96 100644 --- a/tests/integration/api_v3/rpc/posConstants.test.js +++ b/tests/integration/api_v3/rpc/posConstants.test.js @@ -28,7 +28,7 @@ const { const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getPosConstants = async (params) => request(wsRpcUrl, 'get.pos.constants', params); +const getPosConstants = async params => request(wsRpcUrl, 'get.pos.constants', params); describe('get.pos.constants', () => { it('should return PoS module constants', async () => { @@ -39,25 +39,20 @@ describe('get.pos.constants', () => { expect(result.data).toMap(posConstantsSchema); expect(result.meta).toMap(posConstantsMetaSchema); - expect(result.data.roundLength) - .toEqual(result.data.numberActiveValidators + result.data.numberStandbyValidators); + expect(result.data.roundLength).toEqual( + result.data.numberActiveValidators + result.data.numberStandbyValidators, + ); }); it('should return invalid params for unsupported param', async () => { - const response = await request( - wsRpcUrl, - 'get.pos.constants', - { someparam: 'not_supported' }, - ).catch(e => e); + const response = await request(wsRpcUrl, 'get.pos.constants', { + someparam: 'not_supported', + }).catch(e => e); expect(response).toMap(invalidParamsSchema); }); it('should return invalid params for empty param', async () => { - const response = await request( - wsRpcUrl, - 'get.pos.constants', - { someparam: '' }, - ).catch(e => e); + const response = await request(wsRpcUrl, 'get.pos.constants', { someparam: '' }).catch(e => e); expect(response).toMap(invalidParamsSchema); }); }); diff --git a/tests/integration/api_v3/rpc/posRewardsLocked.test.js b/tests/integration/api_v3/rpc/posRewardsLocked.test.js index af9202d31..5c8c8d751 100644 --- a/tests/integration/api_v3/rpc/posRewardsLocked.test.js +++ b/tests/integration/api_v3/rpc/posRewardsLocked.test.js @@ -22,16 +22,20 @@ const { invalidRequestSchema, } = require('../../../schemas/rpcGenerics.schema'); +const { goodResponseSchema } = require('../../../schemas/api_v3/posRewardsLocked.schema'); const { - goodResponseSchema, -} = require('../../../schemas/api_v3/posRewardsLocked.schema'); -const { invalidPublicKeys, invalidNames, invalidAddresses, invalidLimits, invalidOffsets } = require('../constants/invalidInputs'); + invalidPublicKeys, + invalidNames, + invalidAddresses, + invalidLimits, + invalidOffsets, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getPosRewardsLocked = async (params) => request(wsRpcUrl, 'get.pos.rewards.locked', params); +const getPosRewardsLocked = async params => request(wsRpcUrl, 'get.pos.rewards.locked', params); const getTransaction = async params => request(wsRpcUrl, 'get.transactions', params); -const getStakes = async (params) => request(wsRpcUrl, 'get.pos.stakes', params); +const getStakes = async params => request(wsRpcUrl, 'get.pos.stakes', params); describe('Rewards Locked API', () => { let refStaker; @@ -185,7 +189,6 @@ describe('Rewards Locked API', () => { it('should return invalid params if requested with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosRewardsLocked({ address: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } @@ -193,7 +196,6 @@ describe('Rewards Locked API', () => { it('should return invalid params if requested with invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosRewardsLocked({ name: invalidNames[i] }); expect(response).toMap(invalidParamsSchema); } @@ -201,7 +203,6 @@ describe('Rewards Locked API', () => { it('should return invalid params if requested with invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosRewardsLocked({ publicKey: invalidPublicKeys[i] }); expect(response).toMap(invalidParamsSchema); } @@ -209,7 +210,6 @@ describe('Rewards Locked API', () => { it('should return invalid params if requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosRewardsLocked({ address: refStaker.address, limit: invalidLimits[i], @@ -220,7 +220,6 @@ describe('Rewards Locked API', () => { it('should return invalid params if requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getPosRewardsLocked({ address: refStaker.address, offset: invalidOffsets[i], diff --git a/tests/integration/api_v3/rpc/posStakers.test.js b/tests/integration/api_v3/rpc/posStakers.test.js index b5aeccdf2..9a1b33750 100644 --- a/tests/integration/api_v3/rpc/posStakers.test.js +++ b/tests/integration/api_v3/rpc/posStakers.test.js @@ -16,9 +16,21 @@ const config = require('../../../config'); const { request } = require('../../../helpers/socketIoRpcRequest'); -const { invalidParamsSchema, invalidRequestSchema, jsonRpcEnvelopeSchema } = require('../../../schemas/rpcGenerics.schema'); +const { + invalidParamsSchema, + invalidRequestSchema, + jsonRpcEnvelopeSchema, +} = require('../../../schemas/rpcGenerics.schema'); const { goodRequestSchema } = require('../../../schemas/api_v3/staker.schema'); -const { invalidNames, invalidPublicKeys, invalidAddresses, invalidPartialSearches, invalidLimits, invalidOffsets } = require('../constants/invalidInputs'); +const { + invalidNames, + invalidPublicKeys, + invalidAddresses, + invalidPartialSearches, + invalidLimits, + invalidOffsets, +} = require('../constants/invalidInputs'); +const { waitMs } = require('../../../helpers/utils'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; @@ -30,19 +42,49 @@ describe('get.pos.stakers', () => { beforeAll(async () => { let refValidatorAddress; + let retries = 10; + let success = false; + do { - // eslint-disable-next-line no-await-in-loop - const response1 = await request(wsRpcUrl, 'get.transactions', { moduleCommand: 'pos:stake', limit: 1 }); + const response1 = await request(wsRpcUrl, 'get.transactions', { + moduleCommand: 'pos:stake', + limit: 1, + }); const { data: [stakeTx] = [] } = response1.result; if (stakeTx) { // Destructure to refer first entry of all the sent votes within the transaction - const { params: { stakes: [stake] } } = stakeTx; + const { + params: { + stakes: [stake], + }, + } = stakeTx; refStaker = stakeTx.sender; refValidatorAddress = stake.validatorAddress; } } while (!refValidatorAddress); - const validatorsResponse = await request(wsRpcUrl, 'get.pos.validators', { address: refValidatorAddress }); - [refValidator] = validatorsResponse.result.data; + + while (retries > 0 && !success) { + try { + const validatorsResponse = await request(wsRpcUrl, 'get.pos.validators', { + address: refValidatorAddress, + }); + [refValidator] = validatorsResponse.result.data; + + if (refValidator) { + success = true; + } + } catch (error) { + console.error(`Error fetching validators. Retries left: ${retries}`); + retries--; + + // Delay by 3 sec + await waitMs(3000); + } + } + + if (!success) { + throw new Error('Failed to fetch validator address even after retrying.'); + } }); it('should return list of stakers when requested for known validator address', async () => { @@ -95,8 +137,7 @@ describe('get.pos.stakers', () => { expect(result).toMap(goodRequestSchema); expect(result.data.stakers.length).toBeGreaterThanOrEqual(1); expect(result.data.stakers.length).toBeLessThanOrEqual(10); - expect(result.data.stakers.some(staker => staker.address === refStaker.address)) - .toBe(true); + expect(result.data.stakers.some(staker => staker.address === refStaker.address)).toBe(true); }); it('should return list of stakers when requested for known validator address and search param (partial staker address)', async () => { @@ -107,8 +148,7 @@ describe('get.pos.stakers', () => { expect(result).toMap(goodRequestSchema); expect(result.data.stakers.length).toBeGreaterThanOrEqual(1); expect(result.data.stakers.length).toBeLessThanOrEqual(10); - expect(result.data.stakers.some(staker => staker.address === refStaker.address)) - .toBe(true); + expect(result.data.stakers.some(staker => staker.address === refStaker.address)).toBe(true); }); it('should return list of stakers when requested for known validator address and search param (partial staker public key)', async () => { @@ -119,8 +159,7 @@ describe('get.pos.stakers', () => { expect(result).toMap(goodRequestSchema); expect(result.data.stakers.length).toBeGreaterThanOrEqual(1); expect(result.data.stakers.length).toBeLessThanOrEqual(10); - expect(result.data.stakers.some(staker => staker.address === refStaker.address)) - .toBe(true); + expect(result.data.stakers.some(staker => staker.address === refStaker.address)).toBe(true); }); it('should return list of stakers when requested with known validator address and offset=1', async () => { @@ -143,7 +182,9 @@ describe('get.pos.stakers', () => { it('should return list of stakers when requested with known validator address, offset=1 and limit=5', async () => { const response = await getStakers({ - address: refValidator.address, offset: 1, limit: 5, + address: refValidator.address, + offset: 1, + limit: 5, }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; @@ -153,41 +194,51 @@ describe('get.pos.stakers', () => { }); it('should return list of stakers when requested for known validator publicKey', async () => { - const response = await getStakers({ publicKey: refValidator.publicKey }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(goodRequestSchema); - expect(result.data.stakers.length).toBeGreaterThanOrEqual(1); - expect(result.data.stakers.length).toBeLessThanOrEqual(10); + if (refValidator.publicKey) { + const response = await getStakers({ publicKey: refValidator.publicKey }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(goodRequestSchema); + expect(result.data.stakers.length).toBeGreaterThanOrEqual(1); + expect(result.data.stakers.length).toBeLessThanOrEqual(10); + } }); it('should return list of stakers when requested with known validator publicKey and offset=1', async () => { - const response = await getStakers({ publicKey: refValidator.publicKey, offset: 1 }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(goodRequestSchema); - expect(result.data.stakers.length).toBeGreaterThanOrEqual(0); - expect(result.data.stakers.length).toBeLessThanOrEqual(10); + if (refValidator.publicKey) { + const response = await getStakers({ publicKey: refValidator.publicKey, offset: 1 }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(goodRequestSchema); + expect(result.data.stakers.length).toBeGreaterThanOrEqual(0); + expect(result.data.stakers.length).toBeLessThanOrEqual(10); + } }); it('should return list of stakers when requested with known validator publicKey and limit=5', async () => { - const response = await getStakers({ publicKey: refValidator.publicKey, limit: 5 }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(goodRequestSchema); - expect(result.data.stakers.length).toBeGreaterThanOrEqual(1); - expect(result.data.stakers.length).toBeLessThanOrEqual(5); + if (refValidator.publicKey) { + const response = await getStakers({ publicKey: refValidator.publicKey, limit: 5 }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(goodRequestSchema); + expect(result.data.stakers.length).toBeGreaterThanOrEqual(1); + expect(result.data.stakers.length).toBeLessThanOrEqual(5); + } }); it('should return list of stakers when requested with known validator publicKey, offset=1 and limit=5', async () => { - const response = await getStakers({ - publicKey: refValidator.publicKey, offset: 1, limit: 5, - }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(goodRequestSchema); - expect(result.data.stakers.length).toBeGreaterThanOrEqual(0); - expect(result.data.stakers.length).toBeLessThanOrEqual(5); + if (refValidator.publicKey) { + const response = await getStakers({ + publicKey: refValidator.publicKey, + offset: 1, + limit: 5, + }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(goodRequestSchema); + expect(result.data.stakers.length).toBeGreaterThanOrEqual(0); + expect(result.data.stakers.length).toBeLessThanOrEqual(5); + } }); it('should return list of stakers when requested for known validator name', async () => { @@ -252,7 +303,6 @@ describe('get.pos.stakers', () => { it('should return invalid request for invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakers({ address: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } @@ -260,7 +310,6 @@ describe('get.pos.stakers', () => { it('should return invalid request for invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakers({ publicKey: invalidPublicKeys[i] }); expect(response).toMap(invalidParamsSchema); } @@ -268,7 +317,6 @@ describe('get.pos.stakers', () => { it('should return invalid request for invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakers({ name: invalidNames[i] }); expect(response).toMap(invalidParamsSchema); } @@ -276,7 +324,6 @@ describe('get.pos.stakers', () => { it('should return invalid request for invalid search', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakers({ address: refValidator.address, search: invalidPartialSearches[i], @@ -287,7 +334,6 @@ describe('get.pos.stakers', () => { it('should return invalid request for invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakers({ address: refValidator.address, limit: invalidLimits[i] }); expect(response).toMap(invalidParamsSchema); } @@ -295,7 +341,6 @@ describe('get.pos.stakers', () => { it('should return invalid request for invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakers({ address: refValidator.address, offset: invalidOffsets[i], diff --git a/tests/integration/api_v3/rpc/posStakes.test.js b/tests/integration/api_v3/rpc/posStakes.test.js index 9f79ae6cb..5f64354f4 100644 --- a/tests/integration/api_v3/rpc/posStakes.test.js +++ b/tests/integration/api_v3/rpc/posStakes.test.js @@ -22,14 +22,17 @@ const { invalidRequestSchema, } = require('../../../schemas/rpcGenerics.schema'); +const { stakesResponseSchema } = require('../../../schemas/api_v3/stakes.schema'); const { - stakesResponseSchema, -} = require('../../../schemas/api_v3/stakes.schema'); -const { invalidPublicKeys, invalidAddresses, invalidPartialSearches, invalidNames } = require('../constants/invalidInputs'); + invalidPublicKeys, + invalidAddresses, + invalidPartialSearches, + invalidNames, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getStakes = async (params) => request(wsRpcUrl, 'get.pos.stakes', params); +const getStakes = async params => request(wsRpcUrl, 'get.pos.stakes', params); describe('get.pos.stakes', () => { let refStaker; @@ -41,16 +44,24 @@ describe('get.pos.stakes', () => { maxNumberSentStakes = posConstants.data.maxNumberSentStakes; do { - // eslint-disable-next-line no-await-in-loop - const response = await request(wsRpcUrl, 'get.transactions', { moduleCommand: 'pos:stake', limit: 1 }); + const response = await request(wsRpcUrl, 'get.transactions', { + moduleCommand: 'pos:stake', + limit: 1, + }); const { data: [stakeTx] = [] } = response.result; if (stakeTx) { - const { params: { stakes: [stake] } } = stakeTx; + const { + params: { + stakes: [stake], + }, + } = stakeTx; refValidatorAddress = stake.validatorAddress; refStaker = stakeTx.sender; } } while (!refStaker); - const validatorsResponse = await request(wsRpcUrl, 'get.pos.validators', { address: refValidatorAddress }); + const validatorsResponse = await request(wsRpcUrl, 'get.pos.validators', { + address: refValidatorAddress, + }); [refValidator] = validatorsResponse.result.data; }); @@ -104,8 +115,7 @@ describe('get.pos.stakes', () => { expect(result).toMap(stakesResponseSchema); expect(result.data.stakes.length).toBeGreaterThanOrEqual(1); expect(result.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); - expect(result.data.stakes.some(staker => staker.address === refValidator.address)) - .toBe(true); + expect(result.data.stakes.some(staker => staker.address === refValidator.address)).toBe(true); }); it('should return list of stakes when requested for known staker address and search (partial validator address) param', async () => { @@ -116,8 +126,7 @@ describe('get.pos.stakes', () => { expect(result).toMap(stakesResponseSchema); expect(result.data.stakes.length).toBeGreaterThanOrEqual(1); expect(result.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); - expect(result.data.stakes.some(staker => staker.address === refValidator.address)) - .toBe(true); + expect(result.data.stakes.some(staker => staker.address === refValidator.address)).toBe(true); }); it('should return list of stakes when requested for known staker address and search (partial validator public key) param', async () => { @@ -128,17 +137,18 @@ describe('get.pos.stakes', () => { expect(result).toMap(stakesResponseSchema); expect(result.data.stakes.length).toBeGreaterThanOrEqual(1); expect(result.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); - expect(result.data.stakes.some(staker => staker.address === refValidator.address)) - .toBe(true); + expect(result.data.stakes.some(staker => staker.address === refValidator.address)).toBe(true); }); it('should return list of stakes when requested for known staker name', async () => { - const response = await getStakes({ name: refStaker.name }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(stakesResponseSchema); - expect(result.data.stakes.length).toBeGreaterThanOrEqual(1); - expect(result.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); + if (refStaker.name) { + const response = await getStakes({ name: refStaker.name }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(stakesResponseSchema); + expect(result.data.stakes.length).toBeGreaterThanOrEqual(1); + expect(result.data.stakes.length).toBeLessThanOrEqual(maxNumberSentStakes); + } }); it('should return list of stakes when requested for known staker publicKey', async () => { @@ -157,7 +167,6 @@ describe('get.pos.stakes', () => { it('should return invalid params for invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakes({ address: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } @@ -165,7 +174,6 @@ describe('get.pos.stakes', () => { it('should return invalid params for invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakes({ publicKey: invalidPublicKeys[i] }); expect(response).toMap(invalidParamsSchema); } @@ -173,7 +181,6 @@ describe('get.pos.stakes', () => { it('should return invalid params for invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakes({ name: invalidNames[i] }); expect(response).toMap(invalidParamsSchema); } @@ -181,7 +188,6 @@ describe('get.pos.stakes', () => { it('should return invalid params for invalid search', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getStakes({ address: refStaker.address, search: invalidPartialSearches[i], diff --git a/tests/integration/api_v3/rpc/posUnlocks.test.js b/tests/integration/api_v3/rpc/posUnlocks.test.js index a9dccc89e..c609bb6b1 100644 --- a/tests/integration/api_v3/rpc/posUnlocks.test.js +++ b/tests/integration/api_v3/rpc/posUnlocks.test.js @@ -23,15 +23,20 @@ const { metaSchema, } = require('../../../schemas/rpcGenerics.schema'); +const { unlockSchema } = require('../../../schemas/api_v3/unlock.schema'); const { - unlockSchema, -} = require('../../../schemas/api_v3/unlock.schema'); -const { invalidOffsets, invalidLimits, invalidPartialSearches, invalidNames, invalidPublicKeys, invalidAddresses } = require('../constants/invalidInputs'); + invalidOffsets, + invalidLimits, + invalidPartialSearches, + invalidNames, + invalidPublicKeys, + invalidAddresses, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getUnlocks = async (params) => request(wsRpcUrl, 'get.pos.unlocks', params); -const getTransactions = async (params) => request(wsRpcUrl, 'get.transactions', params); +const getUnlocks = async params => request(wsRpcUrl, 'get.pos.unlocks', params); +const getTransactions = async params => request(wsRpcUrl, 'get.transactions', params); describe('get.pos.unlocks', () => { let refTransaction; @@ -244,7 +249,6 @@ describe('get.pos.unlocks', () => { it('should return invalid params for invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getUnlocks({ address: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } @@ -252,7 +256,6 @@ describe('get.pos.unlocks', () => { it('should return invalid params for invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getUnlocks({ publicKey: invalidPublicKeys[i] }); expect(response).toMap(invalidParamsSchema); } @@ -260,7 +263,6 @@ describe('get.pos.unlocks', () => { it('should return invalid params for invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getUnlocks({ name: invalidNames[i] }); expect(response).toMap(invalidParamsSchema); } @@ -268,7 +270,6 @@ describe('get.pos.unlocks', () => { it('should return invalid params for invalid search', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getUnlocks({ address: refTransaction.sender.address, search: invalidPartialSearches[i], @@ -279,7 +280,6 @@ describe('get.pos.unlocks', () => { it('should return invalid params for invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getUnlocks({ address: refTransaction.sender.address, limit: invalidLimits[i], @@ -290,7 +290,6 @@ describe('get.pos.unlocks', () => { it('should return invalid params for invalid search', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getUnlocks({ address: refTransaction.sender.address, offset: invalidOffsets[i], diff --git a/tests/integration/api_v3/rpc/posValidators.test.js b/tests/integration/api_v3/rpc/posValidators.test.js index 868602435..5ad6179f2 100644 --- a/tests/integration/api_v3/rpc/posValidators.test.js +++ b/tests/integration/api_v3/rpc/posValidators.test.js @@ -14,17 +14,25 @@ * */ const { - address: { - getAddressFromLisk32Address, - }, + address: { getAddressFromLisk32Address }, } = require('@liskhq/lisk-cryptography'); const config = require('../../../config'); const { request } = require('../../../helpers/socketIoRpcRequest'); -const { invalidParamsSchema, jsonRpcEnvelopeSchema } = require('../../../schemas/rpcGenerics.schema'); +const { + invalidParamsSchema, + jsonRpcEnvelopeSchema, +} = require('../../../schemas/rpcGenerics.schema'); const { validatorsResponseSchema } = require('../../../schemas/api_v3/posValidators.schema'); -const { invalidLimits, invalidOffsets, invalidPartialSearches, invalidNamesCSV, invalidAddresses, invalidPublicKeys } = require('../constants/invalidInputs'); +const { + invalidLimits, + invalidOffsets, + invalidPartialSearches, + invalidNamesCSV, + invalidAddresses, + invalidPublicKeys, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; @@ -54,8 +62,9 @@ describe('pos/validators API', () => { expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result).toMap(validatorsResponseSchema); - expect(result.data.length) - .toBeLessThanOrEqual(numberActiveValidators + numberStandbyValidators); + expect(result.data.length).toBeLessThanOrEqual( + numberActiveValidators + numberStandbyValidators, + ); }); it('should return list of correctly sorted validators when called with sort=validatorWeight:desc', async () => { @@ -72,19 +81,24 @@ describe('pos/validators API', () => { for (let index = 0; index < validators.length - 1; index++) { const curValidator = validators[index]; const nextValidator = validators[index + 1]; - expect(BigInt(curValidator.validatorWeight)) - .toBeGreaterThanOrEqual(BigInt(nextValidator.validatorWeight)); + expect(BigInt(curValidator.validatorWeight)).toBeGreaterThanOrEqual( + BigInt(nextValidator.validatorWeight), + ); if (curValidator.validatorWeight === nextValidator.validatorWeight) { // Should be sorted by address when validator weights are same if (curValidator.rank < nextValidator.rank) { - expect(getAddressFromLisk32Address(curValidator.address) - .compare(getAddressFromLisk32Address(nextValidator.address))) - .toBe(-1); + expect( + getAddressFromLisk32Address(curValidator.address).compare( + getAddressFromLisk32Address(nextValidator.address), + ), + ).toBe(-1); } else { - expect(getAddressFromLisk32Address(curValidator.address) - .compare(getAddressFromLisk32Address(nextValidator.address))) - .toBe(1); + expect( + getAddressFromLisk32Address(curValidator.address).compare( + getAddressFromLisk32Address(nextValidator.address), + ), + ).toBe(1); } } else { expect(curValidator.rank).toBeLessThan(nextValidator.rank); @@ -103,23 +117,29 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested with search param (partial validator address)', async () => { - const searchParam = refGenerators[0].address ? refGenerators[0].address.substring(0, 3) : ''; - const response = await getValidators({ search: searchParam }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(validatorsResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(1); - expect(result.data.length).toBeLessThanOrEqual(10); + if (refGenerators.address) { + const searchParam = refGenerators[0].address + ? refGenerators[0].address.substring(0, 3) + : ''; + const response = await getValidators({ search: searchParam }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(validatorsResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeLessThanOrEqual(10); + } }); it('should return list of validators when requested with search param (partial validator public key)', async () => { - const searchParam = refGenerators[0].publicKey ? refGenerators[0].publicKey.substring(0, 3) : ''; - const response = await getValidators({ search: searchParam }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(validatorsResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(1); - expect(result.data.length).toBeLessThanOrEqual(10); + if (refGenerators[0] && refGenerators[0].publicKey) { + const searchParam = refGenerators[0].publicKey.substring(0, 3); + const response = await getValidators({ search: searchParam }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(validatorsResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeLessThanOrEqual(10); + } }); it('should return list of validators when requested with search param (partial validator name) and offset=1', async () => { @@ -133,23 +153,29 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested with search param (partial validator address) and offset=1', async () => { - const searchParam = refGenerators[0].address ? refGenerators[0].address.substring(0, 5) : ''; - const response = await getValidators({ search: searchParam, offset: 1 }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(validatorsResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(0); - expect(result.data.length).toBeLessThanOrEqual(10); + if (refGenerators.address) { + const searchParam = refGenerators[0].address + ? refGenerators[0].address.substring(0, 5) + : ''; + const response = await getValidators({ search: searchParam, offset: 1 }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(validatorsResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(0); + expect(result.data.length).toBeLessThanOrEqual(10); + } }); it('should return list of validators when requested with search param (partial validator public key) and offset=1', async () => { - const searchParam = refGenerators[0].publicKey ? refGenerators[0].publicKey.substring(0, 3) : ''; - const response = await getValidators({ search: searchParam, offset: 1 }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(validatorsResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(0); - expect(result.data.length).toBeLessThanOrEqual(10); + if (refGenerators[0] && refGenerators[0].publicKey) { + const searchParam = refGenerators[0].publicKey.substring(0, 3); + const response = await getValidators({ search: searchParam, offset: 1 }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(validatorsResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(0); + expect(result.data.length).toBeLessThanOrEqual(10); + } }); it('should return list of validators when requested with search param (partial validator name) and limit=5', async () => { @@ -163,23 +189,29 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested with search param (partial validator address) and limit=5', async () => { - const searchParam = refGenerators[0].address ? refGenerators[0].address.substring(0, 3) : ''; - const response = await getValidators({ search: searchParam, limit: 5 }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(validatorsResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(1); - expect(result.data.length).toBeLessThanOrEqual(5); + if (refGenerators.address) { + const searchParam = refGenerators[0].address + ? refGenerators[0].address.substring(0, 3) + : ''; + const response = await getValidators({ search: searchParam, limit: 5 }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(validatorsResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeLessThanOrEqual(5); + } }); it('should return list of validators when requested with search param (partial validator public key) and limit=5', async () => { - const searchParam = refGenerators[0].publicKey ? refGenerators[0].publicKey.substring(0, 3) : ''; - const response = await getValidators({ search: searchParam, limit: 5 }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(validatorsResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(1); - expect(result.data.length).toBeLessThanOrEqual(5); + if (refGenerators[0] && refGenerators[0].publicKey) { + const searchParam = refGenerators[0].publicKey.substring(0, 3); + const response = await getValidators({ search: searchParam, limit: 5 }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(validatorsResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeLessThanOrEqual(5); + } }); it('should return list of validators when requested with search param (partial validator name), offset=1 and limit=5', async () => { @@ -197,31 +229,35 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested with search param (partial validator address), offset=1 and limit=5', async () => { - const searchParam = refGenerators[0].address ? refGenerators[0].address.substring(0, 3) : ''; - const response = await getValidators({ - search: searchParam, - offset: 1, - limit: 5, - }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(validatorsResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(0); - expect(result.data.length).toBeLessThanOrEqual(5); + if (refGenerators.address) { + const searchParam = refGenerators[0].address.substring(0, 3); + const response = await getValidators({ + search: searchParam, + offset: 1, + limit: 5, + }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(validatorsResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(0); + expect(result.data.length).toBeLessThanOrEqual(5); + } }); it('should return list of validators when requested with search param (partial validator public key), offset=1 and limit=5', async () => { - const searchParam = refGenerators[0].publicKey ? refGenerators[0].publicKey.substring(0, 3) : ''; - const response = await getValidators({ - search: searchParam, - offset: 1, - limit: 5, - }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(validatorsResponseSchema); - expect(result.data.length).toBeGreaterThanOrEqual(0); - expect(result.data.length).toBeLessThanOrEqual(5); + if (refGenerators[0] && refGenerators[0].publicKey) { + const searchParam = refGenerators[0].publicKey.substring(0, 3); + const response = await getValidators({ + search: searchParam, + offset: 1, + limit: 5, + }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(validatorsResponseSchema); + expect(result.data.length).toBeGreaterThanOrEqual(0); + expect(result.data.length).toBeLessThanOrEqual(5); + } }); it('should return list of validators when requested with known validator address', async () => { @@ -273,12 +309,15 @@ describe('pos/validators API', () => { }); it('should return list of validators when requested for known validator publicKey', async () => { - const { publicKey = null } = refGenerators.find(generator => generator.publicKey); - const response = await getValidators({ publicKey }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(validatorsResponseSchema); - expect(result.data.length).toBe(1); + const generatorWithPubKey = refGenerators.find(generator => generator.publicKey); + + if (generatorWithPubKey && generatorWithPubKey.publicKey) { + const response = await getValidators({ publicKey: generatorWithPubKey.publicKey }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(validatorsResponseSchema); + expect(result.data.length).toBe(1); + } }); it('should return list of validators when requested for known validator name', async () => { @@ -330,7 +369,9 @@ describe('pos/validators API', () => { }); it('should return empty when requested for known non-validator address', async () => { - const response = await getValidators({ address: 'lsk99999999999999999999999999999999999999' }); + const response = await getValidators({ + address: 'lsk99999999999999999999999999999999999999', + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result).toMap(validatorsResponseSchema); @@ -339,7 +380,6 @@ describe('pos/validators API', () => { it('should return invalid params for invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getValidators({ address: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } @@ -347,7 +387,6 @@ describe('pos/validators API', () => { it('should return invalid params for invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getValidators({ publicKey: invalidPublicKeys[i] }); expect(response).toMap(invalidParamsSchema); } @@ -355,7 +394,6 @@ describe('pos/validators API', () => { it('should return invalid params for invalid name', async () => { for (let i = 0; i < invalidNamesCSV.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getValidators({ name: invalidNamesCSV[i] }); expect(response).toMap(invalidParamsSchema); } @@ -363,7 +401,6 @@ describe('pos/validators API', () => { it('should return invalid params for invalid search', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getValidators({ search: invalidPartialSearches[i] }); expect(response).toMap(invalidParamsSchema); } @@ -371,7 +408,6 @@ describe('pos/validators API', () => { it('should return invalid params for invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getValidators({ limit: invalidLimits[i] }); expect(response).toMap(invalidParamsSchema); } @@ -379,7 +415,6 @@ describe('pos/validators API', () => { it('should return invalid params for invalid search', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getValidators({ offset: invalidOffsets[i] }); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/postTransactions.test.js b/tests/integration/api_v3/rpc/postTransactions.test.js index 3bb5b0424..ab13f2a46 100644 --- a/tests/integration/api_v3/rpc/postTransactions.test.js +++ b/tests/integration/api_v3/rpc/postTransactions.test.js @@ -15,18 +15,14 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, invalidRequestSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - postTransactionSchema, -} = require('../../../schemas/api_v3/transaction.schema'); +const { postTransactionSchema } = require('../../../schemas/api_v3/transaction.schema'); const { createTokenTransferTx } = require('../txUtil/createTx'); const { encodeTransaction } = require('../txUtil/encodeTx'); @@ -34,7 +30,8 @@ const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; const postTransaction = async params => request(wsRpcUrl, 'post.transactions', params); const networkStatus = async params => request(wsRpcUrl, 'get.network.status', params); -const INVALID_TRANSACTION = '0802100018002080c2d72f2a2027f87a414b549e79a940bf24fdf2b2f05e7f22aeeecc86a322e0880a0cebdf3ef171214aebd99f07218109162a905d0e0c91e58bedc83c51a0e746f6b656e207472616e736665723a40a30998db4e96911a3d784b0a01b817baf64ec9745d7c0407255967506cb01764220e2e6ce66183d07'; +const INVALID_TRANSACTION = + '0802100018002080c2d72f2a2027f87a414b549e79a940bf24fdf2b2f05e7f22aeeecc86a322e0880a0cebdf3ef171214aebd99f07218109162a905d0e0c91e58bedc83c51a0e746f6b656e207472616e736665723a40a30998db4e96911a3d784b0a01b817baf64ec9745d7c0407255967506cb01764220e2e6ce66183d07'; const baseUrlV3 = `${config.SERVICE_ENDPOINT}/api/v3`; const authEndpoint = `${baseUrlV3}/auth`; @@ -54,11 +51,9 @@ describe('Method post.transactions', () => { const transaction = await createTokenTransferTx(authEndpoint); const encodedTx = await encodeTransaction(transaction, baseUrlV3); - const response = await postTransaction( - { - transaction: encodedTx, - }, - ); + const response = await postTransaction({ + transaction: encodedTx, + }); const { result } = response; expect(result).toBeInstanceOf(Object); diff --git a/tests/integration/api_v3/rpc/rewardConstants.test.js b/tests/integration/api_v3/rpc/rewardConstants.test.js index 49c620100..e3c10f9e8 100644 --- a/tests/integration/api_v3/rpc/rewardConstants.test.js +++ b/tests/integration/api_v3/rpc/rewardConstants.test.js @@ -21,13 +21,11 @@ const { jsonRpcEnvelopeSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - rewardConstantsResponseSchema, -} = require('../../../schemas/api_v3/rewardConstants.schema'); +const { rewardConstantsResponseSchema } = require('../../../schemas/api_v3/rewardConstants.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getRewardConstants = async (params) => request(wsRpcUrl, 'get.reward.constants', params); +const getRewardConstants = async params => request(wsRpcUrl, 'get.reward.constants', params); describe('get.reward.constants', () => { it('should return reward constants when requested', async () => { diff --git a/tests/integration/api_v3/rpc/rewardDefault.test.js b/tests/integration/api_v3/rpc/rewardDefault.test.js index 05f708c77..c0ed4bd15 100644 --- a/tests/integration/api_v3/rpc/rewardDefault.test.js +++ b/tests/integration/api_v3/rpc/rewardDefault.test.js @@ -21,13 +21,11 @@ const { jsonRpcEnvelopeSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - rewardDefaultResponseSchema, -} = require('../../../schemas/api_v3/rewardDefault.schema'); +const { rewardDefaultResponseSchema } = require('../../../schemas/api_v3/rewardDefault.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getRewardDefault = async (params) => request(wsRpcUrl, 'get.reward.default', params); +const getRewardDefault = async params => request(wsRpcUrl, 'get.reward.default', params); describe('get.reward.default', () => { it('should return default reward when requested with block height=1', async () => { diff --git a/tests/integration/api_v3/rpc/rewardInflation.test.js b/tests/integration/api_v3/rpc/rewardInflation.test.js index 90d958dc0..a06cf2082 100644 --- a/tests/integration/api_v3/rpc/rewardInflation.test.js +++ b/tests/integration/api_v3/rpc/rewardInflation.test.js @@ -21,13 +21,11 @@ const { jsonRpcEnvelopeSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { - rewardInflationResponseSchema, -} = require('../../../schemas/api_v3/rewardInflation.schema'); +const { rewardInflationResponseSchema } = require('../../../schemas/api_v3/rewardInflation.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getRewardInflation = async (params) => request(wsRpcUrl, 'get.reward.annual-inflation', params); +const getRewardInflation = async params => request(wsRpcUrl, 'get.reward.annual-inflation', params); let latestBlockHeight; diff --git a/tests/integration/api_v3/rpc/schemas.test.js b/tests/integration/api_v3/rpc/schemas.test.js index 303f4c148..1f606327c 100644 --- a/tests/integration/api_v3/rpc/schemas.test.js +++ b/tests/integration/api_v3/rpc/schemas.test.js @@ -46,8 +46,9 @@ describe('Method get.schemas', () => { expect(result.data.standardEvent.schema).toStrictEqual(schemas.standardEventSchema); expect(result.data.ccm.schema).toStrictEqual(schemas.ccmSchema); - result.data.messages - .forEach(message => expect(message.schema).toStrictEqual(schemas.messageSchema)); + result.data.messages.forEach(message => + expect(message.schema).toStrictEqual(schemas.messageSchema), + ); }); it('should return invalid params for invalid param', async () => { diff --git a/tests/integration/api_v3/rpc/tokenAccountExists.test.js b/tests/integration/api_v3/rpc/tokenAccountExists.test.js index 88fff4426..5ed9aa57d 100644 --- a/tests/integration/api_v3/rpc/tokenAccountExists.test.js +++ b/tests/integration/api_v3/rpc/tokenAccountExists.test.js @@ -17,9 +17,18 @@ const config = require('../../../config'); const { request } = require('../../../helpers/socketIoRpcRequest'); -const { invalidParamsSchema, jsonRpcEnvelopeSchema, invalidRequestSchema } = require('../../../schemas/rpcGenerics.schema'); +const { + invalidParamsSchema, + jsonRpcEnvelopeSchema, + invalidRequestSchema, +} = require('../../../schemas/rpcGenerics.schema'); const { tokenAccountExistsSchema } = require('../../../schemas/api_v3/tokenAccountExists.schema'); -const { invalidNames, invalidPublicKeys, invalidAddresses, invalidTokenIDs } = require('../constants/invalidInputs'); +const { + invalidNames, + invalidPublicKeys, + invalidAddresses, + invalidTokenIDs, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; @@ -32,16 +41,24 @@ describe('get.token.account.exists', () => { beforeAll(async () => { let refValidatorAddress; do { - // eslint-disable-next-line no-await-in-loop - const transactionsResponse = await request(wsRpcUrl, 'get.transactions', { moduleCommand: 'pos:stake', limit: 1 }); + const transactionsResponse = await request(wsRpcUrl, 'get.transactions', { + moduleCommand: 'pos:stake', + limit: 1, + }); const { data: [stakeTx] = [] } = transactionsResponse.result; if (stakeTx) { // Destructure to refer first entry of all the sent votes within the transaction - const { params: { stakes: [stake] } } = stakeTx; + const { + params: { + stakes: [stake], + }, + } = stakeTx; refValidatorAddress = stake.validatorAddress; } } while (!refValidatorAddress); - const validatorsResponse = await request(wsRpcUrl, 'get.pos.validators', { address: refValidatorAddress }); + const validatorsResponse = await request(wsRpcUrl, 'get.pos.validators', { + address: refValidatorAddress, + }); [refValidator] = validatorsResponse.result.data; // Fetch tokenID const tokenConstantsResponse = await request(wsRpcUrl, 'get.pos.constants'); @@ -60,7 +77,10 @@ describe('get.token.account.exists', () => { }); it('should return isExists:false when requested for unknown address', async () => { - const response = await getTokenAccountExists({ address: 'lskvmcf8bphtskyv49xg866u9a9dm7ftkxremzbkr', tokenID: refTokenID }); + const response = await getTokenAccountExists({ + address: 'lskvmcf8bphtskyv49xg866u9a9dm7ftkxremzbkr', + tokenID: refTokenID, + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result).toMap(tokenAccountExistsSchema); @@ -79,18 +99,23 @@ describe('get.token.account.exists', () => { }); it('should return isExists:true requested for known publicKey', async () => { - const response = await getTokenAccountExists({ - publicKey: refValidator.publicKey, - tokenID: refTokenID, - }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(tokenAccountExistsSchema); - expect(result.data.isExists).toBe(true); + if (refValidator.publicKey) { + const response = await getTokenAccountExists({ + publicKey: refValidator.publicKey, + tokenID: refTokenID, + }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(tokenAccountExistsSchema); + expect(result.data.isExists).toBe(true); + } }); it('should return isExists:false requested for unknown publicKey', async () => { - const response = await getTokenAccountExists({ publicKey: '7dda7d86986775bd9ee4bc2f974e31d58b5280e02513c216143574866933bbdf', tokenID: refTokenID }); + const response = await getTokenAccountExists({ + publicKey: '7dda7d86986775bd9ee4bc2f974e31d58b5280e02513c216143574866933bbdf', + tokenID: refTokenID, + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result).toMap(tokenAccountExistsSchema); @@ -98,25 +123,29 @@ describe('get.token.account.exists', () => { }); it('should return isExists:false requested for incorrect tokenID with known publicKey', async () => { - const response = await getTokenAccountExists({ - publicKey: refValidator.publicKey, - tokenID: unknownTokenID, - }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(tokenAccountExistsSchema); - expect(result.data.isExists).toBe(false); + if (refValidator.publicKey) { + const response = await getTokenAccountExists({ + publicKey: refValidator.publicKey, + tokenID: unknownTokenID, + }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(tokenAccountExistsSchema); + expect(result.data.isExists).toBe(false); + } }); it('should return isExists:true when requested for known validator name', async () => { - const response = await getTokenAccountExists({ - name: refValidator.name, - tokenID: refTokenID, - }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(tokenAccountExistsSchema); - expect(result.data.isExists).toBe(true); + if (refValidator.name) { + const response = await getTokenAccountExists({ + name: refValidator.name, + tokenID: refTokenID, + }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(tokenAccountExistsSchema); + expect(result.data.isExists).toBe(true); + } }); it('should return isExists:false when requested for unknown validator name', async () => { @@ -159,18 +188,25 @@ describe('get.token.account.exists', () => { }); it('should return bad request for an invalid param', async () => { - const response = await await getTokenAccountExists({ name: refValidator.name, tokenID: refTokenID, invalidParam: 'invalid' }); + const response = await await getTokenAccountExists({ + name: refValidator.name, + tokenID: refTokenID, + invalidParam: 'invalid', + }); expect(response).toMap(invalidParamsSchema); }); it('should return bad request for an invalid empty param', async () => { - const response = await await getTokenAccountExists({ name: refValidator.name, tokenID: refTokenID, invalidParam: '' }); + const response = await await getTokenAccountExists({ + name: refValidator.name, + tokenID: refTokenID, + invalidParam: '', + }); expect(response).toMap(invalidParamsSchema); }); it('should return bad request for an invalid token ID', async () => { for (let i = 0; i < invalidTokenIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokenAccountExists({ tokenID: invalidTokenIDs[i], address: refValidator.address, @@ -181,7 +217,6 @@ describe('get.token.account.exists', () => { it('should return bad request for an invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokenAccountExists({ tokenID: refTokenID, address: invalidAddresses[i], @@ -192,7 +227,6 @@ describe('get.token.account.exists', () => { it('should return bad request for an invalid publicKey', async () => { for (let i = 0; i < invalidPublicKeys.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokenAccountExists({ tokenID: refTokenID, publicKey: invalidPublicKeys[i], @@ -203,7 +237,6 @@ describe('get.token.account.exists', () => { it('should return bad request for an invalid name', async () => { for (let i = 0; i < invalidNames.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokenAccountExists({ tokenID: refTokenID, name: invalidNames[i] }); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/tokenAvailableIDs.test.js b/tests/integration/api_v3/rpc/tokenAvailableIDs.test.js index a7d6d1444..8df3016e1 100644 --- a/tests/integration/api_v3/rpc/tokenAvailableIDs.test.js +++ b/tests/integration/api_v3/rpc/tokenAvailableIDs.test.js @@ -15,9 +15,7 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -30,7 +28,7 @@ const { const { invalidOffsets, invalidLimits } = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getTokensIDs = async (params) => request(wsRpcUrl, 'get.token.available-ids', params); +const getTokensIDs = async params => request(wsRpcUrl, 'get.token.available-ids', params); describe('get.token.available-ids', () => { it('should retrieve available token ids when called without any parameters', async () => { @@ -101,7 +99,6 @@ describe('get.token.available-ids', () => { it('should return invalid params when called with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokensIDs({ limit: invalidLimits[i], }); @@ -111,7 +108,6 @@ describe('get.token.available-ids', () => { it('should return invalid params when called with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokensIDs({ offset: invalidOffsets[i], }); diff --git a/tests/integration/api_v3/rpc/tokenBalances.test.js b/tests/integration/api_v3/rpc/tokenBalances.test.js index 08cb21bd5..8c46d7c90 100644 --- a/tests/integration/api_v3/rpc/tokenBalances.test.js +++ b/tests/integration/api_v3/rpc/tokenBalances.test.js @@ -15,9 +15,7 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -28,10 +26,15 @@ const { tokenBalancesSchema, tokenBalancesMetaSchema, } = require('../../../schemas/api_v3/tokenBalances.schema'); -const { invalidLimits, invalidTokenIDs, invalidAddresses, invalidOffsets } = require('../constants/invalidInputs'); +const { + invalidLimits, + invalidTokenIDs, + invalidAddresses, + invalidOffsets, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getTokensInfo = async (params) => request(wsRpcUrl, 'get.token.balances', params); +const getTokensInfo = async params => request(wsRpcUrl, 'get.token.balances', params); const getValidators = async params => request(wsRpcUrl, 'get.pos.validators', params); const getNetworkStatus = async params => request(wsRpcUrl, 'get.network.status', params); @@ -92,7 +95,6 @@ describe('get.token.balances', () => { it('should return invalid params when requested with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokensInfo({ address: invalidAddresses[i], tokenID: currTokenID }); expect(response).toMap(invalidParamsSchema); } @@ -100,8 +102,8 @@ describe('get.token.balances', () => { it('should return invalid params when requested with invalid tokenIDs', async () => { for (let i = 0; i < invalidTokenIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await getTokensInfo({ address: refValidator.address, + const response = await getTokensInfo({ + address: refValidator.address, tokenID: invalidTokenIDs[i], }); expect(response).toMap(invalidParamsSchema); @@ -110,8 +112,8 @@ describe('get.token.balances', () => { it('should return invalid params when requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await getTokensInfo({ address: refValidator.address, + const response = await getTokensInfo({ + address: refValidator.address, tokenID: currTokenID, limit: invalidLimits[i], }); @@ -121,8 +123,8 @@ describe('get.token.balances', () => { it('should return invalid params when requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop - const response = await getTokensInfo({ address: refValidator.address, + const response = await getTokensInfo({ + address: refValidator.address, tokenID: currTokenID, offset: invalidOffsets[i], }); diff --git a/tests/integration/api_v3/rpc/tokenConstants.test.js b/tests/integration/api_v3/rpc/tokenConstants.test.js index d71b85fd0..7ead27ac9 100644 --- a/tests/integration/api_v3/rpc/tokenConstants.test.js +++ b/tests/integration/api_v3/rpc/tokenConstants.test.js @@ -28,7 +28,7 @@ const { const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getTokenConstants = async (params) => request(wsRpcUrl, 'get.token.constants', params); +const getTokenConstants = async params => request(wsRpcUrl, 'get.token.constants', params); describe('get.token.constants', () => { it('should return token module constants', async () => { diff --git a/tests/integration/api_v3/rpc/tokenSummary.test.js b/tests/integration/api_v3/rpc/tokenSummary.test.js index 770cb4460..4267bee4d 100644 --- a/tests/integration/api_v3/rpc/tokenSummary.test.js +++ b/tests/integration/api_v3/rpc/tokenSummary.test.js @@ -15,9 +15,7 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -31,7 +29,7 @@ const { } = require('../../../schemas/api_v3/tokenSummary.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const gettokenSummaryInfo = async (params) => request(wsRpcUrl, 'get.token.summary', params); +const gettokenSummaryInfo = async params => request(wsRpcUrl, 'get.token.summary', params); describe('get.token.summary', () => { it('should return tokens summary', async () => { diff --git a/tests/integration/api_v3/rpc/tokenTopBalances.test.js b/tests/integration/api_v3/rpc/tokenTopBalances.test.js index dac42abd3..c38295fa6 100644 --- a/tests/integration/api_v3/rpc/tokenTopBalances.test.js +++ b/tests/integration/api_v3/rpc/tokenTopBalances.test.js @@ -15,9 +15,7 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -27,11 +25,16 @@ const { const { goodResponseSchemaForTokenTopBalances, } = require('../../../schemas/api_v3/tokenTopBalances.schema'); -const { invalidOffsets, invalidLimits, invalidPartialSearches, invalidTokenIDs } = require('../constants/invalidInputs'); +const { + invalidOffsets, + invalidLimits, + invalidPartialSearches, + invalidTokenIDs, +} = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getTokensTopBalances = async (params) => request(wsRpcUrl, 'get.token.balances.top', params); -const getTokensIDs = async (params) => request(wsRpcUrl, 'get.token.available-ids', params); +const getTokensTopBalances = async params => request(wsRpcUrl, 'get.token.balances.top', params); +const getTokensIDs = async params => request(wsRpcUrl, 'get.token.available-ids', params); describe('get.token.balances.top', () => { let tokenID; @@ -41,7 +44,9 @@ describe('get.token.balances.top', () => { const { result } = await getTokensIDs({}); [tokenID] = result.data.tokenIDs; - const { result: { data: tokenInformation } } = await getTokensTopBalances({ tokenID }); + const { + result: { data: tokenInformation }, + } = await getTokensTopBalances({ tokenID }); [tokenInfo] = tokenInformation[tokenID]; }); @@ -130,12 +135,14 @@ describe('get.token.balances.top', () => { }); it('should retrieve top token balances when called with token ID and search param (exact public key)', async () => { - const response = await getTokensTopBalances({ tokenID, search: tokenInfo.publicKey }); - expect(response).toMap(jsonRpcEnvelopeSchema); - const { result } = response; - expect(result).toMap(goodResponseSchemaForTokenTopBalances); - expect(result.data[tokenID].length).toBeGreaterThanOrEqual(1); - expect(result.data[tokenID].length).toBeLessThanOrEqual(10); + if (tokenInfo.publicKey) { + const response = await getTokensTopBalances({ tokenID, search: tokenInfo.publicKey }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result).toMap(goodResponseSchemaForTokenTopBalances); + expect(result.data[tokenID].length).toBeGreaterThanOrEqual(1); + expect(result.data[tokenID].length).toBeLessThanOrEqual(10); + } }); it('should return invalid params when called without token ID', async () => { @@ -145,7 +152,6 @@ describe('get.token.balances.top', () => { it('should return invalid params when called with invalid token ID', async () => { for (let i = 0; i < invalidTokenIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokensTopBalances({ tokenID: invalidTokenIDs[i] }); expect(response).toMap(invalidParamsSchema); } @@ -153,7 +159,6 @@ describe('get.token.balances.top', () => { it('should return invalid params when called with token ID and invalid search', async () => { for (let i = 0; i < invalidPartialSearches.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokensTopBalances({ tokenID, search: invalidPartialSearches[i] }); expect(response).toMap(invalidParamsSchema); } @@ -161,7 +166,6 @@ describe('get.token.balances.top', () => { it('should return invalid params when called with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokensTopBalances({ tokenID, limit: invalidLimits[i] }); expect(response).toMap(invalidParamsSchema); } @@ -169,7 +173,6 @@ describe('get.token.balances.top', () => { it('should return invalid params when called with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTokensTopBalances({ tokenID, offset: invalidOffsets[i] }); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/transactionStatistics.test.js b/tests/integration/api_v3/rpc/transactionStatistics.test.js index 659ed7535..68a427c43 100644 --- a/tests/integration/api_v3/rpc/transactionStatistics.test.js +++ b/tests/integration/api_v3/rpc/transactionStatistics.test.js @@ -33,17 +33,20 @@ const { } = require('../../../schemas/api_v3/transactionStatistics.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const requestTransactionStatistics = async (params) => request(wsRpcUrl, 'get.transactions.statistics', params); +const requestTransactionStatistics = async params => + request(wsRpcUrl, 'get.transactions.statistics', params); describe('get.transactions.statistics', () => { - [{ - interval: 'day', - dateFormat: 'YYYY-MM-DD', - }, - { - interval: 'month', - dateFormat: 'YYYY-MM', - }].forEach(({ interval, dateFormat }) => { + [ + { + interval: 'day', + dateFormat: 'YYYY-MM-DD', + }, + { + interval: 'month', + dateFormat: 'YYYY-MM', + }, + ].forEach(({ interval, dateFormat }) => { describe(`get.transactions.statistics by interval as ${interval}`, () => { const startOfIntervalInUTC = moment().utc().startOf(interval); @@ -78,11 +81,12 @@ describe('get.transactions.statistics', () => { tokensListEntries.forEach(([tokenID, timeline]) => { expect(tokenID).toMatch(regex.TOKEN_ID); expect(timeline).toHaveLength(1); - timeline.forEach(timelineItem => expect(timelineItem) - .toMap(timelineItemSchema, { + timeline.forEach(timelineItem => + expect(timelineItem).toMap(timelineItemSchema, { date: startOfIntervalInUTC.format(dateFormat), timestamp: startOfIntervalInUTC.unix(), - })); + }), + ); }); expect(result.meta).toMap(metaSchema, { limit }); }); @@ -103,11 +107,12 @@ describe('get.transactions.statistics', () => { expect(tokenID).toMatch(regex.TOKEN_ID); expect(timeline.length).toBeGreaterThanOrEqual(0); expect(timeline.length).toBeLessThanOrEqual(limit); - timeline.forEach(timelineItem => expect(timelineItem) - .toMap(timelineItemSchema, { + timeline.forEach(timelineItem => + expect(timelineItem).toMap(timelineItemSchema, { date: startOfYesterday.format(dateFormat), timestamp: startOfYesterday.unix(), - })); + }), + ); }); expect(result.meta.duration).toMatchObject({ @@ -155,7 +160,6 @@ describe('get.transactions.statistics', () => { it('should return invalid params if called with invalid limits', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await requestTransactionStatistics({ interval, limit: invalidLimits[i], @@ -166,7 +170,6 @@ describe('get.transactions.statistics', () => { it('should return invalid params if called with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await requestTransactionStatistics({ interval, offset: invalidOffsets[i], @@ -177,7 +180,7 @@ describe('get.transactions.statistics', () => { }); }); - describe('GET get.transactions.statistics with interval: \'year\'', () => { + describe("GET get.transactions.statistics with interval: 'year'", () => { it('should return invalid param error if called without any params as years are not supported', async () => { const response = await requestTransactionStatistics({ interval: 'year' }); expect(response).toMap(invalidParamsSchema); diff --git a/tests/integration/api_v3/rpc/transactions.test.js b/tests/integration/api_v3/rpc/transactions.test.js index 5ffcef66a..520050d4d 100644 --- a/tests/integration/api_v3/rpc/transactions.test.js +++ b/tests/integration/api_v3/rpc/transactions.test.js @@ -15,7 +15,16 @@ */ import moment from 'moment'; import { TRANSACTION_EXECUTION_STATUSES } from '../../../schemas/api_v3/constants/transactions'; -import { invalidAddresses, invalidBlockIDs, invalidLimits, invalidOffsets } from '../constants/invalidInputs'; +import { + invalidAddresses, + invalidBlockIDs, + invalidChainIDs, + invalidLimits, + invalidOffsets, +} from '../constants/invalidInputs'; +import { waitMs } from '../../../helpers/utils'; + +jest.setTimeout(1200000); const config = require('../../../config'); const { request } = require('../../../helpers/socketIoRpcRequest'); @@ -26,6 +35,7 @@ const { emptyResponseSchema, jsonRpcEnvelopeSchema, invalidParamsSchema, + invalidRequestSchema, metaSchema, } = require('../../../schemas/rpcGenerics.schema'); @@ -37,11 +47,52 @@ const { const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; const getTransactions = async params => request(wsRpcUrl, 'get.transactions', params); +const fetchTxWithRetry = async params => { + let retries = 10; + + while (retries > 0) { + try { + const response = await getTransactions({ limit: 1, ...params }); + const [tx] = response.result.data; + + if (tx) { + return { + success: true, + data: tx, + }; + } + } catch (error) { + console.error(`Error fetching transactions. Retries left: ${retries}`); + + // Delay by 3 sec + await waitMs(3000); + } + retries--; + } + + return { + success: false, + }; +}; + describe('Method get.transactions', () => { let refTransaction; + beforeAll(async () => { - const response = await getTransactions({ moduleCommand: 'token:transfer', limit: 1 }); - [refTransaction] = response.result.data; + const crossChainTxRes = await fetchTxWithRetry({ moduleCommand: 'token:transferCrossChain' }); + + // Try to fetch transfer transaction on same chain, incase no transactions with transfer cross chain + if (!crossChainTxRes.success) { + const sameChainTxRes = await fetchTxWithRetry({ moduleCommand: 'token:transfer' }); + + if (!sameChainTxRes.success) { + throw new Error('Failed to fetch transactions after 10 retries'); + } else { + refTransaction = sameChainTxRes.data; + } + } else { + refTransaction = crossChainTxRes.data; + } }); describe('Retrieve transactions', () => { @@ -64,15 +115,19 @@ describe('Method get.transactions', () => { expect(result.meta).toMap(metaSchema); }); - it(`should return list of transactions when called with executionStatus=${TRANSACTION_EXECUTION_STATUSES.join(',')}`, async () => { - const response = await getTransactions({ executionStatus: TRANSACTION_EXECUTION_STATUSES.join(',') }); + it(`should return list of transactions when called with executionStatus=${TRANSACTION_EXECUTION_STATUSES.join( + ',', + )}`, async () => { + const response = await getTransactions({ + executionStatus: TRANSACTION_EXECUTION_STATUSES.join(','), + }); expect(response).toMap(jsonRpcEnvelopeSchema); const { result } = response; expect(result.data).toBeInstanceOf(Array); expect(result.data.length).toBeGreaterThanOrEqual(1); expect(result.data.length).toBeLessThanOrEqual(10); expect(response.result).toMap(resultEnvelopeSchema); - result.data.forEach((transaction) => { + result.data.forEach(transaction => { if (transaction.executionStatus === 'pending') { expect(transaction).toMap(pendingTransactionSchema); } else { @@ -91,8 +146,7 @@ describe('Method get.transactions', () => { expect(result.data).toBeArrayOfSize(1); expect(response.result).toMap(resultEnvelopeSchema); result.data.forEach((transaction, i) => { - expect(transaction) - .toMap(transactionSchema, { id: refTransaction.id }); + expect(transaction).toMap(transactionSchema, { id: refTransaction.id }); if (i > 0) { const prevTx = result.data[i]; const prevTxTimestamp = prevTx.block.timestamp; @@ -131,7 +185,6 @@ describe('Method get.transactions', () => { it('should return bad request if requested with invalid sort ', async () => { for (let i = 0; i < invalidBlockIDs.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTransactions({ blockID: invalidBlockIDs[i] }); expect(response).toMap(invalidParamsSchema); } @@ -150,8 +203,9 @@ describe('Method get.transactions', () => { expect(result.data.length).toBeLessThanOrEqual(10); expect(response.result).toMap(resultEnvelopeSchema); result.data.forEach((transaction, i) => { - expect(transaction) - .toMap(transactionSchema, { moduleCommand: refTransaction.moduleCommand }); + expect(transaction).toMap(transactionSchema, { + moduleCommand: refTransaction.moduleCommand, + }); if (i > 0) { const prevTx = result.data[i]; const prevTxTimestamp = prevTx.block.timestamp; @@ -195,16 +249,13 @@ describe('Method get.transactions', () => { expect(result.meta).toMap(metaSchema); }); - it('should return empty response when called with empty senderAddress', async () => { + it('should return invalid request when called with empty senderAddress', async () => { const response = await getTransactions({ senderAddress: '' }); - expect(response).toMap(emptyResponseSchema); - const { result } = response; - expect(result).toMap(emptyResultEnvelopeSchema); + expect(response).toMap(invalidRequestSchema); }); it('should throw error when called with invalid senderAddress', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTransactions({ senderAddress: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } @@ -234,22 +285,54 @@ describe('Method get.transactions', () => { expect(result.meta).toMap(metaSchema); }); - it('should return empty response when called with empty recipientAddress', async () => { + it('should return invalid request when called with empty recipientAddress', async () => { const response = await getTransactions({ recipientAddress: '' }); - expect(response).toMap(emptyResponseSchema); - const { result } = response; - expect(result).toMap(emptyResultEnvelopeSchema); + expect(response).toMap(invalidRequestSchema); }); it('should throw error when called with invalid recipientAddress', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTransactions({ recipientAddress: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } }); }); + describe('is able to retrieve list of transactions using receivingChainID', () => { + it('should return transactions when called with known receivingChainID', async () => { + if (refTransaction.params.receivingChainID) { + const response = await getTransactions({ + receivingChainID: refTransaction.params.receivingChainID, + }); + expect(response).toMap(jsonRpcEnvelopeSchema); + const { result } = response; + expect(result.data).toBeInstanceOf(Array); + expect(result.data.length).toBeGreaterThanOrEqual(1); + expect(result.data.length).toBeLessThanOrEqual(10); + expect(response.result).toMap(resultEnvelopeSchema); + result.data.forEach((transaction, i) => { + expect(transaction).toMap(transactionSchema); + expect(transaction.params.receivingChainID).toEqual( + refTransaction.params.receivingChainID, + ); + if (i > 0) { + const prevTx = result.data[i]; + const prevTxTimestamp = prevTx.block.timestamp; + expect(prevTxTimestamp).toBeGreaterThanOrEqual(transaction.block.timestamp); + } + }); + expect(result.meta).toMap(metaSchema); + } + }); + + it('should throw error when called with invalid receivingChainID', async () => { + for (let i = 0; i < invalidChainIDs.length; i++) { + const response = await getTransactions({ receivingChainID: invalidChainIDs[i] }); + expect(response).toMap(invalidParamsSchema); + } + }); + }); + describe('is able to retrieve list of transactions by address', () => { it('should return transactions when called with known address', async () => { const response = await getTransactions({ address: refTransaction.sender.address }); @@ -262,8 +345,9 @@ describe('Method get.transactions', () => { result.data.forEach((transaction, i) => { expect(transaction).toMap(transactionSchema); if (transaction.params.recipientAddress) { - expect([transaction.sender.address, transaction.params.recipientAddress]) - .toContain(refTransaction.sender.address); + expect([transaction.sender.address, transaction.params.recipientAddress]).toContain( + refTransaction.sender.address, + ); } else { expect(transaction.sender.address).toMatch(refTransaction.sender.address); } @@ -278,7 +362,6 @@ describe('Method get.transactions', () => { it('should throw error when called with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTransactions({ address: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } @@ -369,19 +452,19 @@ describe('Method get.transactions', () => { expect(result.meta).toMap(metaSchema); }); - it('should return empty response when called with max...min height', async () => { + it('should return empty request when called with max...min height', async () => { const minHeight = refTransaction.block.height; const maxHeight = refTransaction.block.height + 100; const response = await getTransactions({ height: `${maxHeight}:${minHeight}` }); - expect(response).toMap(emptyResponseSchema); - const { result } = response; - expect(result).toMap(emptyResultEnvelopeSchema); + expect(response).toMap(invalidRequestSchema); }); }); describe('is able to retrieve list of transactions using timestamps', () => { it('should return transactions when called with from to timestamps', async () => { - const from = moment(refTransaction.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refTransaction.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const toTimestamp = refTransaction.block.timestamp; const response = await getTransactions({ timestamp: `${from}:${toTimestamp}` }); @@ -405,7 +488,9 @@ describe('Method get.transactions', () => { }); it('should return transactions when called with fromTimestamp', async () => { - const from = moment(refTransaction.block.timestamp * 10 ** 3).subtract(1, 'day').unix(); + const from = moment(refTransaction.block.timestamp * 10 ** 3) + .subtract(1, 'day') + .unix(); const response = await getTransactions({ timestamp: `${from}:` }); expect(response).toMap(jsonRpcEnvelopeSchema); @@ -571,7 +656,6 @@ describe('Method get.transactions', () => { it('should return bad request if requested with invalid limit', async () => { for (let i = 0; i < invalidLimits.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTransactions({ limit: invalidLimits[i] }); expect(response).toMap(invalidParamsSchema); } @@ -579,7 +663,6 @@ describe('Method get.transactions', () => { it('should return bad request if requested with invalid offset', async () => { for (let i = 0; i < invalidOffsets.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getTransactions({ offset: invalidOffsets[i] }); expect(response).toMap(invalidParamsSchema); } diff --git a/tests/integration/api_v3/rpc/transactionsDryRun.test.js b/tests/integration/api_v3/rpc/transactionsDryRun.test.js index 0b13ffab1..0b9ffcbb3 100644 --- a/tests/integration/api_v3/rpc/transactionsDryRun.test.js +++ b/tests/integration/api_v3/rpc/transactionsDryRun.test.js @@ -200,7 +200,6 @@ describe('Method post.transactions.dryrun', () => { const { senderPublicKey, ...remTransactionObject } = TRANSACTION_OBJECT_VALID; for (let i = 0; i < invalidPublicKeys.length; i++) { remTransactionObject.senderPublicKey = invalidPublicKeys[i]; - // eslint-disable-next-line no-await-in-loop const response = await postDryrunTransaction({ transaction: remTransactionObject }); expect(response).toMap(invalidParamsSchema); } @@ -215,7 +214,6 @@ describe('Method post.transactions.dryrun', () => { ...params, recipientAddress: invalidAddresses[i], }; - // eslint-disable-next-line no-await-in-loop const response = await postDryrunTransaction({ transaction: remTransactionObject }); expect(response).toMap(invalidRequestSchema); } diff --git a/tests/integration/api_v3/rpc/transactionsEstimateFees.test.js b/tests/integration/api_v3/rpc/transactionsEstimateFees.test.js index 44806a7e9..d2ab76ddc 100644 --- a/tests/integration/api_v3/rpc/transactionsEstimateFees.test.js +++ b/tests/integration/api_v3/rpc/transactionsEstimateFees.test.js @@ -21,36 +21,34 @@ const { } = require('../constants/transactionsDryRun'); const { transactionsMap } = require('../constants/transactionsEstimateFees'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { - invalidParamsSchema, jsonRpcEnvelopeSchema, - emptyResponseSchema, + invalidParamsSchema, + invalidRequestSchema, } = require('../../../schemas/rpcGenerics.schema'); -const { transactionEstimateFees } = require('../../../schemas/api_v3/transactionsEstimateFees.schema'); +const { + transactionEstimateFees, +} = require('../../../schemas/api_v3/transactionsEstimateFees.schema'); const { invalidPublicKeys, invalidAddresses } = require('../constants/invalidInputs'); -const getEntries = (o, prefix = '') => Object - .entries(o) - .flatMap( - ([k, v]) => Object(v) === v ? getEntries(v, `${prefix}${k}.`) : [[`${prefix}${k}`, v]], +const getEntries = (o, prefix = '') => + Object.entries(o).flatMap(([k, v]) => + Object(v) === v ? getEntries(v, `${prefix}${k}.`) : [[`${prefix}${k}`, v]], ); -const getSumOfMetaValues = (meta) => { +const getSumOfMetaValues = meta => { const flattenedEntries = getEntries(meta.breakdown); const flattenedObject = Object.fromEntries(flattenedEntries); - const sum = Object - .values(flattenedObject) - .reduce((a, b) => BigInt(a) + BigInt(b), BigInt(0)); + const sum = Object.values(flattenedObject).reduce((a, b) => BigInt(a) + BigInt(b), BigInt(0)); return sum.toString(); }; const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const calculateTransactionFees = async params => request(wsRpcUrl, 'post.transactions.estimate-fees', params); +const calculateTransactionFees = async params => + request(wsRpcUrl, 'post.transactions.estimate-fees', params); describe('Method post.transactions.estimate-fees', () => { it('should return transaction fees when called with valid transaction object with all properties', async () => { @@ -102,37 +100,33 @@ describe('Method post.transactions.estimate-fees', () => { const { senderPublicKey, ...remTransactionObject } = TRANSACTION_OBJECT_VALID; for (let i = 0; i < invalidPublicKeys.length; i++) { remTransactionObject.senderPublicKey = invalidPublicKeys[i]; - // eslint-disable-next-line no-await-in-loop const response = await calculateTransactionFees({ transaction: remTransactionObject }); expect(response).toMap(invalidParamsSchema); } }); - it('should return empty response when requested with invalid address', async () => { + it('should return invalid request when requested with invalid address', async () => { const { params, ...remTransactionObject } = TRANSACTION_OBJECT_VALID; for (let i = 0; i < invalidAddresses.length; i++) { remTransactionObject.params = { ...params, recipientAddress: invalidAddresses[i], }; - // eslint-disable-next-line no-await-in-loop const response = await calculateTransactionFees({ transaction: remTransactionObject }); - expect(response).toMap(emptyResponseSchema); + expect(response).toMap(invalidRequestSchema); } }); describe('Test estimate-fees transactions for all transaction types', () => { - Object - .entries(transactionsMap) - .forEach(([transactionType, transactionObject]) => { - it(`should return transaction fees when called with ${transactionType} transaction object`, async () => { - const { fee, ...remTransactionObject } = transactionObject; - const response = await calculateTransactionFees({ transaction: remTransactionObject }); - const { result } = response; - expect(result).toMap(transactionEstimateFees); - expect(getSumOfMetaValues(result.meta)).toEqual(result.data.transaction.fee.minimum); - }); + Object.entries(transactionsMap).forEach(([transactionType, transactionObject]) => { + it(`should return transaction fees when called with ${transactionType} transaction object`, async () => { + const { fee, ...remTransactionObject } = transactionObject; + const response = await calculateTransactionFees({ transaction: remTransactionObject }); + const { result } = response; + expect(result).toMap(transactionEstimateFees); + expect(getSumOfMetaValues(result.meta)).toEqual(result.data.transaction.fee.minimum); }); + }); }); it('should return invalid params when called with valid transaction string', async () => { diff --git a/tests/integration/api_v3/rpc/validator.test.js b/tests/integration/api_v3/rpc/validator.test.js index 748e92cca..118a086ec 100644 --- a/tests/integration/api_v3/rpc/validator.test.js +++ b/tests/integration/api_v3/rpc/validator.test.js @@ -15,9 +15,7 @@ */ const config = require('../../../config'); -const { - request, -} = require('../../../helpers/socketIoRpcRequest'); +const { request } = require('../../../helpers/socketIoRpcRequest'); const { invalidParamsSchema, @@ -32,8 +30,8 @@ const { const { invalidAddresses } = require('../constants/invalidInputs'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; -const getValidator = async (params) => request(wsRpcUrl, 'get.validator', params); -const getGenerators = async (params) => request(wsRpcUrl, 'get.generators', params); +const getValidator = async params => request(wsRpcUrl, 'get.validator', params); +const getGenerators = async params => request(wsRpcUrl, 'get.generators', params); describe('get.validator', () => { let refGenerator; @@ -58,14 +56,15 @@ describe('get.validator', () => { it('should return invalid params when requested with invalid address', async () => { for (let i = 0; i < invalidAddresses.length; i++) { - // eslint-disable-next-line no-await-in-loop const response = await getValidator({ address: invalidAddresses[i] }); expect(response).toMap(invalidParamsSchema); } }); it('should return invalid params when requested with address CSV', async () => { - const response = await getValidator({ address: `${refGenerator.address},${refGenerator.address}` }); + const response = await getValidator({ + address: `${refGenerator.address},${refGenerator.address}`, + }); expect(response).toMap(invalidParamsSchema); }); diff --git a/tests/integration/api_v3/rpc/validatorValidateBLSKey.test.js b/tests/integration/api_v3/rpc/validatorValidateBLSKey.test.js index d4b1e9d9b..01e463f05 100644 --- a/tests/integration/api_v3/rpc/validatorValidateBLSKey.test.js +++ b/tests/integration/api_v3/rpc/validatorValidateBLSKey.test.js @@ -19,9 +19,15 @@ const { BLS_KEY, PROOF_OF_POSSESSION } = require('../constants/validatorValidate const { request } = require('../../../helpers/socketIoRpcRequest'); -const { jsonRpcEnvelopeSchema, invalidParamsSchema } = require('../../../schemas/rpcGenerics.schema'); - -const { validateBLSKeySchema, validateBLSKeyGoodRequestSchema } = require('../../../schemas/api_v3/validatorSchema.schema'); +const { + jsonRpcEnvelopeSchema, + invalidParamsSchema, +} = require('../../../schemas/rpcGenerics.schema'); + +const { + validateBLSKeySchema, + validateBLSKeyGoodRequestSchema, +} = require('../../../schemas/api_v3/validatorSchema.schema'); const wsRpcUrl = `${config.SERVICE_ENDPOINT}/rpc-v3`; const validateBLSKey = async params => request(wsRpcUrl, 'post.validator.validate-bls-key', params); diff --git a/tests/integration/api_v3/txUtil/constants.js b/tests/integration/api_v3/txUtil/constants.js index 4108ebdcf..a11064056 100644 --- a/tests/integration/api_v3/txUtil/constants.js +++ b/tests/integration/api_v3/txUtil/constants.js @@ -14,10 +14,135 @@ * */ -const privateKey = 'e655ee58490c66dee3f6761f3b69fdcb65def01615efcddde09c791d6fc2a5223972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c'; +const privateKey = + 'e655ee58490c66dee3f6761f3b69fdcb65def01615efcddde09c791d6fc2a5223972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c'; const publicKey = '3972849f2ab66376a68671c10a00e8b8b67d880434cc65b04c6ed886dfa91c2c'; const address = 'lskguo9kqnea2zsfo3a6qppozsxsg92nuuma3p7ad'; -const schemas = { block: { $id: '/block', type: 'object', properties: { header: { dataType: 'bytes', fieldNumber: 1 }, transactions: { type: 'array', items: { dataType: 'bytes' }, fieldNumber: 2 }, assets: { type: 'array', items: { dataType: 'bytes' }, fieldNumber: 3 } }, required: ['header', 'transactions', 'assets'] }, header: { $id: '/block/header/3/without-id', type: 'object', properties: { version: { dataType: 'uint32', fieldNumber: 1 }, timestamp: { dataType: 'uint32', fieldNumber: 2 }, height: { dataType: 'uint32', fieldNumber: 3 }, previousBlockID: { dataType: 'bytes', fieldNumber: 4 }, generatorAddress: { dataType: 'bytes', fieldNumber: 5, format: 'lisk32' }, transactionRoot: { dataType: 'bytes', fieldNumber: 6 }, assetRoot: { dataType: 'bytes', fieldNumber: 7 }, eventRoot: { dataType: 'bytes', fieldNumber: 8 }, stateRoot: { dataType: 'bytes', fieldNumber: 9 }, maxHeightPrevoted: { dataType: 'uint32', fieldNumber: 10 }, maxHeightGenerated: { dataType: 'uint32', fieldNumber: 11 }, impliesMaxPrevotes: { dataType: 'boolean', fieldNumber: 12 }, validatorsHash: { dataType: 'bytes', fieldNumber: 13 }, aggregateCommit: { type: 'object', fieldNumber: 14, required: ['height', 'aggregationBits', 'certificateSignature'], properties: { height: { dataType: 'uint32', fieldNumber: 1 }, aggregationBits: { dataType: 'bytes', fieldNumber: 2 }, certificateSignature: { dataType: 'bytes', fieldNumber: 3 } } }, signature: { dataType: 'bytes', fieldNumber: 15 } }, required: ['version', 'timestamp', 'height', 'previousBlockID', 'generatorAddress', 'transactionRoot', 'assetRoot', 'eventRoot', 'stateRoot', 'maxHeightPrevoted', 'maxHeightGenerated', 'impliesMaxPrevotes', 'validatorsHash', 'aggregateCommit', 'signature'] }, asset: { $id: '/block/asset/3', type: 'object', required: ['module', 'data'], properties: { module: { dataType: 'string', fieldNumber: 1 }, data: { dataType: 'bytes', fieldNumber: 2 } } }, transaction: { $id: '/lisk/transaction', type: 'object', required: ['module', 'command', 'nonce', 'fee', 'senderPublicKey', 'params'], properties: { module: { dataType: 'string', fieldNumber: 1, minLength: 1, maxLength: 32 }, command: { dataType: 'string', fieldNumber: 2, minLength: 1, maxLength: 32 }, nonce: { dataType: 'uint64', fieldNumber: 3 }, fee: { dataType: 'uint64', fieldNumber: 4 }, senderPublicKey: { dataType: 'bytes', fieldNumber: 5, minLength: 32, maxLength: 32 }, params: { dataType: 'bytes', fieldNumber: 6 }, signatures: { type: 'array', items: { dataType: 'bytes' }, fieldNumber: 7 } } }, event: { $id: '/block/event', type: 'object', required: ['module', 'name', 'data', 'topics', 'height', 'index'], properties: { module: { dataType: 'string', minLength: 1, maxLength: 32, fieldNumber: 1 }, name: { dataType: 'string', minLength: 1, maxLength: 32, fieldNumber: 2 }, data: { dataType: 'bytes', fieldNumber: 3 }, topics: { type: 'array', fieldNumber: 4, maxItems: 4, items: { dataType: 'bytes' } }, height: { dataType: 'uint32', fieldNumber: 5 }, index: { dataType: 'uint32', fieldNumber: 6, maximum: 1073741823 } } }, standardEvent: { $id: '/block/event/standard', type: 'object', required: ['success'], properties: { success: { dataType: 'boolean', fieldNumber: 1 } } }, ccm: { $id: '/modules/interoperability/ccm', type: 'object', required: ['module', 'crossChainCommand', 'nonce', 'fee', 'sendingChainID', 'receivingChainID', 'params', 'status'], properties: { module: { dataType: 'string', minLength: 1, maxLength: 32, fieldNumber: 1 }, crossChainCommand: { dataType: 'string', minLength: 1, maxLength: 32, fieldNumber: 2 }, nonce: { dataType: 'uint64', fieldNumber: 3 }, fee: { dataType: 'uint64', fieldNumber: 4 }, sendingChainID: { dataType: 'bytes', minLength: 4, maxLength: 4, fieldNumber: 5 }, receivingChainID: { dataType: 'bytes', minLength: 4, maxLength: 4, fieldNumber: 6 }, params: { dataType: 'bytes', fieldNumber: 7 }, status: { dataType: 'uint32', fieldNumber: 8 } } } }; +const schemas = { + block: { + $id: '/block', + type: 'object', + properties: { + header: { dataType: 'bytes', fieldNumber: 1 }, + transactions: { type: 'array', items: { dataType: 'bytes' }, fieldNumber: 2 }, + assets: { type: 'array', items: { dataType: 'bytes' }, fieldNumber: 3 }, + }, + required: ['header', 'transactions', 'assets'], + }, + header: { + $id: '/block/header/3/without-id', + type: 'object', + properties: { + version: { dataType: 'uint32', fieldNumber: 1 }, + timestamp: { dataType: 'uint32', fieldNumber: 2 }, + height: { dataType: 'uint32', fieldNumber: 3 }, + previousBlockID: { dataType: 'bytes', fieldNumber: 4 }, + generatorAddress: { dataType: 'bytes', fieldNumber: 5, format: 'lisk32' }, + transactionRoot: { dataType: 'bytes', fieldNumber: 6 }, + assetRoot: { dataType: 'bytes', fieldNumber: 7 }, + eventRoot: { dataType: 'bytes', fieldNumber: 8 }, + stateRoot: { dataType: 'bytes', fieldNumber: 9 }, + maxHeightPrevoted: { dataType: 'uint32', fieldNumber: 10 }, + maxHeightGenerated: { dataType: 'uint32', fieldNumber: 11 }, + impliesMaxPrevotes: { dataType: 'boolean', fieldNumber: 12 }, + validatorsHash: { dataType: 'bytes', fieldNumber: 13 }, + aggregateCommit: { + type: 'object', + fieldNumber: 14, + required: ['height', 'aggregationBits', 'certificateSignature'], + properties: { + height: { dataType: 'uint32', fieldNumber: 1 }, + aggregationBits: { dataType: 'bytes', fieldNumber: 2 }, + certificateSignature: { dataType: 'bytes', fieldNumber: 3 }, + }, + }, + signature: { dataType: 'bytes', fieldNumber: 15 }, + }, + required: [ + 'version', + 'timestamp', + 'height', + 'previousBlockID', + 'generatorAddress', + 'transactionRoot', + 'assetRoot', + 'eventRoot', + 'stateRoot', + 'maxHeightPrevoted', + 'maxHeightGenerated', + 'impliesMaxPrevotes', + 'validatorsHash', + 'aggregateCommit', + 'signature', + ], + }, + asset: { + $id: '/block/asset/3', + type: 'object', + required: ['module', 'data'], + properties: { + module: { dataType: 'string', fieldNumber: 1 }, + data: { dataType: 'bytes', fieldNumber: 2 }, + }, + }, + transaction: { + $id: '/lisk/transaction', + type: 'object', + required: ['module', 'command', 'nonce', 'fee', 'senderPublicKey', 'params'], + properties: { + module: { dataType: 'string', fieldNumber: 1, minLength: 1, maxLength: 32 }, + command: { dataType: 'string', fieldNumber: 2, minLength: 1, maxLength: 32 }, + nonce: { dataType: 'uint64', fieldNumber: 3 }, + fee: { dataType: 'uint64', fieldNumber: 4 }, + senderPublicKey: { dataType: 'bytes', fieldNumber: 5, minLength: 32, maxLength: 32 }, + params: { dataType: 'bytes', fieldNumber: 6 }, + signatures: { type: 'array', items: { dataType: 'bytes' }, fieldNumber: 7 }, + }, + }, + event: { + $id: '/block/event', + type: 'object', + required: ['module', 'name', 'data', 'topics', 'height', 'index'], + properties: { + module: { dataType: 'string', minLength: 1, maxLength: 32, fieldNumber: 1 }, + name: { dataType: 'string', minLength: 1, maxLength: 32, fieldNumber: 2 }, + data: { dataType: 'bytes', fieldNumber: 3 }, + topics: { type: 'array', fieldNumber: 4, maxItems: 4, items: { dataType: 'bytes' } }, + height: { dataType: 'uint32', fieldNumber: 5 }, + index: { dataType: 'uint32', fieldNumber: 6, maximum: 1073741823 }, + }, + }, + standardEvent: { + $id: '/block/event/standard', + type: 'object', + required: ['success'], + properties: { success: { dataType: 'boolean', fieldNumber: 1 } }, + }, + ccm: { + $id: '/modules/interoperability/ccm', + type: 'object', + required: [ + 'module', + 'crossChainCommand', + 'nonce', + 'fee', + 'sendingChainID', + 'receivingChainID', + 'params', + 'status', + ], + properties: { + module: { dataType: 'string', minLength: 1, maxLength: 32, fieldNumber: 1 }, + crossChainCommand: { dataType: 'string', minLength: 1, maxLength: 32, fieldNumber: 2 }, + nonce: { dataType: 'uint64', fieldNumber: 3 }, + fee: { dataType: 'uint64', fieldNumber: 4 }, + sendingChainID: { dataType: 'bytes', minLength: 4, maxLength: 4, fieldNumber: 5 }, + receivingChainID: { dataType: 'bytes', minLength: 4, maxLength: 4, fieldNumber: 6 }, + params: { dataType: 'bytes', fieldNumber: 7 }, + status: { dataType: 'uint32', fieldNumber: 8 }, + }, + }, +}; const tokenTransferParamsSchema = { $id: '/test/lisk/transferCommand', diff --git a/tests/integration/api_v3/txUtil/createTx.js b/tests/integration/api_v3/txUtil/createTx.js index 1c068b602..a8027c739 100644 --- a/tests/integration/api_v3/txUtil/createTx.js +++ b/tests/integration/api_v3/txUtil/createTx.js @@ -19,7 +19,7 @@ const { api } = require('../../../helpers/api'); const { address, privateKey, publicKey, tokenTransferParamsSchema } = require('./constants'); -const createTokenTransferTx = async (authEndpoint) => { +const createTokenTransferTx = async authEndpoint => { const authResponse = await api.get(`${authEndpoint}?address=${address}`); const txBuilder = { @@ -31,18 +31,25 @@ const createTokenTransferTx = async (authEndpoint) => { params: { tokenID: Buffer.from([4, 0, 0, 0, 0, 0, 0, 0]), amount: BigInt('1000000000000'), - recipientAddress: cryptography.address.getAddressFromLisk32Address('lskv6v53emsaen6cwbbk226wusdpa6ojdonunka4x'), + recipientAddress: cryptography.address.getAddressFromLisk32Address( + 'lskv6v53emsaen6cwbbk226wusdpa6ojdonunka4x', + ), data: '', }, }; - const signedTx = transactions.signTransaction(txBuilder, Buffer.from('04000000', 'hex'), Buffer.from(privateKey, 'hex'), tokenTransferParamsSchema); + const signedTx = transactions.signTransaction( + txBuilder, + Buffer.from('04000000', 'hex'), + Buffer.from(privateKey, 'hex'), + tokenTransferParamsSchema, + ); const tx = { ...signedTx, id: signedTx.id.toString('hex'), senderPublicKey: signedTx.senderPublicKey.toString('hex'), - signatures: signedTx.signatures.map((s) => s.toString('hex')), + signatures: signedTx.signatures.map(s => s.toString('hex')), params: { ...signedTx.params, tokenID: signedTx.params.tokenID.toString('hex'), diff --git a/tests/integration/api_v3/txUtil/encodeTx.js b/tests/integration/api_v3/txUtil/encodeTx.js index b85dc63b1..512e7f068 100644 --- a/tests/integration/api_v3/txUtil/encodeTx.js +++ b/tests/integration/api_v3/txUtil/encodeTx.js @@ -14,7 +14,9 @@ * */ const { codec } = require('@liskhq/lisk-codec'); -const { address: { getAddressFromLisk32Address } } = require('@liskhq/lisk-cryptography'); +const { + address: { getAddressFromLisk32Address }, +} = require('@liskhq/lisk-cryptography'); const { validator } = require('@liskhq/lisk-validator'); const { api } = require('../../../helpers/api'); @@ -24,7 +26,7 @@ let metadata; const getTransactionSchema = () => schemas.transaction; -const getTransactionParamsSchema = (transaction) => { +const getTransactionParamsSchema = transaction => { const moduleMetadata = metadata.modules.find(m => m.name === transaction.module); const { params: schema } = moduleMetadata.commands.find(c => c.name === transaction.command); return schema; @@ -54,13 +56,15 @@ const parseInputBySchema = (input, schema) => { if (type === 'array') { acc[key] = currValue.map(item => parseInputBySchema(item, itemsSchema)); } else { - const innerSchema = (typeof currValue === 'object') ? schema.properties[key] : { dataType, format }; + const innerSchema = + typeof currValue === 'object' ? schema.properties[key] : { dataType, format }; acc[key] = parseInputBySchema(currValue, innerSchema); } return acc; }, {}); return formattedObj; - } if (schemaType === 'array') { + } + if (schemaType === 'array') { const formattedArray = input.map(item => parseInputBySchema(item, schemaItemsSchema)); return formattedArray; } @@ -105,10 +109,7 @@ const encodeTransaction = async (transaction, endpoint) => { throw new Error(err); } - const txBuffer = codec.encode( - txSchema, - { ...parsedTx, params: txParamsBuffer }, - ); + const txBuffer = codec.encode(txSchema, { ...parsedTx, params: txParamsBuffer }); return txBuffer.toString('hex'); }; diff --git a/tests/integration/gateway/endpoint.test.js b/tests/integration/gateway/endpoint.test.js index 276548479..416f0b96b 100644 --- a/tests/integration/gateway/endpoint.test.js +++ b/tests/integration/gateway/endpoint.test.js @@ -16,9 +16,7 @@ const config = require('../../config'); const { api } = require('../../helpers/api'); -const { - notFoundSchema, -} = require('../../schemas/httpGenerics.schema'); +const { notFoundSchema } = require('../../schemas/httpGenerics.schema'); const baseUrl = config.SERVICE_ENDPOINT; const endpoint = `${baseUrl}/api`; diff --git a/tests/integration/gateway/rateLimit.test.js b/tests/integration/gateway/rateLimit.test.js index 28973b908..cc3a3768e 100644 --- a/tests/integration/gateway/rateLimit.test.js +++ b/tests/integration/gateway/rateLimit.test.js @@ -17,6 +17,7 @@ jest.setTimeout(2147483647); const axios = require('axios'); const config = require('../../config'); +const { waitMs } = require('../../helpers/utils'); const windowResetTime = 11 * 1000; @@ -31,8 +32,6 @@ const endpoints = [ `${baseUrlV3}/token/constants`, ]; -const delay = (ms = windowResetTime) => new Promise(resolve => setTimeout(resolve, ms)); - describe('Rate limit', () => { let maxRequests; @@ -40,11 +39,11 @@ describe('Rate limit', () => { const response = await axios.get(endpoints[Math.floor(Math.random() * endpoints.length)]); maxRequests = response.headers['x-rate-limit-limit']; - await delay(); + await waitMs(windowResetTime); }); afterEach(async () => { - await delay(); + await waitMs(windowResetTime); }); it('should decrease rate limit remaining after each API request', async () => { @@ -70,7 +69,7 @@ describe('Rate limit', () => { } const responses = await Promise.all(requests); - responses.forEach((response) => { + responses.forEach(response => { expect(response.status).toBe(200); }); } diff --git a/tests/integration/gateway/ready.test.js b/tests/integration/gateway/ready.test.js index facdd9258..edced2fd5 100644 --- a/tests/integration/gateway/ready.test.js +++ b/tests/integration/gateway/ready.test.js @@ -16,14 +16,9 @@ const config = require('../../config'); const { api } = require('../../helpers/api'); -const { - badRequestSchema, - serviceUnavailableSchema, -} = require('../../schemas/httpGenerics.schema'); +const { badRequestSchema, serviceUnavailableSchema } = require('../../schemas/httpGenerics.schema'); -const { - readySchema, -} = require('../../schemas/gateway/ready.schema'); +const { readySchema } = require('../../schemas/gateway/ready.schema'); const baseUrl = config.SERVICE_ENDPOINT; const endpoint = `${baseUrl}/api/ready`; diff --git a/tests/integration/gateway/status.test.js b/tests/integration/gateway/status.test.js index 8397fff90..f2e77505f 100644 --- a/tests/integration/gateway/status.test.js +++ b/tests/integration/gateway/status.test.js @@ -16,13 +16,9 @@ const config = require('../../config'); const { api } = require('../../helpers/api'); -const { - badRequestSchema, -} = require('../../schemas/httpGenerics.schema'); +const { badRequestSchema } = require('../../schemas/httpGenerics.schema'); -const { - statusSchema, -} = require('../../schemas/gateway/status.schema'); +const { statusSchema } = require('../../schemas/gateway/status.schema'); const baseUrl = config.SERVICE_ENDPOINT; const endpoint = `${baseUrl}/api/status`; diff --git a/tests/jest.config.integration.apiv3.sdkv6.js b/tests/jest.config.integration.apiv3.js similarity index 90% rename from tests/jest.config.integration.apiv3.sdkv6.js rename to tests/jest.config.integration.apiv3.js index fc515ea14..34873131e 100644 --- a/tests/jest.config.integration.apiv3.sdkv6.js +++ b/tests/jest.config.integration.apiv3.js @@ -20,6 +20,8 @@ module.exports = { '/integration/api_v3/rpc/*.test.js', '/integration/api_v3/events/*.test.js', '/integration/gateway/*.test.js', + '/integration/api_v3/consistency/http/*.test.js', + '/integration/api_v3/consistency/rpc/*.test.js', ], testEnvironment: 'node', testTimeout: 50000, diff --git a/tests/jest.config.js b/tests/jest.config.js index 5ba444027..b9e6590f4 100644 --- a/tests/jest.config.js +++ b/tests/jest.config.js @@ -22,10 +22,7 @@ module.exports = { ], testEnvironment: 'node', testTimeout: 15000, - setupFilesAfterEnv: [ - 'jest-extended', - '/helpers/setupCustomMatchers.js', - ], + setupFilesAfterEnv: ['jest-extended', '/helpers/setupCustomMatchers.js'], watchPlugins: [ ['jest-watch-toggle-config', { setting: 'verbose' }], ['jest-watch-toggle-config', { setting: 'bail' }], diff --git a/tests/jest.config.regression.js b/tests/jest.config.regression.js index f108dd96c..672aadf3c 100644 --- a/tests/jest.config.regression.js +++ b/tests/jest.config.regression.js @@ -15,16 +15,11 @@ */ module.exports = { verbose: true, - testMatch: [ - '/regression/**/*.test.js', - ], + testMatch: ['/regression/**/*.test.js'], testEnvironment: 'node', testTimeout: 50000, maxWorkers: 1, - setupFilesAfterEnv: [ - 'jest-extended', - '/helpers/setupCustomMatchers.js', - ], + setupFilesAfterEnv: ['jest-extended', '/helpers/setupCustomMatchers.js'], watchPlugins: [ ['jest-watch-toggle-config', { setting: 'verbose' }], ['jest-watch-toggle-config', { setting: 'bail' }], diff --git a/tests/mockserver/lisk_ws_mocks/blocksChange.json b/tests/mockserver/lisk_ws_mocks/blocksChange.json index aae74d828..8bbbc9273 100644 --- a/tests/mockserver/lisk_ws_mocks/blocksChange.json +++ b/tests/mockserver/lisk_ws_mocks/blocksChange.json @@ -1 +1,17 @@ -{"version":1,"reward":"300000000","payloadHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timestamp":96740440,"previousBlock":"8589355646934983231","generatorPublicKey":"460dbadfd6fe57540606fb5a54b480d867bd310ccb2b2086c11fcadda414f70a","blockSignature":"f6c9a476c39eae30a5acf498ff4ec182f295e65e7dd9d9269dff1735a8fa255ebaf8231d4e61d97c2aa4f7ed4a5d39e2c6e33fe7782aebf8845d22541824ee0c","height":8550620,"id":"10861351478921440871","relays":3,"totalAmount":"0","totalFee":"0","numberOfTransactions":0,"payloadLength":0,"transactions":[]} \ No newline at end of file +{ + "version": 1, + "reward": "300000000", + "payloadHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "timestamp": 96740440, + "previousBlock": "8589355646934983231", + "generatorPublicKey": "460dbadfd6fe57540606fb5a54b480d867bd310ccb2b2086c11fcadda414f70a", + "blockSignature": "f6c9a476c39eae30a5acf498ff4ec182f295e65e7dd9d9269dff1735a8fa255ebaf8231d4e61d97c2aa4f7ed4a5d39e2c6e33fe7782aebf8845d22541824ee0c", + "height": 8550620, + "id": "10861351478921440871", + "relays": 3, + "totalAmount": "0", + "totalFee": "0", + "numberOfTransactions": 0, + "payloadLength": 0, + "transactions": [] +} diff --git a/tests/mockserver/lisk_ws_mocks/roundsChange.json b/tests/mockserver/lisk_ws_mocks/roundsChange.json index 2916d36c0..42d143abc 100644 --- a/tests/mockserver/lisk_ws_mocks/roundsChange.json +++ b/tests/mockserver/lisk_ws_mocks/roundsChange.json @@ -1 +1 @@ -{"number":84669} \ No newline at end of file +{ "number": 84669 } diff --git a/tests/mockserver/lisk_ws_mocks/transactionsChange.json b/tests/mockserver/lisk_ws_mocks/transactionsChange.json index 7d93992b3..b2cdce703 100644 --- a/tests/mockserver/lisk_ws_mocks/transactionsChange.json +++ b/tests/mockserver/lisk_ws_mocks/transactionsChange.json @@ -1 +1,14 @@ -{"amount":"10000000","recipientId":"4570231238910956803L","senderPublicKey":"15e16a3a49918d03199bedc5c883f119f830b4ad24ce7a432a10f22864ca6aea","timestamp":96748860,"type":0,"fee":"10000000","asset":{"data":"testing"},"signature":"1847325363f32faa7d961bcbf4a69094746c416e41abfeb44780c3a761373ab599a522471a0142d5c648abe24c6491bf6cf69eb844439126cdd4e63522468d0c","id":"2501715993150071146","senderId":"6511056441219918686L","ready":true,"relays":1} \ No newline at end of file +{ + "amount": "10000000", + "recipientId": "4570231238910956803L", + "senderPublicKey": "15e16a3a49918d03199bedc5c883f119f830b4ad24ce7a432a10f22864ca6aea", + "timestamp": 96748860, + "type": 0, + "fee": "10000000", + "asset": { "data": "testing" }, + "signature": "1847325363f32faa7d961bcbf4a69094746c416e41abfeb44780c3a761373ab599a522471a0142d5c648abe24c6491bf6cf69eb844439126cdd4e63522468d0c", + "id": "2501715993150071146", + "senderId": "6511056441219918686L", + "ready": true, + "relays": 1 +} diff --git a/tests/mockserver/mockserver_lisk.js b/tests/mockserver/mockserver_lisk.js index 844278ac1..c62a76b56 100644 --- a/tests/mockserver/mockserver_lisk.js +++ b/tests/mockserver/mockserver_lisk.js @@ -14,7 +14,7 @@ const proxy = httpProxy.createProxyServer({}); const mockserverName = 'Lisk Core Mock'; const liskCoreServerUrl = process.env.LISK_CORE_HTTP || 'http://127.0.0.1:4000'; const eventFreqMultiplier = 1000; -const port = process.env.PORT || 9007; +const port = Number(process.env.PORT) || 9007; const server = http.createServer((req, res) => { if (req.url.includes('/api/peers')) { @@ -36,11 +36,11 @@ const emitData = [ [() => io.sockets.emit('rounds/change', rounds), 101 * 10], ]; -emitData.forEach((emitItem) => { +emitData.forEach(emitItem => { setInterval(emitItem[0], Math.ceil(emitItem[1] * eventFreqMultiplier)); }); -server.listen(port, undefined, (err) => { +server.listen(port, undefined, err => { if (err) logger.error(err); else logger.info(`Mockserver for ${mockserverName} is listening on port ${port}`); }); diff --git a/tests/package.json b/tests/package.json index 69ac45f51..bafee6cb7 100644 --- a/tests/package.json +++ b/tests/package.json @@ -25,9 +25,8 @@ }, "scripts": { "clean": "rm -rf ./node_modules", - "test": "yarn run test:integration:APIv3:SDKv6", - "test:integration:APIv3:SDKv6": "jest --config=jest.config.integration.apiv3.sdkv6.js", - "test:functional": "jest --config=jest.config.functional.js", + "test": "yarn run test:integration:APIv3", + "test:integration:APIv3": "jest --config=jest.config.integration.apiv3.js --runInBand --testRunner='jest-circus/runner'", "test:regression": "jest --config=jest.config.regression.js", "benchmark:RPC": "artillery run benchmark/socket_rpc_v3.yaml", "benchmark:HTTP": "artillery run benchmark/http_v3.yaml", @@ -35,10 +34,10 @@ "start": "node app.js" }, "dependencies": { - "@liskhq/lisk-client": "^6.0.0-rc.1", - "@liskhq/lisk-codec": "^0.4.0-rc.1", - "@liskhq/lisk-cryptography": "^4.0.0-rc.1", - "@liskhq/lisk-validator": "^0.8.0-rc.1", + "@liskhq/lisk-client": "^6.0.0", + "@liskhq/lisk-codec": "^0.4.0", + "@liskhq/lisk-cryptography": "^4.0.0", + "@liskhq/lisk-validator": "^0.8.0", "async": "^3.2.3", "chai": "^4.3.6", "csv-parse": "^5.0.4", @@ -47,8 +46,8 @@ "jest-watch-typeahead": "^0.4.2", "log4js": "^6.4.7", "mockserver": "^3.1.1", - "popsicle": "^10.0.1", - "semver": "^7.3.7", + "popsicle": "^12.1.0", + "semver": "^7.5.4", "socket.io": "^4.5.3", "socket.io-client": "^4.5.3" }, @@ -56,10 +55,12 @@ "@babel/core": "^7.18.0", "@babel/plugin-transform-runtime": "^7.18.0", "@babel/preset-env": "^7.18.0", - "artillery": "^1.7.9", + "artillery": "^2.0.0-38", + "artillery-engine-socketio-v3": "^1.2.0", "await-to-js": "=2.1.1", - "axios": "^0.21.4", - "jest": "^26.6.3", + "axios": "^1.6.0", + "jest": "^29.7.0", + "jest-circus": "^29.7.0", "jest-extended": "^0.11.5", "joi": "^17.6.0", "moment": "^2.29.4" diff --git a/tests/runIntegrationTestsWithRetry.js b/tests/runIntegrationTestsWithRetry.js new file mode 100644 index 000000000..897dcdbc4 --- /dev/null +++ b/tests/runIntegrationTestsWithRetry.js @@ -0,0 +1,49 @@ +/* + * LiskHQ/lisk-service + * Copyright © 2023 Lisk Foundation + * + * See the LICENSE file at the top-level directory of this distribution + * for licensing information. + * + * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, + * no part of this software, including this file, may be copied, modified, + * propagated, or distributed except according to the terms contained in the + * LICENSE file. + * + * Removal or modification of this copyright notice is prohibited. + * + */ +const { runCLI } = require('jest'); +const jestIntegrationTestsConfig = require('./jest.config.integration.apiv3'); + +const NUM_RETRIES = 20; + +const delay = delayInms => new Promise(resolve => setTimeout(resolve, delayInms)); + +async function runTestsAndRetry(jestConfig, retriesRemaining) { + const { results } = await runCLI(jestConfig, ['integration']); + + // If there were no failures or we're out of retries, return + if (!results.numFailedTests && !results.numFailedTestSuites) { + return Promise.resolve(); + } + if (retriesRemaining === 1) { + return Promise.reject(new Error('Out of retries. Some tests are still failing.')); + } + + // Compile a list of the test suites that failed and tell Jest to only run those files next time + const failedTestPaths = results.testResults + .filter(testResult => testResult.numFailingTests > 0 || testResult.failureMessage) + .map(testResult => testResult.testFilePath); + jestConfig.testMatch = failedTestPaths; + + // Decrement retries remaining and retry + await delay(10000); + retriesRemaining -= 1; + console.info(`Retrying failed tests. ${retriesRemaining} attempts remaining.`); + + // eslint-disable-next-line no-return-await + return await runTestsAndRetry(jestConfig, retriesRemaining); +} + +runTestsAndRetry(jestIntegrationTestsConfig, NUM_RETRIES); diff --git a/tests/schemas/api_v3/allSchemas.schema.js b/tests/schemas/api_v3/allSchemas.schema.js index 827fb505f..40ef2023d 100644 --- a/tests/schemas/api_v3/allSchemas.schema.js +++ b/tests/schemas/api_v3/allSchemas.schema.js @@ -28,8 +28,7 @@ const schema = { const commandsParamsSchemasSchema = { moduleCommand: Joi.string().pattern(regex.MODULE_COMMAND).required(), - // TODO: Update schema to required when all schemas are available from SDK - schema: Joi.object(schema).optional(), + schema: Joi.object(schema).required(), }; const messagesSchema = { @@ -41,15 +40,13 @@ const messagesSchema = { const eventsSchema = { module: Joi.string().pattern(regex.MODULE).required(), name: Joi.string().pattern(regex.EVENT_NAME).required(), - // TODO: Update schema to required when all schemas are available from SDK - schema: Joi.object(schema).optional(), + schema: Joi.object(schema).required(), }; const assetsSchema = { module: Joi.string().pattern(regex.MODULE).required(), version: Joi.string().required(), - // TODO: Update schema to required when all schemas are available from SDK - schema: Joi.object(schema).optional(), + schema: Joi.object(schema).required(), }; const genericSchema = { diff --git a/tests/schemas/api_v3/block.schema.js b/tests/schemas/api_v3/block.schema.js index a0c04e3fa..1589603f4 100644 --- a/tests/schemas/api_v3/block.schema.js +++ b/tests/schemas/api_v3/block.schema.js @@ -38,6 +38,7 @@ const blockSchema = { generator: Joi.object(generator).required(), assetRoot: Joi.string().pattern(regex.HASH_SHA256).required(), stateRoot: Joi.string().pattern(regex.HASH_SHA256).required(), + eventRoot: Joi.string().pattern(regex.HASH_SHA256).required(), transactionRoot: Joi.string().pattern(regex.HASH_SHA256).required(), previousBlockID: Joi.string().pattern(regex.HASH_SHA256).required(), signature: Joi.string().allow(EMPTY_STRING).pattern(regex.HASH_SHA512).required(), @@ -51,8 +52,8 @@ const blockSchema = { maxHeightPrevoted: Joi.number().required(), validatorsHash: Joi.string().pattern(regex.HASH_SHA256).required(), numberOfTransactions: Joi.number().integer().min(0).required(), - numberOfAssets: Joi.number().integer().min(1).required(), - numberOfEvents: Joi.number().integer().min(1).required(), + numberOfAssets: Joi.number().integer().min(0).required(), + numberOfEvents: Joi.number().integer().min(0).required(), }; const block = { diff --git a/tests/schemas/api_v3/blockchainApps.schema.js b/tests/schemas/api_v3/blockchainApps.schema.js index c991dba24..88d5d6689 100644 --- a/tests/schemas/api_v3/blockchainApps.schema.js +++ b/tests/schemas/api_v3/blockchainApps.schema.js @@ -42,17 +42,15 @@ const escrow = { }; const dataSchema = { - chainName: Joi.string().pattern(regex.NAME).required(), + chainName: Joi.string().pattern(regex.CHAIN_NAME).required(), chainID: Joi.string().pattern(regex.CHAIN_ID).required(), - status: Joi.string().valid(...validStatuses).required(), + status: Joi.string() + .valid(...validStatuses) + .required(), address: Joi.string().pattern(regex.ADDRESS_LISK32).required(), lastCertificateHeight: Joi.number().integer().min(0).required(), escrowedLSK: Joi.string().pattern(regex.DIGITS).required(), - lastUpdated: Joi.number() - .integer() - .positive() - .max(getCurrentTimestamp()) - .required(), + lastUpdated: Joi.number().integer().positive().max(getCurrentTimestamp()).required(), escrow: Joi.array().items(escrow).min(1).required(), }; diff --git a/tests/schemas/api_v3/blockchainAppsMetaListSchema.schema.js b/tests/schemas/api_v3/blockchainAppsMetaListSchema.schema.js index e10c74fbe..2ec6dea05 100644 --- a/tests/schemas/api_v3/blockchainAppsMetaListSchema.schema.js +++ b/tests/schemas/api_v3/blockchainAppsMetaListSchema.schema.js @@ -17,7 +17,7 @@ import Joi from 'joi'; import regex from './regex'; const blockchainAppMetaListSchema = { - chainName: Joi.string().pattern(regex.NAME).required(), + chainName: Joi.string().pattern(regex.CHAIN_NAME).required(), chainID: Joi.string().required(), networkType: Joi.string().required(), }; diff --git a/tests/schemas/api_v3/blockchainAppsMetadataSchema.schema.js b/tests/schemas/api_v3/blockchainAppsMetadataSchema.schema.js index 9426d9902..1dd30959f 100644 --- a/tests/schemas/api_v3/blockchainAppsMetadataSchema.schema.js +++ b/tests/schemas/api_v3/blockchainAppsMetadataSchema.schema.js @@ -42,10 +42,12 @@ const appNode = { }; const blockchainAppMetadataSchema = { - chainName: Joi.string().pattern(regex.NAME).required(), + chainName: Joi.string().pattern(regex.CHAIN_NAME).required(), displayName: Joi.string().pattern(regex.NAME).required(), chainID: Joi.string().required(), - status: Joi.string().valid(...validStatuses).required(), + status: Joi.string() + .valid(...validStatuses) + .required(), networkType: Joi.string().pattern(regex.NETWORK).required(), isDefault: Joi.boolean().required(), title: Joi.string().optional(), diff --git a/tests/schemas/api_v3/blockchainAppsTokenMetadataSchema.schema.js b/tests/schemas/api_v3/blockchainAppsTokenMetadataSchema.schema.js index 0c8302d22..2115d1f8e 100644 --- a/tests/schemas/api_v3/blockchainAppsTokenMetadataSchema.schema.js +++ b/tests/schemas/api_v3/blockchainAppsTokenMetadataSchema.schema.js @@ -30,7 +30,7 @@ const denomUnit = { }; const blockchainAppsTokenMetadataSchema = { - chainName: Joi.string().pattern(regex.NAME).required(), + chainName: Joi.string().pattern(regex.CHAIN_NAME).required(), chainID: Joi.string().required(), tokenName: Joi.string().pattern(regex.NAME).required(), tokenID: Joi.string().required(), diff --git a/tests/schemas/api_v3/constants/schemas.js b/tests/schemas/api_v3/constants/schemas.js index 7111b662e..c76d85cdf 100644 --- a/tests/schemas/api_v3/constants/schemas.js +++ b/tests/schemas/api_v3/constants/schemas.js @@ -36,11 +36,7 @@ const blockSchema = { fieldNumber: 3, }, }, - required: [ - 'header', - 'transactions', - 'assets', - ], + required: ['header', 'transactions', 'assets'], }; const headerSchema = { @@ -103,11 +99,7 @@ const headerSchema = { aggregateCommit: { type: 'object', fieldNumber: 14, - required: [ - 'height', - 'aggregationBits', - 'certificateSignature', - ], + required: ['height', 'aggregationBits', 'certificateSignature'], properties: { height: { dataType: 'uint32', @@ -150,10 +142,7 @@ const headerSchema = { const assetSchema = { $id: '/block/asset/3', type: 'object', - required: [ - 'module', - 'data', - ], + required: ['module', 'data'], properties: { module: { dataType: 'string', @@ -169,14 +158,7 @@ const assetSchema = { const transactionSchema = { $id: '/lisk/transaction', type: 'object', - required: [ - 'module', - 'command', - 'nonce', - 'fee', - 'senderPublicKey', - 'params', - ], + required: ['module', 'command', 'nonce', 'fee', 'senderPublicKey', 'params'], properties: { module: { dataType: 'string', @@ -221,14 +203,7 @@ const transactionSchema = { const eventSchema = { $id: '/block/event', type: 'object', - required: [ - 'module', - 'name', - 'data', - 'topics', - 'height', - 'index', - ], + required: ['module', 'name', 'data', 'topics', 'height', 'index'], properties: { module: { dataType: 'string', @@ -269,9 +244,7 @@ const eventSchema = { const standardEventSchema = { $id: '/block/event/standard', type: 'object', - required: [ - 'success', - ], + required: ['success'], properties: { success: { dataType: 'boolean', @@ -345,13 +318,7 @@ const ccmSchema = { const messageSchema = { $id: '/auth/command/regMultisigMsg', type: 'object', - required: [ - 'address', - 'nonce', - 'numberOfSignatures', - 'mandatoryKeys', - 'optionalKeys', - ], + required: ['address', 'nonce', 'numberOfSignatures', 'mandatoryKeys', 'optionalKeys'], properties: { address: { dataType: 'bytes', diff --git a/tests/schemas/api_v3/constants/transactions.js b/tests/schemas/api_v3/constants/transactions.js index 8c3ba3ba1..1b0a96520 100644 --- a/tests/schemas/api_v3/constants/transactions.js +++ b/tests/schemas/api_v3/constants/transactions.js @@ -14,11 +14,7 @@ * */ -const TRANSACTION_EXECUTION_STATUSES = [ - 'pending', - 'successful', - 'failed', -]; +const TRANSACTION_EXECUTION_STATUSES = ['pending', 'successful', 'failed']; module.exports = { TRANSACTION_EXECUTION_STATUSES, diff --git a/tests/schemas/api_v3/event.schema.js b/tests/schemas/api_v3/event.schema.js index e1443c427..468354f02 100644 --- a/tests/schemas/api_v3/event.schema.js +++ b/tests/schemas/api_v3/event.schema.js @@ -20,11 +20,9 @@ const regex = require('./regex'); const getCurrentTime = () => Math.floor(Date.now() / 1000); const block = { - id: Joi.string().pattern(regex.HASH_SHA256) - .required(), + id: Joi.string().pattern(regex.HASH_SHA256).required(), height: Joi.number().integer().min(0).required(), - timestamp: Joi.number().integer().positive().max(getCurrentTime()) - .required(), + timestamp: Joi.number().integer().positive().max(getCurrentTime()).required(), }; const eventSchema = { diff --git a/tests/schemas/api_v3/export.schema.js b/tests/schemas/api_v3/export.schema.js index 8c26dbb32..6bf0ffe2e 100644 --- a/tests/schemas/api_v3/export.schema.js +++ b/tests/schemas/api_v3/export.schema.js @@ -19,13 +19,12 @@ const regex = require('./regex'); const exportSchemaAccepted = { address: Joi.string().pattern(regex.ADDRESS_LISK32).required(), - publicKey: Joi.string().pattern(regex.PUBLIC_KEY).required(), + publicKey: Joi.string().pattern(regex.PUBLIC_KEY).optional(), interval: Joi.string().pattern(regex.DATE_INTERVAL).required(), }; const exportSchema = { ...exportSchemaAccepted, - fileName: Joi.string().pattern(regex.FILE_NAME).required(), fileUrl: Joi.string().pattern(regex.FILE_URL).required(), }; diff --git a/tests/schemas/api_v3/fees.schema.js b/tests/schemas/api_v3/fees.schema.js index 5665121e0..d34b5abc3 100644 --- a/tests/schemas/api_v3/fees.schema.js +++ b/tests/schemas/api_v3/fees.schema.js @@ -31,11 +31,9 @@ const feeEstimateSchema = { }; const metaSchema = { - lastUpdate: Joi.number().integer().min(0).max(getCurrentTimestamp()) - .required(), + lastUpdate: Joi.number().integer().min(0).max(getCurrentTimestamp()).required(), lastBlockHeight: Joi.number().integer().min(1).required(), - lastBlockID: Joi.string().min(1).max(64).pattern(regex.HASH_SHA256) - .required(), + lastBlockID: Joi.string().min(1).max(64).pattern(regex.HASH_SHA256).required(), }; const goodRequestSchema = { diff --git a/tests/schemas/api_v3/generator.schema.js b/tests/schemas/api_v3/generator.schema.js index a2dcb835d..b98a33927 100644 --- a/tests/schemas/api_v3/generator.schema.js +++ b/tests/schemas/api_v3/generator.schema.js @@ -16,22 +16,16 @@ import Joi from 'joi'; import regex from './regex'; -const GENERATOR_STATUSES = [ - 'active', - 'standby', - 'punished', - 'banned', - 'ineligible', -]; - -const getCurrentTimestamp = () => Math.floor(Date.now() / 1000); +const GENERATOR_STATUSES = ['active', 'standby', 'punished', 'banned', 'ineligible']; const generatorDataSchema = { address: Joi.string().pattern(regex.ADDRESS_LISK32).required(), name: Joi.string().pattern(regex.NAME).optional(), publicKey: Joi.string().pattern(regex.PUBLIC_KEY).allow(null).optional(), - nextAllocatedTime: Joi.number().integer().min(getCurrentTimestamp() - 20).required(), - status: Joi.string().valid(...GENERATOR_STATUSES).required(), + nextAllocatedTime: Joi.number().integer().required(), + status: Joi.string() + .valid(...GENERATOR_STATUSES) + .required(), }; const generatorResponseSchema = { diff --git a/tests/schemas/api_v3/indexStatus.schema.js b/tests/schemas/api_v3/indexStatus.schema.js index 8e7c097d2..70f10bb1f 100644 --- a/tests/schemas/api_v3/indexStatus.schema.js +++ b/tests/schemas/api_v3/indexStatus.schema.js @@ -28,8 +28,7 @@ const indexStatusResponseSchema = { }; const indexStatusMetaResponseSchema = { - lastUpdate: Joi.number().integer().positive().max(getCurrentTime()) - .required(), + lastUpdate: Joi.number().integer().positive().max(getCurrentTime()).required(), }; const goodResponseSchema = { diff --git a/tests/schemas/api_v3/networkPeer.schema.js b/tests/schemas/api_v3/networkPeer.schema.js index fed0107d4..788ac4a63 100644 --- a/tests/schemas/api_v3/networkPeer.schema.js +++ b/tests/schemas/api_v3/networkPeer.schema.js @@ -22,15 +22,21 @@ const allowedPeerStateNames = ['connected', 'disconnected', 'any']; const locationSchema = { countryCode: Joi.string().length(2).optional(), - latitude: Joi.string().pattern(/^[0-9.-]+$/).optional(), - longitude: Joi.string().pattern(/^[0-9.-]+$/).optional(), + latitude: Joi.string() + .pattern(/^[0-9.-]+$/) + .optional(), + longitude: Joi.string() + .pattern(/^[0-9.-]+$/) + .optional(), }; const networkPeerSchema = { ip: Joi.string().ip({ version: 'ipv4', cidr: 'forbidden' }).required(), port: Joi.number().port().optional(), networkVersion: Joi.string().required(), - state: Joi.string().valid(...allowedPeerStateNames).required(), + state: Joi.string() + .valid(...allowedPeerStateNames) + .required(), height: Joi.number().positive().optional(), chainID: Joi.string().pattern(regex.CHAIN_ID).required(), location: Joi.object(locationSchema).optional(), diff --git a/tests/schemas/api_v3/networkStatus.schema.js b/tests/schemas/api_v3/networkStatus.schema.js index e46b75318..725546bc6 100644 --- a/tests/schemas/api_v3/networkStatus.schema.js +++ b/tests/schemas/api_v3/networkStatus.schema.js @@ -16,8 +16,6 @@ import Joi from 'joi'; import regex from './regex'; -const getCurrentTimestamp = () => Math.floor(Date.now() / 1000); - const genesisBlockSchema = { fromFile: Joi.string().required(), }; @@ -46,8 +44,7 @@ const networkStatusSchema = { version: Joi.string().pattern(regex.SEMVER).required(), networkVersion: Joi.string().required(), chainID: Joi.string().pattern(regex.CHAIN_ID).required(), - lastBlockID: Joi.string().pattern(regex.HASH_SHA256) - .required(), + lastBlockID: Joi.string().pattern(regex.HASH_SHA256).required(), height: Joi.number().integer().min(0).required(), finalizedHeight: Joi.number().min(0).integer().required(), syncing: Joi.boolean().required(), @@ -60,11 +57,9 @@ const networkStatusSchema = { }; const metaSchema = { - lastUpdate: Joi.number().integer().min(0).max(getCurrentTimestamp()) - .required(), + lastUpdate: Joi.number().integer().min(0).required(), lastBlockHeight: Joi.number().integer().min(0).required(), - lastBlockID: Joi.string().min(1).max(64).pattern(regex.HASH_SHA256) - .required(), + lastBlockID: Joi.string().min(1).max(64).pattern(regex.HASH_SHA256).required(), }; module.exports = { diff --git a/tests/schemas/api_v3/posClaimableRewards.schema.js b/tests/schemas/api_v3/posClaimableRewards.schema.js index d35535e84..55c6c0d14 100644 --- a/tests/schemas/api_v3/posClaimableRewards.schema.js +++ b/tests/schemas/api_v3/posClaimableRewards.schema.js @@ -12,7 +12,7 @@ * * Removal or modification of this copyright notice is prohibited. * -*/ + */ import Joi from 'joi'; const regex = require('./regex'); diff --git a/tests/schemas/api_v3/posRewardsLocked.schema.js b/tests/schemas/api_v3/posRewardsLocked.schema.js index fb152a69f..a669c7aa1 100644 --- a/tests/schemas/api_v3/posRewardsLocked.schema.js +++ b/tests/schemas/api_v3/posRewardsLocked.schema.js @@ -12,7 +12,7 @@ * * Removal or modification of this copyright notice is prohibited. * -*/ + */ import Joi from 'joi'; const regex = require('./regex'); diff --git a/tests/schemas/api_v3/regex.js b/tests/schemas/api_v3/regex.js index ad473694f..d32c265b4 100644 --- a/tests/schemas/api_v3/regex.js +++ b/tests/schemas/api_v3/regex.js @@ -14,20 +14,26 @@ * */ const ADDRESS_LISK32 = /^lsk[a-hjkm-z2-9]{38}$/; -const IP = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; +const IP = + /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; const HASH_SHA256 = /^\b([A-Fa-f0-9]){64}\b$/; const HASH_SHA512 = /^\b([A-Fa-f0-9]){128}\b$/; -const SEMVER = /^([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/; +const SEMVER = + /^([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/; const PUBLIC_KEY = HASH_SHA256; const EVENT_NAME = /^[\w!@$&. ]+$/; -const NAME = /^[\w!@$&.]{1,20}$/; -const DATE_INTERVAL = /^\b((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))(:((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31)))?\b$/; -const FILE_NAME = /^\btransactions_([a-fA-F0-9]{8})_(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.csv\b$/; -const FILE_URL = /^\/api\/v3\/exports\/transactions_([a-fA-F0-9]{8})_(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.csv$/; +const NAME = /^[a-z0-9!@$&_.]{1,20}$/; +const DATE_INTERVAL = + /^\b((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))(:((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31)))?\b$/; +const FILE_NAME = + /^\btransactions_([a-fA-F0-9]{8})_(lsk[a-hjkm-z2-9]{38})_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))_((\d{4})-((1[012])|(0?[1-9]))-(([012][1-9])|([123]0)|31))\.csv\b$/; +const FILE_URL = + /^\/api\/v3\/export\/download\?filename=transactions_([a-fA-F0-9]{8})_(lsk[a-hjkm-z2-9]{38})_(\d{4}-\d{2}-\d{2})_(\d{4}-\d{2}-\d{2})\.xlsx$/; const NETWORK = /^\b(?:mainnet|testnet|betanet|devnet){1}\b$/; const MODULE = /^[0-9a-zA-Z]{1,32}$/; const MODULE_COMMAND = /^[0-9a-zA-Z]{1,32}:[0-9a-zA-Z]{1,32}$/; const CHAIN_ID = /^\b[a-fA-F0-9]{8}\b$/; +const CHAIN_NAME = /^[A-Za-z0-9!@$&_.]{1,32}$/; const TOKEN_ID = /^\b[a-fA-F0-9]{16}\b$/; const TOKEN_ID_PATTERN = /^[a-fA-F0-9]{8}[*]{8}$/; const DURATION = /^\d{4}-\d{2}(?:-\d{2})?$/; @@ -61,6 +67,7 @@ module.exports = { TOKEN_ID, TOKEN_ID_PATTERN, CHAIN_ID, + CHAIN_NAME, DURATION, DIGITS, FLOATING_POINT, diff --git a/tests/schemas/api_v3/spec.schema.js b/tests/schemas/api_v3/spec.schema.js index c5841a7ec..a5e3568e9 100644 --- a/tests/schemas/api_v3/spec.schema.js +++ b/tests/schemas/api_v3/spec.schema.js @@ -14,7 +14,7 @@ * */ import Joi from 'joi'; -// import regex from './regex'; +import regex from './regex'; const SWAGGER_VERSION = ['2.0']; const SWAGGER_PARAMETER_BODY = ['body']; @@ -92,14 +92,17 @@ const schema = { minProperties: Joi.number().integer().min(0).optional(), required: Joi.array().items(Joi.string().optional()).optional(), enum: Joi.array().items(Joi.string().required()).optional(), - additionalProperties: Joi.alternatives(Joi.boolean().optional(), Joi.string().optional()) - .optional(), - type: Joi.alternatives(Joi.string().valid(...TYPES_ENUM).optional(), Joi.array().optional()) - .optional(), - items: Joi.alternatives( - Joi.object().optional(), - Joi.array().min(1).optional(), + additionalProperties: Joi.alternatives( + Joi.boolean().optional(), + Joi.string().optional(), ).optional(), + type: Joi.alternatives( + Joi.string() + .valid(...TYPES_ENUM) + .optional(), + Joi.array().optional(), + ).optional(), + items: Joi.alternatives(Joi.object().optional(), Joi.array().min(1).optional()).optional(), allOf: Joi.array().min(1).optional(), properties: Joi.object().optional(), discriminator: Joi.string().optional(), @@ -115,8 +118,12 @@ const fileSchema = { description: Joi.string().optional(), default: Joi.string().optional(), format: Joi.string().optional(), - type: Joi.alternatives(Joi.string().valid(...TYPES_ENUM).optional(), Joi.array().optional()) - .required(), + type: Joi.alternatives( + Joi.string() + .valid(...TYPES_ENUM) + .optional(), + Joi.array().optional(), + ).required(), readOnly: Joi.boolean().optional(), externalDocs: Joi.string().optional(), example: Joi.object().optional(), @@ -138,24 +145,33 @@ const commonProps = { minItems: Joi.number().integer().min(0).optional(), uniqueItems: Joi.boolean().optional(), enum: Joi.array().items(Joi.string().required()).optional(), - type: Joi.alternatives(Joi.string().valid(...TYPES_ENUM).optional(), Joi.array().optional()) - .required(), - items: Joi.alternatives(Joi.string().optional(), Joi.array().min(1).optional()) + type: Joi.alternatives( + Joi.string() + .valid(...TYPES_ENUM) + .optional(), + Joi.array().optional(), + ).required(), + items: Joi.alternatives(Joi.string().optional(), Joi.array().min(1).optional()).optional(), + collectionFormat: Joi.string() + .valid(...COLLECTION_FORMAT) .optional(), - collectionFormat: Joi.string().valid(...COLLECTION_FORMAT).optional(), }; const response = { description: Joi.string().required(), - schema: Joi.alternatives(Joi.object(schema).optional(), Joi.object(fileSchema).optional()) - .optional(), + schema: Joi.alternatives( + Joi.object(schema).optional(), + Joi.object(fileSchema).optional(), + ).optional(), headers: Joi.object(commonProps).optional(), examples: Joi.object().optional(), }; const bodyParameter = { name: Joi.string().required(), - in: Joi.string().valid(...SWAGGER_PARAMETER_BODY).required(), + in: Joi.string() + .valid(...SWAGGER_PARAMETER_BODY) + .required(), schema: Joi.object(schema).required(), description: Joi.string().optional(), required: Joi.boolean().optional(), @@ -164,14 +180,18 @@ const bodyParameter = { const headerParameterSubSchema = { ...commonProps, name: Joi.string().required(), - in: Joi.string().valid(...SWAGGER_PARAMETER_HEADER).required(), + in: Joi.string() + .valid(...SWAGGER_PARAMETER_HEADER) + .required(), required: Joi.boolean().optional(), }; const queryParameterSubSchema = { ...commonProps, name: Joi.string().required(), - in: Joi.string().valid(...SWAGGER_PARAMETER_QUERY).required(), + in: Joi.string() + .valid(...SWAGGER_PARAMETER_QUERY) + .required(), allowEmptyValue: Joi.boolean().optional(), required: Joi.boolean().optional(), }; @@ -179,7 +199,9 @@ const queryParameterSubSchema = { const formDataParameterSubSchema = { ...commonProps, name: Joi.string().required(), - in: Joi.string().valid(...SWAGGER_PARAMETER_FORM).required(), + in: Joi.string() + .valid(...SWAGGER_PARAMETER_FORM) + .required(), allowEmptyValue: Joi.boolean().optional(), required: Joi.boolean().optional(), }; @@ -187,7 +209,9 @@ const formDataParameterSubSchema = { const pathParameterSubSchema = { ...commonProps, name: Joi.string().required(), - in: Joi.string().valid(...SWAGGER_PARAMETER_PATH).required(), + in: Joi.string() + .valid(...SWAGGER_PARAMETER_PATH) + .required(), required: Joi.boolean().optional(), }; @@ -200,9 +224,7 @@ const nonBodyParameter = Joi.alternatives( const parameter = Joi.alternatives(bodyParameter, nonBodyParameter.optional()).optional(); -// TODO: Enable when swagger response key is mapped as per schema -// const responseKey = Joi.string().pattern(regex.SWAGGER_RESPONSE_KEY).min(1).required(); -const responseKey = Joi.string().min(1).required(); +const responseKey = Joi.string().pattern(regex.SWAGGER_RESPONSE_KEY).min(1).required(); const responseEntry = Joi.alternatives( Joi.object(response).optional(), Joi.object(jsonReference).optional(), @@ -216,7 +238,13 @@ const pathEntries = { responses: Joi.object().pattern(responseKey, responseEntry).optional(), operationId: Joi.string().optional(), deprecated: Joi.boolean().optional(), - schemes: Joi.array().items(Joi.string().valid(...SWAGGER_SCHEMES_LIST).required()).optional(), + schemes: Joi.array() + .items( + Joi.string() + .valid(...SWAGGER_SCHEMES_LIST) + .required(), + ) + .optional(), externalDocs: Joi.object(externalDocs).optional(), produces: Joi.string().optional(), consumes: Joi.string().optional(), @@ -246,11 +274,19 @@ const paramEntry = Joi.alternatives(bodyParameter, nonBodyParameter).optional(); // Schema specified according to https://github.com/OAI/OpenAPI-Specification/blob/36a3a67264cc1c4f1eff110cea3ebfe679435108/schemas/v2.0/schema.json const specResponseSchema = { - swagger: Joi.string().valid(...SWAGGER_VERSION).required(), + swagger: Joi.string() + .valid(...SWAGGER_VERSION) + .required(), info: Joi.object(info).required(), host: Joi.string().optional(), basePath: Joi.string().optional(), - schemes: Joi.array().items(Joi.string().valid(...SWAGGER_SCHEMES_LIST).required()).optional(), + schemes: Joi.array() + .items( + Joi.string() + .valid(...SWAGGER_SCHEMES_LIST) + .required(), + ) + .optional(), consumes: Joi.string().optional(), produces: Joi.string().optional(), paths: Joi.object().pattern(pathKey, pathEntry).required(), diff --git a/tests/schemas/api_v3/tokenTopBalances.schema.js b/tests/schemas/api_v3/tokenTopBalances.schema.js index 8b5115707..3fa75a2f2 100644 --- a/tests/schemas/api_v3/tokenTopBalances.schema.js +++ b/tests/schemas/api_v3/tokenTopBalances.schema.js @@ -30,7 +30,7 @@ const knowledgeSchema = { const tokenTopBalancesSchema = { address: Joi.string().pattern(regex.ADDRESS_LISK32).required(), - publicKey: Joi.string().pattern(regex.PUBLIC_KEY), + publicKey: Joi.string().pattern(regex.PUBLIC_KEY).allow(null), name: Joi.string().pattern(regex.NAME), balance: Joi.string().required(), knowledge: Joi.object(knowledgeSchema).required(), diff --git a/tests/schemas/api_v3/transaction.schema.js b/tests/schemas/api_v3/transaction.schema.js index 6845b07b3..5ec465488 100644 --- a/tests/schemas/api_v3/transaction.schema.js +++ b/tests/schemas/api_v3/transaction.schema.js @@ -24,13 +24,10 @@ const sender = { name: Joi.string().pattern(regex.NAME).allow(null).optional(), }; -const getCurrentTime = () => Math.floor(Date.now() / 1000); - const block = { id: Joi.string().pattern(regex.HASH_SHA256).required(), height: Joi.number().integer().min(1).required(), - timestamp: Joi.number().integer().positive().max(getCurrentTime()) - .required(), + timestamp: Joi.number().integer().positive().required(), isFinal: Joi.boolean().required(), }; @@ -49,24 +46,31 @@ const pendingTransactionSchema = { moduleCommand: Joi.string().pattern(regex.MODULE_COMMAND).required(), nonce: Joi.string().required(), fee: Joi.string().required(), + minFee: Joi.string().required(), size: Joi.number().integer().positive().required(), sender: Joi.object(sender).required(), params: Joi.object().required(), + signatures: Joi.array() + .items(Joi.string().pattern(regex.HASH_SHA512).allow('').required()) + .required(), executionStatus: Joi.string().valid('pending').required(), meta: Joi.object(transactionMetaSchema).optional(), - minFee: Joi.string().required(), }; const transactionSchema = { ...pendingTransactionSchema, block: Joi.object(block).required(), index: Joi.number().integer().min(0).required(), - executionStatus: Joi.string().valid(...TRANSACTION_EXECUTION_STATUSES.filter(status => status !== 'pending')).required(), + executionStatus: Joi.string() + .valid(...TRANSACTION_EXECUTION_STATUSES.filter(status => status !== 'pending')) + .required(), }; const postTransactionSchema = { transactionID: Joi.string().required(), - message: Joi.string().valid('Transaction payload was successfully passed to the network node.').required(), + message: Joi.string() + .valid('Transaction payload was successfully passed to the network node.') + .required(), }; module.exports = { diff --git a/tests/schemas/api_v3/transactionStatistics.schema.js b/tests/schemas/api_v3/transactionStatistics.schema.js index c90bf7e5f..c176201ee 100644 --- a/tests/schemas/api_v3/transactionStatistics.schema.js +++ b/tests/schemas/api_v3/transactionStatistics.schema.js @@ -41,7 +41,9 @@ const transactionStatisticsSchema = { }; const durationSchema = { - format: Joi.string().valid(...allowedDateFormats).required(), + format: Joi.string() + .valid(...allowedDateFormats) + .required(), from: Joi.string().pattern(regex.DURATION).required(), to: Joi.string().pattern(regex.DURATION).required(), }; diff --git a/tests/schemas/api_v3/transactionsDryRun.schema.js b/tests/schemas/api_v3/transactionsDryRun.schema.js index be3ab7dd7..1615cb447 100644 --- a/tests/schemas/api_v3/transactionsDryRun.schema.js +++ b/tests/schemas/api_v3/transactionsDryRun.schema.js @@ -16,10 +16,13 @@ import Joi from 'joi'; const regex = require('./regex'); -const { TRANSACTION_VERIFY_RESULT } = require('../../../services/blockchain-indexer/shared/constants'); +const { + TRANSACTION_VERIFY_RESULT, +} = require('../../../services/blockchain-indexer/shared/constants'); -const TRANSACTION_VERIFY_STATUSES = Object - .keys(TRANSACTION_VERIFY_RESULT).map(e => e.toLowerCase()); +const TRANSACTION_VERIFY_STATUSES = Object.keys(TRANSACTION_VERIFY_RESULT).map(e => + e.toLowerCase(), +); const event = { data: Joi.object().required(), @@ -38,24 +41,32 @@ const eventSchemaWithSkipDecode = { const dryrunTransactionSuccessResponseSchema = { result: Joi.number().integer().valid(TRANSACTION_VERIFY_RESULT.VALID).required(), - status: Joi.string().valid(...TRANSACTION_VERIFY_STATUSES).required(), + status: Joi.string() + .valid(...TRANSACTION_VERIFY_STATUSES) + .required(), events: Joi.array().items(Joi.object(event).required()).min(1).required(), }; const dryrunTxSuccessSchemaWithSkipDecode = { result: Joi.number().integer().valid(TRANSACTION_VERIFY_RESULT.VALID).required(), - status: Joi.string().valid(...TRANSACTION_VERIFY_STATUSES).required(), + status: Joi.string() + .valid(...TRANSACTION_VERIFY_STATUSES) + .required(), events: Joi.array().items(Joi.object(eventSchemaWithSkipDecode).required()).min(1).required(), }; const dryrunTransactionPendingResponseSchema = { result: Joi.number().integer().valid(TRANSACTION_VERIFY_RESULT.PENDING).required(), - status: Joi.string().valid(...TRANSACTION_VERIFY_STATUSES).required(), + status: Joi.string() + .valid(...TRANSACTION_VERIFY_STATUSES) + .required(), events: Joi.array().items(Joi.object(event).required()).min(1).required(), }; const dryrunTransactionInvalidResponseSchema = { result: Joi.number().integer().valid(TRANSACTION_VERIFY_RESULT.INVALID).required(), - status: Joi.string().valid(...TRANSACTION_VERIFY_STATUSES).required(), + status: Joi.string() + .valid(...TRANSACTION_VERIFY_STATUSES) + .required(), events: Joi.array().length(0).required(), errorMessage: Joi.string().required(), }; @@ -69,9 +80,7 @@ module.exports = { dryrunTransactionSuccessResponseSchema: Joi.object( dryrunTransactionSuccessResponseSchema, ).required(), - dryrunTxSuccessSchemaWithSkipDecode: Joi.object( - dryrunTxSuccessSchemaWithSkipDecode, - ).required(), + dryrunTxSuccessSchemaWithSkipDecode: Joi.object(dryrunTxSuccessSchemaWithSkipDecode).required(), dryrunTransactionPendingResponseSchema: Joi.object( dryrunTransactionPendingResponseSchema, ).required(), diff --git a/tests/schemas/api_v3/transactionsEstimateFees.schema.js b/tests/schemas/api_v3/transactionsEstimateFees.schema.js index e8eded8f6..eaf8b4017 100644 --- a/tests/schemas/api_v3/transactionsEstimateFees.schema.js +++ b/tests/schemas/api_v3/transactionsEstimateFees.schema.js @@ -49,18 +49,16 @@ const dataSchema = { const minimumFeeBreakdownSchema = { byteFee: Joi.string().pattern(regex.DIGITS).required(), - additionalFees: Joi.object().pattern( - Joi.string().required(), - Joi.string().pattern(regex.DIGITS).required(), - ).optional(), + additionalFees: Joi.object() + .pattern(Joi.string().required(), Joi.string().pattern(regex.DIGITS).required()) + .optional(), }; const metaMessageFeeSchema = { ccmByteFee: Joi.string().pattern(regex.DIGITS).required(), - additionalFees: Joi.object().pattern( - Joi.string().required(), - Joi.string().pattern(regex.DIGITS).required(), - ).optional(), + additionalFees: Joi.object() + .pattern(Joi.string().required(), Joi.string().pattern(regex.DIGITS).required()) + .optional(), }; const breakdownFeeSchema = { diff --git a/tests/setup.js b/tests/setup.js index 5b769cc01..029fc3bf9 100644 --- a/tests/setup.js +++ b/tests/setup.js @@ -16,4 +16,6 @@ const { closeAll } = require('./helpers/socketIoRpcRequest'); // eslint-disable-next-line mocha/no-top-level-hooks -afterAll(async () => { closeAll(); }); +afterAll(async () => { + closeAll(); +}); diff --git a/tests/yarn.lock b/tests/yarn.lock index b0b8c986a..5b997ab66 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -10,46 +10,64 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@artilleryio/int-commons@2.0.4", "@artilleryio/int-commons@latest": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@artilleryio/int-commons/-/int-commons-2.0.4.tgz#a7de48ee3fda1d19a16867df7eac46961346b2e4" + integrity sha512-pi4hkKhpT7pyydH7GxZGWnYM+a2fM1WysCDlKsH7UJTy2xqlqmujd5iY+G/74NHsxQUxd8osAHFu+bnkbjMinw== dependencies: - "@babel/highlight" "^7.22.13" + async "^2.6.4" + cheerio "^1.0.0-rc.10" + debug "^4.3.1" + deep-for-each "^3.0.0" + espree "^9.4.1" + jsonpath-plus "^7.2.0" + lodash "^4.17.19" + ms "^2.1.3" + +"@artilleryio/int-core@latest": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@artilleryio/int-core/-/int-core-2.2.2.tgz#59f72cae160638142bf39288237a9e165785d0b6" + integrity sha512-BYbheLZb7m+DrQt2OTM4uaX6IWbjYf/D9ZVi49WW5QdDOTsnWCjOES46iR0lM2hWKf0qF2ESajkDVm1ithvXOw== + dependencies: + "@artilleryio/int-commons" "2.0.4" + "@artilleryio/sketches-js" "^2.1.1" + agentkeepalive "^4.1.0" + arrivals "^2.1.2" + async "^2.6.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" + integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.18.0", "@babel/core@^7.7.5": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.15.tgz#15d4fd03f478a459015a4b94cfbb3bd42c48d2f4" + integrity sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/generator" "^7.22.15" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/helper-module-transforms" "^7.22.15" + "@babel/helpers" "^7.22.15" + "@babel/parser" "^7.22.15" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" - convert-source-map "^2.0.0" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" + convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" + integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.22.15" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -61,14 +79,14 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== @@ -79,7 +97,7 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": +"@babel/helper-create-class-features-plugin@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== @@ -94,7 +112,7 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -103,10 +121,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" + integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -141,17 +159,17 @@ dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz#40ad2f6950f143900e9c1c72363c0b431a606082" + integrity sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -172,18 +190,18 @@ integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== "@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" "@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-member-expression-to-functions" "^7.22.15" @@ -210,10 +228,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" @@ -234,44 +252,52 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" + integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" "@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" + integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15": + version "7.22.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" + integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" + integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -320,17 +346,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -348,6 +374,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -404,6 +437,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" @@ -412,211 +452,211 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" + integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-block-scoping@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" + integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz#73380c632c095b03e8503c24fd38f95ad41ffacb" + integrity sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" "@babel/plugin-transform-destructuring@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" + integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" + integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-modules-amd@^7.22.5": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" + integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" "@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" + integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -627,210 +667,211 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" + integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.18.0": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz#3a625c4c05a39e932d7d34f5d4895cdd0172fdc9" - integrity sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.4.tgz#5132b388580002fc5cb7c84eccfb968acdc231cb" + integrity sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw== dependencies: "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.18.0": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.15.tgz#142716f8e00bc030dae5b2ac6a46fbd8b3e18ff8" + integrity sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag== dependencies: - "@babel/compat-data" "^7.22.20" + "@babel/compat-data" "^7.22.9" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -842,56 +883,56 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.3" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.3" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.3" + "@babel/plugin-transform-classes" "^7.23.3" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.3" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.3" + "@babel/plugin-transform-for-of" "^7.23.3" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.3" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.3" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.3" + "@babel/plugin-transform-numeric-separator" "^7.23.3" + "@babel/plugin-transform-object-rest-spread" "^7.23.3" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.3" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.3" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" + "@babel/types" "^7.22.15" babel-plugin-polyfill-corejs2 "^0.4.5" babel-plugin-polyfill-corejs3 "^0.8.3" babel-plugin-polyfill-regenerator "^0.5.2" @@ -913,13 +954,13 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.15.4", "@babel/runtime@^7.8.4": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": +"@babel/template@^7.22.15", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== @@ -928,29 +969,29 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.15.tgz#75be4d2d6e216e880e93017f4e2389aeb77ef2d9" + integrity sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ== dependencies: "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" + "@babel/generator" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.15.tgz#266cb21d2c5fd0b3931e7a91b6dd72d2f617d282" + integrity sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA== dependencies: "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-validator-identifier" "^7.22.15" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -958,13 +999,35 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + "@jridgewell/trace-mapping" "0.3.9" + +"@grpc/grpc-js@^1.7.1": + version "1.9.11" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.9.11.tgz#7b21195c910a49c0bb5d0df21d28a30c4e174851" + integrity sha512-QDhMfbTROOXUhLHMroow8f3EHiCKUOh6UwxMP5S3EuXMnWMNSVIhatGZRwkpg9OUTYdZPsDUVH3cOAkWhGFUJw== + dependencies: + "@grpc/proto-loader" "^0.7.8" + "@types/node" ">=12.12.47" + +"@grpc/proto-loader@^0.7.8": + version "0.7.10" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.10.tgz#6bf26742b1b54d0a473067743da5d3189d06d720" + integrity sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.2.4" + yargs "^17.7.2" "@hapi/hoek@^9.0.0": version "9.3.0" @@ -1003,61 +1066,76 @@ chalk "^2.0.1" slash "^2.0.0" -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" + ci-info "^3.2.0" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^26.6.2" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" "@jest/fake-timers@^24.9.0": version "24.9.0" @@ -1068,58 +1146,64 @@ jest-message-util "^24.9.0" jest-mock "^24.9.0" -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" + glob "^7.1.3" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" "@jest/source-map@^24.9.0": version "24.9.0" @@ -1130,14 +1214,14 @@ graceful-fs "^4.1.15" source-map "^0.6.0" -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" + graceful-fs "^4.2.9" "@jest/test-result@^24.9.0": version "24.9.0" @@ -1148,47 +1232,46 @@ "@jest/types" "^24.9.0" "@types/istanbul-lib-coverage" "^2.0.0" -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" "@jest/types@^24.9.0": version "24.9.0" @@ -1199,15 +1282,16 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^15.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": @@ -1219,7 +1303,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== @@ -1234,104 +1318,551 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@liskhq/lisk-api-client@^6.0.0-rc.1": - version "6.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-api-client/-/lisk-api-client-6.0.0-rc.1.tgz#b0611b7b8f76369f5de499a63118fb1085da23a8" - integrity sha512-sZ59KXjTLUSSeAgx4JSCBRy6E2CaPXkJSeQRIWwfgw5nUw/q1VYGqbtxrMwo8WhRuMqg4X1uHy4HaBQIeftGjw== +"@liskhq/lisk-api-client@^6.0.0-rc.0": + version "6.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-api-client/-/lisk-api-client-6.0.0-rc.0.tgz#349aa76a75ff5fbb22b308696619b913b9cb157f" + integrity sha512-MfKIEWIZYTeJpnl9r3Uck50Zs4qkUR2eaKac/3AsmFAn7t7CoXURIO3rJQITDzbHE30ifHQD+18BQpMay7BwLQ== dependencies: - "@liskhq/lisk-codec" "^0.4.0-rc.1" - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" - "@liskhq/lisk-transactions" "^6.0.0-rc.1" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-codec" "^0.4.0-rc.0" + "@liskhq/lisk-cryptography" "^4.0.0-rc.0" + "@liskhq/lisk-transactions" "^6.0.0-rc.0" + "@liskhq/lisk-validator" "^0.8.0-rc.0" isomorphic-ws "4.0.1" ws "8.11.0" zeromq "6.0.0-beta.6" -"@liskhq/lisk-client@^6.0.0-rc.1": - version "6.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-client/-/lisk-client-6.0.0-rc.1.tgz#ae987f5103efb12e215b784d86e0fa1aa8013de6" - integrity sha512-5viBohsL+0JWtVuCyTFmwzLlzmxBUWamq0YZk7c8cDPNk/Yt+mQ/WPnKRqr8FLejLYOipArP+U4YnOyLMQVDuA== +"@liskhq/lisk-client@^6.0.0-rc.0": + version "6.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-client/-/lisk-client-6.0.0-rc.0.tgz#d756a4ee40142551242413656280ffaa88b41636" + integrity sha512-fMt/YWL+ZlIf3wMIQTiVKU6w2TsnCodFUKjo/WvrJP7ocbAcM9jp/x55iF1MymEXhv8fGOfG1CeHZBolgZLf/g== dependencies: - "@liskhq/lisk-api-client" "^6.0.0-rc.1" - "@liskhq/lisk-codec" "^0.4.0-rc.1" - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" + "@liskhq/lisk-api-client" "^6.0.0-rc.0" + "@liskhq/lisk-codec" "^0.4.0-rc.0" + "@liskhq/lisk-cryptography" "^4.0.0-rc.0" "@liskhq/lisk-passphrase" "^4.0.0-rc.0" - "@liskhq/lisk-transactions" "^6.0.0-rc.1" - "@liskhq/lisk-tree" "^0.4.0-rc.1" + "@liskhq/lisk-transactions" "^6.0.0-rc.0" + "@liskhq/lisk-tree" "^0.4.0-rc.0" "@liskhq/lisk-utils" "^0.4.0-rc.0" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-validator" "^0.8.0-rc.0" buffer "6.0.3" -"@liskhq/lisk-codec@^0.4.0-rc.1": - version "0.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-codec/-/lisk-codec-0.4.0-rc.1.tgz#fbffec74bd54efb820758cc00ca9737d913b452e" - integrity sha512-o5vPFhh2siETT9lDWu+ZJo/Ni5/EYtvUoi3k1kWaJ/X6YF03J4L2GZoRVzZKnXPMPuUDJyT131gUjM0Z3BPgSA== +"@liskhq/lisk-codec@^0.4.0-rc.0": + version "0.4.0-rc.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-codec/-/lisk-codec-0.4.0-rc.0.tgz#4de4a40968a9019855d648b675f89e7cb93c05dc" + integrity sha512-aQHKdvhGP8Z0O8paMVy2VpuB2s7jnznWsMma6cv6wILRYGvqs+JQbzsBvsMn8p8jFOpnHsGdfikZhWrodKAJoQ== dependencies: - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" + "@liskhq/lisk-cryptography" "^4.0.0-rc.0" "@liskhq/lisk-utils" "^0.4.0-rc.0" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-validator" "^0.8.0-rc.0" -"@liskhq/lisk-cryptography@^4.0.0-rc.1": - version "4.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0-rc.1.tgz#b8df408aa1a94362091eda06b0a38577e4db5ead" - integrity sha512-e9ubCGSi8OzOJ21i8Mlc7Zsu+b2ofMGsC0QegzhQSf9Vf5+qAk2CHUR0X/+kT8wvSIpN6krfbz81sfzDPq/PBQ== +"@liskhq/lisk-cryptography@^4.0.0-rc.0": + version "4.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-cryptography/-/lisk-cryptography-4.0.0-rc.0.tgz#0cf5e1b8f67116c8ff258e62d5da3d23a5cef185" + integrity sha512-OIqxD9oNcY2OlFNkI+Ay3Mex+EEt3AcmDFKpkshGBieuMvZzgfOAupPfaB3L36q6pMxGHpRc9Nzz6VQt0vNCYQ== dependencies: - "@liskhq/lisk-passphrase" "^4.0.0-rc.0" + "@liskhq/lisk-passphrase" "^4.0.0" buffer-reverse "1.0.1" hash-wasm "4.9.0" tweetnacl "1.0.3" -"@liskhq/lisk-passphrase@^4.0.0-rc.0": - version "4.0.0-rc.0" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.0.0-rc.0.tgz#78fe583229c96d76258906375e34ff84a413be05" - integrity sha512-m87nhvUpOlSLr5NRV2M4INtg0IjjFF7Bte96Iq6X1dhzOjlmPg/QUQa7MFUzQu3NEWWHnpwON8QQK1FUE6ixYw== +"@liskhq/lisk-passphrase@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-passphrase/-/lisk-passphrase-4.0.0.tgz#a1c9a9481588808f8fc9487971450833d6fd1c01" + integrity sha512-bohEKYtKSqMHyajWqQV3fES5Ejto5gUhAem7fZkLZpgyBIKfZt2xjjdVZRINuvvUixzNBvqpqwF3LQvAJl7SSw== dependencies: bip39 "3.0.3" -"@liskhq/lisk-transactions@^6.0.0-rc.1": - version "6.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-transactions/-/lisk-transactions-6.0.0-rc.1.tgz#4d4583487ae778aac8ffcb622227da99ef5940b7" - integrity sha512-zfgdkS0ySaiSK4j7NNcrXqatk2gViTvBqjFBgGviqA4xUlSZWFaHYIgRzxkOKvDT1EsA5YUk2Z2ARj5xMZVvzw== +"@liskhq/lisk-transactions@^6.0.0-rc.0": + version "6.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-transactions/-/lisk-transactions-6.0.0-rc.0.tgz#a2d2526f0096bcc402c313fc40453657c6d02442" + integrity sha512-iPaFfYSEB2wZs2J4nw0cRNdsz8zup5rJaUgaNrxm5oSwIfjsaqj2sRYoWqqdE46AJ108mjl2zQtWKwIjoyv/RA== dependencies: - "@liskhq/lisk-codec" "^0.4.0-rc.1" - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" - "@liskhq/lisk-validator" "^0.8.0-rc.1" + "@liskhq/lisk-codec" "^0.4.0-rc.0" + "@liskhq/lisk-cryptography" "^4.0.0-rc.0" + "@liskhq/lisk-validator" "^0.8.0-rc.0" -"@liskhq/lisk-tree@^0.4.0-rc.1": - version "0.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-tree/-/lisk-tree-0.4.0-rc.1.tgz#3e5ae897664fd0e28847f04012633d4068058202" - integrity sha512-yDQushgQfAFmvyYZhaE5WpjTZ3MIa/c4ZFQhkHHZJaMJoa7EkozrxCmoKx0TFOIgTGMjGOEIKN+tTkoZpbNgug== +"@liskhq/lisk-tree@^0.4.0-rc.0": + version "0.4.0-rc.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-tree/-/lisk-tree-0.4.0-rc.0.tgz#c9e23163f696b00df4242edb5426f7565c2a12c0" + integrity sha512-yrfu3XBsMOS391tPeLCjO2D98uboG2ALfJbFqHZFs8SpviEEnSSIkBCx4O1M0TA+vvhXyD/pfTITVRo3zG1OnA== dependencies: - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" + "@liskhq/lisk-cryptography" "^4.0.0-rc.0" "@liskhq/lisk-utils" "^0.4.0-rc.0" -"@liskhq/lisk-utils@^0.4.0-rc.0": - version "0.4.0-rc.0" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-utils/-/lisk-utils-0.4.0-rc.0.tgz#6337e1d7e8ca766bbc7ea07408eaf34b2e51bd93" - integrity sha512-oMTRwkWWBNqZABXQTFxvo6L/vyAeYka9MlNGNZE7ObaAO8JjxHRukQDZAX36+NcrvREsp1yNQF8YW1xFs+XIvg== +"@liskhq/lisk-utils@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-utils/-/lisk-utils-0.4.0.tgz#84a8281d6f1db0605e286fcc41721965df474a71" + integrity sha512-rzZZrh36GVSqB65Y4LjaZIe2AVLUH8zXNDNBX0MXM7pI5BhBesDmDpVS2qVLoF7lhyBmUPk9SrARI0wK9/+z9g== dependencies: lodash.clonedeep "4.5.0" -"@liskhq/lisk-validator@^0.8.0-rc.1": - version "0.8.0-rc.1" - resolved "https://registry.yarnpkg.com/@liskhq/lisk-validator/-/lisk-validator-0.8.0-rc.1.tgz#f723bd1667e61c4c5bec680343342c1f8191ff67" - integrity sha512-gLFa+5scCVPWc6cZEx5cALx6gRmF51xH/Szg7YeWi6uJkcQBSlT3ephvAUEVOWcRQ4SL7XadM/vWE0wXvoqqeA== +"@liskhq/lisk-validator@^0.8.0-rc.0": + version "0.8.0-rc.0" + resolved "https://registry.yarnpkg.com/@liskhq/lisk-validator/-/lisk-validator-0.8.0-rc.0.tgz#fb136717f71ce35c7937d79d3b857d26195ff8c8" + integrity sha512-ymKW2eRw4KVBXJLN7co2iJv9WmkytL4IyxXiwJq5xvSzAN/YIx7NYViT8WCcGmUA/ryd55kwdKX/9kKkhafiDw== dependencies: - "@liskhq/lisk-cryptography" "^4.0.0-rc.1" + "@liskhq/lisk-cryptography" "^4.0.0-rc.0" ajv "8.1.0" ajv-formats "2.1.1" debug "4.3.4" semver "7.5.2" validator "13.7.0" +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@oclif/core@^2.15.0", "@oclif/core@^2.8.11", "@oclif/core@^2.8.12": + version "2.15.0" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-2.15.0.tgz#f27797b30a77d13279fba88c1698fc34a0bd0d2a" + integrity sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA== + dependencies: + "@types/cli-progress" "^3.11.0" + ansi-escapes "^4.3.2" + ansi-styles "^4.3.0" + cardinal "^2.1.1" + chalk "^4.1.2" + clean-stack "^3.0.1" + cli-progress "^3.12.0" + debug "^4.3.4" + ejs "^3.1.8" + get-package-type "^0.1.0" + globby "^11.1.0" + hyperlinker "^1.0.0" + indent-string "^4.0.0" + is-wsl "^2.2.0" + js-yaml "^3.14.1" + natural-orderby "^2.0.3" + object-treeify "^1.1.33" + password-prompt "^1.1.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + supports-color "^8.1.1" + supports-hyperlinks "^2.2.0" + ts-node "^10.9.1" + tslib "^2.5.0" + widest-line "^3.1.0" + wordwrap "^1.0.0" + wrap-ansi "^7.0.0" + +"@oclif/plugin-help@^5.2.11": + version "5.2.20" + resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.2.20.tgz#4035a0ac231f95fb8e334da342175e3ca00f6abc" + integrity sha512-u+GXX/KAGL9S10LxAwNUaWdzbEBARJ92ogmM7g3gDVud2HioCmvWQCDohNRVZ9GYV9oKwZ/M8xwd6a1d95rEKQ== + dependencies: + "@oclif/core" "^2.15.0" + +"@oclif/plugin-not-found@^2.3.1": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-2.4.3.tgz#3d24095adb0f3876cb4bcfdfdcb775086cf6d4b5" + integrity sha512-nIyaR4y692frwh7wIHZ3fb+2L6XEecQwRDIb4zbEam0TvaVmBQWZoColQyWA84ljFBPZ8XWiQyTz+ixSwdRkqg== + dependencies: + "@oclif/core" "^2.15.0" + chalk "^4" + fast-levenshtein "^3.0.0" + +"@opentelemetry/api-logs@0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.41.2.tgz#600c9b3d79018e7421d2ff7189f41b6d2c987d6a" + integrity sha512-JEV2RAqijAFdWeT6HddYymfnkiRu2ASxoTBr4WsnGJhOjWZkEy6vp+Sx9ozr1NaIODOa2HUyckExIqQjn6qywQ== + dependencies: + "@opentelemetry/api" "^1.0.0" + +"@opentelemetry/api-logs@0.43.0": + version "0.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.43.0.tgz#472dacbf91488ad6f6b9de39a6f5038b450bdbc6" + integrity sha512-0CXMOYPXgAdLM2OzVkiUfAL6QQwWVhnMfUXCqLsITY42FZ9TxAhZIHkoc4mfVxvPuXsBnRYGR8UQZX86p87z4A== + dependencies: + "@opentelemetry/api" "^1.0.0" + +"@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.4.1": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.7.0.tgz#b139c81999c23e3c8d3c0a7234480e945920fc40" + integrity sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw== + +"@opentelemetry/context-async-hooks@^1.17.1": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.18.1.tgz#d9eb17e23e469f85b44ca1c4788c42a06a62cc84" + integrity sha512-HHfJR32NH2x0b69CACCwH8m1dpNALoCTtpgmIWMNkeMGNUeKT48d4AX4xsF4uIRuUoRTbTgtSBRvS+cF97qwCQ== + +"@opentelemetry/core@1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.15.2.tgz#5b170bf223a2333884bbc2d29d95812cdbda7c9f" + integrity sha512-+gBv15ta96WqkHZaPpcDHiaz0utiiHZVfm2YOYSqFGrUaJpPkMoSuLBB58YFQGi6Rsb9EHos84X6X5+9JspmLw== + dependencies: + "@opentelemetry/semantic-conventions" "1.15.2" + +"@opentelemetry/core@1.17.0": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.17.0.tgz#6a72425f5f953dc68b4c7c66d947c018173d30d2" + integrity sha512-tfnl3h+UefCgx1aeN2xtrmr6BmdWGKXypk0pflQR0urFS40aE88trnkOMc2HTJZbMrqEEl4HsaBeFhwLVXsrJg== + dependencies: + "@opentelemetry/semantic-conventions" "1.17.0" + +"@opentelemetry/core@1.18.1": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.18.1.tgz#d2e45f6bd6be4f00d20d18d4f1b230ec33805ae9" + integrity sha512-kvnUqezHMhsQvdsnhnqTNfAJs3ox/isB0SVrM1dhVFw7SsB7TstuVa6fgWnN2GdPyilIFLUvvbTZoVRmx6eiRg== + dependencies: + "@opentelemetry/semantic-conventions" "1.18.1" + +"@opentelemetry/exporter-metrics-otlp-grpc@^0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.41.2.tgz#3272e67e63167bdaf26585f930a2b60cf3ae76cb" + integrity sha512-gQuCcd5QSMkfi1XIriWAoak/vaRvFzpvtzh2hjziIvbnA3VtoGD3bDb2dzEzOA1iSWO0/tHwnBsSmmUZsETyOA== + dependencies: + "@grpc/grpc-js" "^1.7.1" + "@opentelemetry/core" "1.15.2" + "@opentelemetry/exporter-metrics-otlp-http" "0.41.2" + "@opentelemetry/otlp-grpc-exporter-base" "0.41.2" + "@opentelemetry/otlp-transformer" "0.41.2" + "@opentelemetry/resources" "1.15.2" + "@opentelemetry/sdk-metrics" "1.15.2" + +"@opentelemetry/exporter-metrics-otlp-http@0.41.2", "@opentelemetry/exporter-metrics-otlp-http@^0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.41.2.tgz#b4e5483d00d913daec950a07784e459d1c60fb3d" + integrity sha512-+YeIcL4nuldWE89K8NBLImpXCvih04u1MBnn8EzvoywG2TKR5JC3CZEPepODIxlsfGSgP8W5khCEP1NHZzftYw== + dependencies: + "@opentelemetry/core" "1.15.2" + "@opentelemetry/otlp-exporter-base" "0.41.2" + "@opentelemetry/otlp-transformer" "0.41.2" + "@opentelemetry/resources" "1.15.2" + "@opentelemetry/sdk-metrics" "1.15.2" + +"@opentelemetry/exporter-metrics-otlp-proto@^0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.41.2.tgz#dc4f651688e8ba732036f1b140e77fd2592d5769" + integrity sha512-OLNs6wF84uhxn8TJ8Bv1q2ltdJqjKA9oUEtICcUDDzXIiztPxZ9ur/4xdMk9T3ZJeFMfrhj8eYDkpETBy+fjCg== + dependencies: + "@opentelemetry/core" "1.15.2" + "@opentelemetry/exporter-metrics-otlp-http" "0.41.2" + "@opentelemetry/otlp-exporter-base" "0.41.2" + "@opentelemetry/otlp-proto-exporter-base" "0.41.2" + "@opentelemetry/otlp-transformer" "0.41.2" + "@opentelemetry/resources" "1.15.2" + "@opentelemetry/sdk-metrics" "1.15.2" + +"@opentelemetry/exporter-trace-otlp-grpc@^0.43.0": + version "0.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.43.0.tgz#475487a39706024ef083a385868ac888f32332a3" + integrity sha512-h/oofzwyONMcAeBXD6+E6+foFQg9CPadBFcKAGoMIyVSK7iZgtK5DLEwAF4jz5MhfxWNmwZjHXFRc0GqCRx/tA== + dependencies: + "@grpc/grpc-js" "^1.7.1" + "@opentelemetry/core" "1.17.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.43.0" + "@opentelemetry/otlp-transformer" "0.43.0" + "@opentelemetry/resources" "1.17.0" + "@opentelemetry/sdk-trace-base" "1.17.0" + +"@opentelemetry/exporter-trace-otlp-http@^0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.41.2.tgz#4818088c652f2077a55c9c1364d8320e994dc00f" + integrity sha512-Y0fGLipjZXLMelWtlS1/MDtrPxf25oM408KukRdkN31a1MEFo4h/ZkNwS7ZfmqHGUa+4rWRt2bi6JBiqy7Ytgw== + dependencies: + "@opentelemetry/core" "1.15.2" + "@opentelemetry/otlp-exporter-base" "0.41.2" + "@opentelemetry/otlp-transformer" "0.41.2" + "@opentelemetry/resources" "1.15.2" + "@opentelemetry/sdk-trace-base" "1.15.2" + +"@opentelemetry/exporter-trace-otlp-proto@^0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.41.2.tgz#8e8f823d5264e34dc7c8b400f9d03871c7bfcbc5" + integrity sha512-IGZga9IIckqYE3IpRE9FO9G5umabObIrChlXUHYpMJtDgx797dsb3qXCvLeuAwB+HoB8NsEZstlzmLnoa6/HmA== + dependencies: + "@opentelemetry/core" "1.15.2" + "@opentelemetry/otlp-exporter-base" "0.41.2" + "@opentelemetry/otlp-proto-exporter-base" "0.41.2" + "@opentelemetry/otlp-transformer" "0.41.2" + "@opentelemetry/resources" "1.15.2" + "@opentelemetry/sdk-trace-base" "1.15.2" + +"@opentelemetry/exporter-zipkin@^1.15.2": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.18.1.tgz#01e7bd854971a81ae22ac1b3417e61017d074d44" + integrity sha512-RmoWVFXFhvIh3q4szUe8I+/vxuMR0HNsOm39zNxnWJcK7JDwnPra9cLY/M78u6bTgB6Fte8GKgU128vvDzz0Iw== + dependencies: + "@opentelemetry/core" "1.18.1" + "@opentelemetry/resources" "1.18.1" + "@opentelemetry/sdk-trace-base" "1.18.1" + "@opentelemetry/semantic-conventions" "1.18.1" + +"@opentelemetry/otlp-exporter-base@0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.41.2.tgz#5928dfedb2a70117f03809862cf2cbdf8b7f9bf3" + integrity sha512-pfwa6d+Dax3itZcGWiA0AoXeVaCuZbbqUTsCtOysd2re8C2PWXNxDONUfBWsn+KgxAdi+ljwTjJGiaVLDaIEvQ== + dependencies: + "@opentelemetry/core" "1.15.2" + +"@opentelemetry/otlp-exporter-base@0.43.0": + version "0.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.43.0.tgz#3ac36e959897050ceba8838bb2af7145a9e73d2c" + integrity sha512-LXNtRFVuPRXB9q0qdvrLikQ3NtT9Jmv255Idryz3RJPhOh/Fa03sBASQoj3D55OH3xazmA90KFHfhJ/d8D8y4A== + dependencies: + "@opentelemetry/core" "1.17.0" + +"@opentelemetry/otlp-grpc-exporter-base@0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.41.2.tgz#b056915aa274947517ac86b0c78533db274404e8" + integrity sha512-OErK8dYjXG01XIMIpmOV2SzL9ctkZ0Nyhf2UumICOAKtgLvR5dG1JMlsNVp8Jn0RzpsKc6Urv7JpP69wzRXN+A== + dependencies: + "@grpc/grpc-js" "^1.7.1" + "@opentelemetry/core" "1.15.2" + "@opentelemetry/otlp-exporter-base" "0.41.2" + protobufjs "^7.2.3" + +"@opentelemetry/otlp-grpc-exporter-base@0.43.0": + version "0.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.43.0.tgz#f593e06bc55b15c22774b5efa40b015d910fd34a" + integrity sha512-oOpqtDJo9BBa1+nD6ID1qZ55ZdTwEwSSn2idMobw8jmByJKaanVLdr9SJKsn5T9OBqo/c5QY2brMf0TNZkobJQ== + dependencies: + "@grpc/grpc-js" "^1.7.1" + "@opentelemetry/core" "1.17.0" + "@opentelemetry/otlp-exporter-base" "0.43.0" + protobufjs "^7.2.3" + +"@opentelemetry/otlp-proto-exporter-base@0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-proto-exporter-base/-/otlp-proto-exporter-base-0.41.2.tgz#10b1a4bb973bd6e0e741931d90f22387c5a3a151" + integrity sha512-BxmEMiP6tHiFroe5/dTt9BsxCci7BTLtF7A6d4DKHLiLweWWZxQ9l7hON7qt/IhpKrQcAFD1OzZ1Gq2ZkNzhCw== + dependencies: + "@opentelemetry/core" "1.15.2" + "@opentelemetry/otlp-exporter-base" "0.41.2" + protobufjs "^7.2.3" + +"@opentelemetry/otlp-transformer@0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.41.2.tgz#cd3a7185ef77fe9b7b4c2d2f9e001fa1d2fa6cf8" + integrity sha512-jJbPwB0tNu2v+Xi0c/v/R3YBLJKLonw1p+v3RVjT2VfzeUyzSp/tBeVdY7RZtL6dzZpA9XSmp8UEfWIFQo33yA== + dependencies: + "@opentelemetry/api-logs" "0.41.2" + "@opentelemetry/core" "1.15.2" + "@opentelemetry/resources" "1.15.2" + "@opentelemetry/sdk-logs" "0.41.2" + "@opentelemetry/sdk-metrics" "1.15.2" + "@opentelemetry/sdk-trace-base" "1.15.2" + +"@opentelemetry/otlp-transformer@0.43.0": + version "0.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.43.0.tgz#d4b12ba52d5193a35840d9e1a5e646c4e7e06a5b" + integrity sha512-KXYmgzWdVBOD5NvPmGW1nEMJjyQ8gK3N8r6pi4HvmEhTp0v4T13qDSax4q0HfsqmbPJR355oqQSJUnu1dHNutw== + dependencies: + "@opentelemetry/api-logs" "0.43.0" + "@opentelemetry/core" "1.17.0" + "@opentelemetry/resources" "1.17.0" + "@opentelemetry/sdk-logs" "0.43.0" + "@opentelemetry/sdk-metrics" "1.17.0" + "@opentelemetry/sdk-trace-base" "1.17.0" + +"@opentelemetry/resources@1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.15.2.tgz#0c9e26cb65652a1402834a3c030cce6028d6dd9d" + integrity sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw== + dependencies: + "@opentelemetry/core" "1.15.2" + "@opentelemetry/semantic-conventions" "1.15.2" + +"@opentelemetry/resources@1.17.0": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.17.0.tgz#ee29144cfd7d194c69698c8153dbadec7fe6819f" + integrity sha512-+u0ciVnj8lhuL/qGRBPeVYvk7fL+H/vOddfvmOeJaA1KC+5/3UED1c9KoZQlRsNT5Kw1FaK8LkY2NVLYfOVZQw== + dependencies: + "@opentelemetry/core" "1.17.0" + "@opentelemetry/semantic-conventions" "1.17.0" + +"@opentelemetry/resources@1.18.1", "@opentelemetry/resources@^1.15.2": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.18.1.tgz#e27bdc4715bccc8cd4a72d4aca3995ad0a496fe7" + integrity sha512-JjbcQLYMttXcIabflLRuaw5oof5gToYV9fuXbcsoOeQ0BlbwUn6DAZi++PNsSz2jjPeASfDls10iaO/8BRIPRA== + dependencies: + "@opentelemetry/core" "1.18.1" + "@opentelemetry/semantic-conventions" "1.18.1" + +"@opentelemetry/sdk-logs@0.41.2": + version "0.41.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.41.2.tgz#c3eeb6793bdfa52351d66e2e66637e433abed672" + integrity sha512-smqKIw0tTW15waj7BAPHFomii5c3aHnSE4LQYTszGoK5P9nZs8tEAIpu15UBxi3aG31ZfsLmm4EUQkjckdlFrw== + dependencies: + "@opentelemetry/core" "1.15.2" + "@opentelemetry/resources" "1.15.2" + +"@opentelemetry/sdk-logs@0.43.0": + version "0.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.43.0.tgz#ad40803f0e8893d1839af3a32756d5f46f0f7bbe" + integrity sha512-JyJ2BBRKm37Mc4cSEhFmsMl5ASQn1dkGhEWzAAMSlhPtLRTv5PfvJwhR+Mboaic/eDLAlciwsgijq8IFlf6IgQ== + dependencies: + "@opentelemetry/core" "1.17.0" + "@opentelemetry/resources" "1.17.0" + +"@opentelemetry/sdk-metrics@1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.15.2.tgz#eadd0a049de9cd860e1e0d49eea01156469c4b60" + integrity sha512-9aIlcX8GnhcsAHW/Wl8bzk4ZnWTpNlLtud+fxUfBtFATu6OZ6TrGrF4JkT9EVrnoxwtPIDtjHdEsSjOqisY/iA== + dependencies: + "@opentelemetry/core" "1.15.2" + "@opentelemetry/resources" "1.15.2" + lodash.merge "^4.6.2" + +"@opentelemetry/sdk-metrics@1.17.0": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.17.0.tgz#e51d39e0bb749780d17f9b1df12f0490438dec1a" + integrity sha512-HlWM27yGmYuwCoVRe3yg2PqKnIsq0kEF0HQgvkeDWz2NYkq9fFaSspR6kvjxUTbghAlZrabiqbgyKoYpYaXS3w== + dependencies: + "@opentelemetry/core" "1.17.0" + "@opentelemetry/resources" "1.17.0" + lodash.merge "^4.6.2" + +"@opentelemetry/sdk-metrics@^1.15.2": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.18.1.tgz#1dd334744a1e5d2eec27e9e9765c73cd2f43aef3" + integrity sha512-TEFgeNFhdULBYiCoHbz31Y4PDsfjjxRp8Wmdp6ybLQZPqMNEb+dRq+XN8Xw3ivIgTaf9gYsomgV5ensX99RuEQ== + dependencies: + "@opentelemetry/core" "1.18.1" + "@opentelemetry/resources" "1.18.1" + lodash.merge "^4.6.2" + +"@opentelemetry/sdk-trace-base@1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.15.2.tgz#4821f94033c55a6c8bbd35ae387b715b6108517a" + integrity sha512-BEaxGZbWtvnSPchV98qqqqa96AOcb41pjgvhfzDij10tkBhIu9m0Jd6tZ1tJB5ZHfHbTffqYVYE0AOGobec/EQ== + dependencies: + "@opentelemetry/core" "1.15.2" + "@opentelemetry/resources" "1.15.2" + "@opentelemetry/semantic-conventions" "1.15.2" + +"@opentelemetry/sdk-trace-base@1.17.0": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.17.0.tgz#05a21763c9efa72903c20b8930293cdde344b681" + integrity sha512-2T5HA1/1iE36Q9eg6D4zYlC4Y4GcycI1J6NsHPKZY9oWfAxWsoYnRlkPfUqyY5XVtocCo/xHpnJvGNHwzT70oQ== + dependencies: + "@opentelemetry/core" "1.17.0" + "@opentelemetry/resources" "1.17.0" + "@opentelemetry/semantic-conventions" "1.17.0" + +"@opentelemetry/sdk-trace-base@1.18.1", "@opentelemetry/sdk-trace-base@^1.15.2": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.18.1.tgz#256605d90b202002d5672305c66dbcf377132379" + integrity sha512-tRHfDxN5dO+nop78EWJpzZwHsN1ewrZRVVwo03VJa3JQZxToRDH29/+MB24+yoa+IArerdr7INFJiX/iN4gjqg== + dependencies: + "@opentelemetry/core" "1.18.1" + "@opentelemetry/resources" "1.18.1" + "@opentelemetry/semantic-conventions" "1.18.1" + +"@opentelemetry/semantic-conventions@1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz#3bafb5de3e20e841dff6cb3c66f4d6e9694c4241" + integrity sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw== + +"@opentelemetry/semantic-conventions@1.17.0": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.17.0.tgz#af10baa9f05ce1e64a14065fc138b5739bfb65f6" + integrity sha512-+fguCd2d8d2qruk0H0DsCEy2CTK3t0Tugg7MhZ/UQMvmewbZLNnJ6heSYyzIZWG5IPfAXzoj4f4F/qpM7l4VBA== + +"@opentelemetry/semantic-conventions@1.18.1", "@opentelemetry/semantic-conventions@^1.15.2": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.18.1.tgz#8e47caf57a84b1dcc1722b2025693348cdf443b4" + integrity sha512-+NLGHr6VZwcgE/2lw8zDIufOCGnzsA5CbQIMleXZTrgkBd0TanCX+MiDYJ1TOS4KL/Tqk0nFRxawnaYr6pkZkA== + +"@playwright/browser-chromium@1.39.0": + version "1.39.0" + resolved "https://registry.yarnpkg.com/@playwright/browser-chromium/-/browser-chromium-1.39.0.tgz#549ea67a4734e8a17d5d3fdeabcdcf1e02cffd84" + integrity sha512-s1WPO0qOE7PIZcdcJEd4CHQgXf9rOwy00Den8DsXTI26n/Eqa2HzFSbLRE1Eh2nIJZFSGyKLbopHR0HkT8ClZw== + dependencies: + playwright-core "1.39.0" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@servie/events@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@servie/events/-/events-1.0.0.tgz#8258684b52d418ab7b86533e861186638ecc5dc1" + integrity sha512-sBSO19KzdrJCM3gdx6eIxV8M9Gxfgg6iDQmH5TIAGaUu+X9VDdsINXJOnoiZ1Kx3TrHdH4bt5UVglkjsEGBcvw== + "@sideway/address@^4.1.3": version "4.1.4" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" @@ -1349,30 +1880,414 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + "@sindresorhus/is@^4.0.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@smithy/abort-controller@^2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.0.14.tgz#0608c34e35289e66ba839bbdda0c2ccd971e8d26" + integrity sha512-zXtteuYLWbSXnzI3O6xq3FYvigYZFW8mdytGibfarLL2lxHto9L3ILtGVnVGmFZa7SDh62l39EnU5hesLN87Fw== + dependencies: + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/config-resolver@^2.0.18", "@smithy/config-resolver@^2.0.19": + version "2.0.19" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.19.tgz#d246fff11bdf8089e85de2e26172ba27a5ff7980" + integrity sha512-JsghnQ5zjWmjEVY8TFOulLdEOCj09SjRLugrHlkPZTIBBm7PQitCFVLThbsKPZQOP7N3ME1DU1nKUc1UaVnBog== + dependencies: + "@smithy/node-config-provider" "^2.1.6" + "@smithy/types" "^2.6.0" + "@smithy/util-config-provider" "^2.0.0" + "@smithy/util-middleware" "^2.0.7" + tslib "^2.5.0" + +"@smithy/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.2.tgz#b0225e2f514c5394558f702184feac94453ec9d1" + integrity sha512-Y62jBWdoLPSYjr9fFvJf+KwTa1EunjVr6NryTEWCnwIY93OJxwV4t0qxjwdPl/XMsUkq79ppNJSEQN6Ohnhxjw== + dependencies: + "@smithy/node-config-provider" "^2.1.6" + "@smithy/property-provider" "^2.0.15" + "@smithy/types" "^2.6.0" + "@smithy/url-parser" "^2.0.14" + tslib "^2.5.0" + +"@smithy/eventstream-codec@^2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.0.14.tgz#e56434ae34be6682c7e9f12bb2f50e73b301914a" + integrity sha512-g/OU/MeWGfHDygoXgMWfG/Xb0QqDnAGcM9t2FRrVAhleXYRddGOEnfanR5cmHgB9ue52MJsyorqFjckzXsylaA== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.6.0" + "@smithy/util-hex-encoding" "^2.0.0" + tslib "^2.5.0" + +"@smithy/fetch-http-handler@^2.2.6", "@smithy/fetch-http-handler@^2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.7.tgz#7e06aa774ea86f6529365e439256f17979c18445" + integrity sha512-iSDBjxuH9TgrtMYAr7j5evjvkvgwLY3y+9D547uep+JNkZ1ZT+BaeU20j6I/bO/i26ilCWFImrlXTPsfQtZdIQ== + dependencies: + "@smithy/protocol-http" "^3.0.10" + "@smithy/querystring-builder" "^2.0.14" + "@smithy/types" "^2.6.0" + "@smithy/util-base64" "^2.0.1" + tslib "^2.5.0" + +"@smithy/hash-node@^2.0.15": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.0.16.tgz#babd9e3fb13339507ffcc182834cf10c4df028b1" + integrity sha512-Wbi9A0PacMYUOwjAulQP90Wl3mQ6NDwnyrZQzFjDz+UzjXOSyQMgBrTkUBz+pVoYVlX3DUu24gWMZBcit+wOGg== + dependencies: + "@smithy/types" "^2.6.0" + "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/invalid-dependency@^2.0.13": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.0.14.tgz#fc898c8cf0c4ceb29bb23c6a90f7522193622e75" + integrity sha512-d8ohpwZo9RzTpGlAfsWtfm1SHBSU7+N4iuZ6MzR10xDTujJJWtmXYHK1uzcr7rggbpUTaWyHpPFgnf91q0EFqQ== + dependencies: + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/is-array-buffer@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz#8fa9b8040651e7ba0b2f6106e636a91354ff7d34" + integrity sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug== + dependencies: + tslib "^2.5.0" + +"@smithy/middleware-content-length@^2.0.15": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.0.16.tgz#0d77cfe0d375bfbf1e59f30a38de0e3f14a1e73f" + integrity sha512-9ddDia3pp1d3XzLXKcm7QebGxLq9iwKf+J1LapvlSOhpF8EM9SjMeSrMOOFgG+2TfW5K3+qz4IAJYYm7INYCng== + dependencies: + "@smithy/protocol-http" "^3.0.10" + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/middleware-endpoint@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.1.tgz#7fc156aaeaa0e8bd838c57a8b37ece355a9eeaec" + integrity sha512-dVDS7HNJl/wb0lpByXor6whqDbb1YlLoaoWYoelyYzLHioXOE7y/0iDwJWtDcN36/tVCw9EPBFZ3aans84jLpg== + dependencies: + "@smithy/middleware-serde" "^2.0.14" + "@smithy/node-config-provider" "^2.1.6" + "@smithy/shared-ini-file-loader" "^2.2.5" + "@smithy/types" "^2.6.0" + "@smithy/url-parser" "^2.0.14" + "@smithy/util-middleware" "^2.0.7" + tslib "^2.5.0" + +"@smithy/middleware-retry@^2.0.20": + version "2.0.21" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.21.tgz#7c18cbb7ca5c7fd1777e062b3cbebc57a60bddca" + integrity sha512-EZS1EXv1k6IJX6hyu/0yNQuPcPaXwG8SWljQHYueyRbOxmqYgoWMWPtfZj0xRRQ4YtLawQSpBgAeiJltq8/MPw== + dependencies: + "@smithy/node-config-provider" "^2.1.6" + "@smithy/protocol-http" "^3.0.10" + "@smithy/service-error-classification" "^2.0.7" + "@smithy/types" "^2.6.0" + "@smithy/util-middleware" "^2.0.7" + "@smithy/util-retry" "^2.0.7" + tslib "^2.5.0" + uuid "^8.3.2" + +"@smithy/middleware-serde@^2.0.13", "@smithy/middleware-serde@^2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.0.14.tgz#147e7413f934f213dbfe4815e691409cc9c0d793" + integrity sha512-hFi3FqoYWDntCYA2IGY6gJ6FKjq2gye+1tfxF2HnIJB5uW8y2DhpRNBSUMoqP+qvYzRqZ6ntv4kgbG+o3pX57g== + dependencies: + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/middleware-stack@^2.0.7", "@smithy/middleware-stack@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.0.8.tgz#76827e2818654eb5a482ede36a59de6d6db7b896" + integrity sha512-7/N59j0zWqVEKExJcA14MrLDZ/IeN+d6nbkN8ucs+eURyaDUXWYlZrQmMOd/TyptcQv0+RDlgag/zSTTV62y/Q== + dependencies: + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/node-config-provider@^2.1.5", "@smithy/node-config-provider@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.1.6.tgz#835f62902676de71a358f66a0887a09154cf43c2" + integrity sha512-HLqTs6O78m3M3z1cPLFxddxhEPv5MkVatfPuxoVO3A+cHZanNd/H5I6btcdHy6N2CB1MJ/lihJC92h30SESsBA== + dependencies: + "@smithy/property-provider" "^2.0.15" + "@smithy/shared-ini-file-loader" "^2.2.5" + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/node-http-handler@^2.1.10", "@smithy/node-http-handler@^2.1.9": + version "2.1.10" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.1.10.tgz#8921a661dfb273a21dd1dff3ad1fe5196ea3c525" + integrity sha512-lkALAwtN6odygIM4nB8aHDahINM6WXXjNrZmWQAh0RSossySRT2qa31cFv0ZBuAYVWeprskRk13AFvvLmf1WLw== + dependencies: + "@smithy/abort-controller" "^2.0.14" + "@smithy/protocol-http" "^3.0.10" + "@smithy/querystring-builder" "^2.0.14" + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/property-provider@^2.0.0", "@smithy/property-provider@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.15.tgz#7a5069f6bab4d59f640b2e73e99fa03e3fda3cc1" + integrity sha512-YbRFBn8oiiC3o1Kn3a4KjGa6k47rCM9++5W9cWqYn9WnkyH+hBWgfJAckuxpyA2Hq6Ys4eFrWzXq6fqHEw7iew== + dependencies: + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/protocol-http@^3.0.10", "@smithy/protocol-http@^3.0.9": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.0.10.tgz#235ffdcdc3022c4a76b1785dbc6f9f8427859e1f" + integrity sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg== + dependencies: + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/querystring-builder@^2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.0.14.tgz#3ba4ba728ab10e040b46079afc983c3378032328" + integrity sha512-lQ4pm9vTv9nIhl5jt6uVMPludr6syE2FyJmHsIJJuOD7QPIJnrf9HhUGf1iHh9KJ4CUv21tpOU3X6s0rB6uJ0g== + dependencies: + "@smithy/types" "^2.6.0" + "@smithy/util-uri-escape" "^2.0.0" + tslib "^2.5.0" + +"@smithy/querystring-parser@^2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.0.14.tgz#0e3936d44c783540321fedd9d502aac22073a556" + integrity sha512-+cbtXWI9tNtQjlgQg3CA+pvL3zKTAxPnG3Pj6MP89CR3vi3QMmD0SOWoq84tqZDnJCxlsusbgIXk1ngMReXo+A== + dependencies: + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/service-error-classification@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.0.7.tgz#9ef515fdc751a27a555f51121be5c37006a4c458" + integrity sha512-LLxgW12qGz8doYto15kZ4x1rHjtXl0BnCG6T6Wb8z2DI4PT9cJfOSvzbuLzy7+5I24PAepKgFeWHRd9GYy3Z9w== + dependencies: + "@smithy/types" "^2.6.0" + +"@smithy/shared-ini-file-loader@^2.0.6", "@smithy/shared-ini-file-loader@^2.2.5": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.5.tgz#7fe24f5f8143e9082b61c3fab4d4d7c395dda807" + integrity sha512-LHA68Iu7SmNwfAVe8egmjDCy648/7iJR/fK1UnVw+iAOUJoEYhX2DLgVd5pWllqdDiRbQQzgaHLcRokM+UFR1w== + dependencies: + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/signature-v4@^2.0.0": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.0.16.tgz#51456baa6992120031692e1bf28178b766bf40ac" + integrity sha512-ilLY85xS2kZZzTb83diQKYLIYALvart0KnBaKnIRnMBHAGEio5aHSlANQoxVn0VsonwmQ3CnWhnCT0sERD8uTg== + dependencies: + "@smithy/eventstream-codec" "^2.0.14" + "@smithy/is-array-buffer" "^2.0.0" + "@smithy/types" "^2.6.0" + "@smithy/util-hex-encoding" "^2.0.0" + "@smithy/util-middleware" "^2.0.7" + "@smithy/util-uri-escape" "^2.0.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/smithy-client@^2.1.15", "@smithy/smithy-client@^2.1.16": + version "2.1.16" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.1.16.tgz#eae70fac673b06494c536fa5637c2df12887ce3a" + integrity sha512-Lw67+yQSpLl4YkDLUzI2KgS8TXclXmbzSeOJUmRFS4ueT56B4pw3RZRF/SRzvgyxM/HxgkUan8oSHXCujPDafQ== + dependencies: + "@smithy/middleware-stack" "^2.0.8" + "@smithy/types" "^2.6.0" + "@smithy/util-stream" "^2.0.21" + tslib "^2.5.0" + +"@smithy/types@^2.5.0", "@smithy/types@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.6.0.tgz#a09c40b512e2df213229a20a43d0d9cfcf55ca3e" + integrity sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g== + dependencies: + tslib "^2.5.0" + +"@smithy/url-parser@^2.0.13", "@smithy/url-parser@^2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.0.14.tgz#6e09902482e9fef0882e6c9f1009ca57fcf3f7b4" + integrity sha512-kbu17Y1AFXi5lNlySdDj7ZzmvupyWKCX/0jNZ8ffquRyGdbDZb+eBh0QnWqsSmnZa/ctyWaTf7n4l/pXLExrnw== + dependencies: + "@smithy/querystring-parser" "^2.0.14" + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/util-base64@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.0.1.tgz#57f782dafc187eddea7c8a1ff2a7c188ed1a02c4" + integrity sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ== + dependencies: + "@smithy/util-buffer-from" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-body-length-browser@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz#5447853003b4c73da3bc5f3c5e82c21d592d1650" + integrity sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-body-length-node@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz#313a5f7c5017947baf5fa018bfc22628904bbcfa" + integrity sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-buffer-from@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz#7eb75d72288b6b3001bc5f75b48b711513091deb" + integrity sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw== + dependencies: + "@smithy/is-array-buffer" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-config-provider@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz#4dd6a793605559d94267312fd06d0f58784b4c38" + integrity sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-defaults-mode-browser@^2.0.19": + version "2.0.20" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.20.tgz#efabf1c0dadd0d86340f796b761bf17b59dcf900" + integrity sha512-QJtnbTIl0/BbEASkx1MUFf6EaoWqWW1/IM90N++8NNscePvPf77GheYfpoPis6CBQawUWq8QepTP2QUSAdrVkw== + dependencies: + "@smithy/property-provider" "^2.0.15" + "@smithy/smithy-client" "^2.1.16" + "@smithy/types" "^2.6.0" + bowser "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-defaults-mode-node@^2.0.25": + version "2.0.26" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.26.tgz#a701b6b0cc3f2bb57964049ccb0f8d147a8654df" + integrity sha512-lGFPOFCHv1ql019oegYqa54BZH7HREw6EBqjDLbAr0wquMX0BDi2sg8TJ6Eq+JGLijkZbJB73m4+aK8OFAapMg== + dependencies: + "@smithy/config-resolver" "^2.0.19" + "@smithy/credential-provider-imds" "^2.1.2" + "@smithy/node-config-provider" "^2.1.6" + "@smithy/property-provider" "^2.0.15" + "@smithy/smithy-client" "^2.1.16" + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/util-endpoints@^1.0.4": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.0.5.tgz#9e6ffdc9ac9d597869209e3b83784a13f277956e" + integrity sha512-K7qNuCOD5K/90MjHvHm9kJldrfm40UxWYQxNEShMFxV/lCCCRIg8R4uu1PFAxRvPxNpIdcrh1uK6I1ISjDXZJw== + dependencies: + "@smithy/node-config-provider" "^2.1.6" + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/util-hex-encoding@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz#0aa3515acd2b005c6d55675e377080a7c513b59e" + integrity sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA== + dependencies: + tslib "^2.5.0" + +"@smithy/util-middleware@^2.0.6", "@smithy/util-middleware@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.0.7.tgz#92dda5d2a79915e06a275b4df3d66d4381b60a5f" + integrity sha512-tRINOTlf1G9B0ECarFQAtTgMhpnrMPSa+5j4ZEwEawCLfTFTavk6757sxhE4RY5RMlD/I3x+DCS8ZUiR8ho9Pw== + dependencies: + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/util-retry@^2.0.6", "@smithy/util-retry@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.0.7.tgz#14ad8ebe5d8428dd0216d58b883e7fd964ae1e95" + integrity sha512-fIe5yARaF0+xVT1XKcrdnHKTJ1Vc4+3e3tLDjCuIcE9b6fkBzzGFY7AFiX4M+vj6yM98DrwkuZeHf7/hmtVp0Q== + dependencies: + "@smithy/service-error-classification" "^2.0.7" + "@smithy/types" "^2.6.0" + tslib "^2.5.0" + +"@smithy/util-stream@^2.0.20", "@smithy/util-stream@^2.0.21": + version "2.0.21" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.0.21.tgz#290935084e026afae6bacec7481abdae3498ee35" + integrity sha512-0BUE16d7n1x7pi1YluXJdB33jOTyBChT0j/BlOkFa9uxfg6YqXieHxjHNuCdJRARa7AZEj32LLLEPJ1fSa4inA== + dependencies: + "@smithy/fetch-http-handler" "^2.2.7" + "@smithy/node-http-handler" "^2.1.10" + "@smithy/types" "^2.6.0" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-hex-encoding" "^2.0.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/util-uri-escape@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz#19955b1a0f517a87ae77ac729e0e411963dfda95" + integrity sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-utf8@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.0.2.tgz#626b3e173ad137208e27ed329d6bea70f4a1a7f7" + integrity sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA== dependencies: - type-detect "4.0.8" + "@smithy/util-buffer-from" "^2.0.0" + tslib "^2.5.0" -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== +"@smithy/util-waiter@^2.0.13": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.0.14.tgz#b2c8ce5728c1bb92236dfbfe3bf8f354a328c4f7" + integrity sha512-Q6gSz4GUNjNGhrfNg+2Mjy+7K4pEI3r82x1b/+3dSc03MQqobMiUrRVN/YK/4nHVagvBELCoXsiHAFQJNQ5BeA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@smithy/abort-controller" "^2.0.14" + "@smithy/types" "^2.6.0" + tslib "^2.5.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== +"@sqltools/formatter@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" + integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== + +"@supercharge/promise-pool@^2.2.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz#6050eea8c2d7f92ddd4ddc582ee328b15c034ad3" + integrity sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w== + "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -1380,15 +2295,30 @@ dependencies: defer-to-connect "^2.0.0" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== + version "7.20.1" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" + integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -1397,24 +2327,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== + version "7.20.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" + integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== dependencies: "@babel/types" "^7.20.7" @@ -1428,10 +2358,10 @@ "@types/node" "*" "@types/responselike" "^1.0.0" -"@types/concat-stream@^1.6.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" - integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== +"@types/cli-progress@^3.11.0": + version "3.11.5" + resolved "https://registry.yarnpkg.com/@types/cli-progress/-/cli-progress-3.11.5.tgz#9518c745e78557efda057e3f96a5990c717268c3" + integrity sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g== dependencies: "@types/node" "*" @@ -1441,9 +2371,9 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.14" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" - integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" @@ -1455,26 +2385,26 @@ "@types/node" "*" "@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" "@types/http-cache-semantics@*": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz#abe102d06ccda1efdf0ed98c10ccf7f36a785a41" - integrity sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw== + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" @@ -1487,9 +2417,9 @@ "@types/istanbul-lib-report" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" @@ -1506,9 +2436,9 @@ integrity sha512-hvD1Yz0xugpvbFNVihc0Eu60Y/o1dD8LmSdN4d5QHV315ljuVGlwS5DYrb3RqFi6JskDC0Xi6/Bv6aEe/1A9bw== "@types/node@*", "@types/node@>=10.0.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== + version "20.5.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.9.tgz#a70ec9d8fa0180a314c3ede0e20ea56ff71aed9a" + integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ== "@types/node@11.11.6": version "11.11.6" @@ -1516,9 +2446,9 @@ integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== "@types/normalize-package-data@^2.4.0": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz#9b0e3e8533fe5024ad32d6637eb9589988b6fdca" - integrity sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/prettier@^2.0.0": version "2.7.3" @@ -1526,9 +2456,9 @@ integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== dependencies: "@types/node" "*" @@ -1538,19 +2468,19 @@ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/tough-cookie@^2.3.0": - version "2.3.9" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.9.tgz#904becefb2ccab4a33d96908704525bb4dbc048e" - integrity sha512-jLZVDbs/2XRjcgg6X5aXlni7AC85LYOjIQ5H9Eouny0t1SDKiXWxkbTPLkMdFKYxlKVZtMstlkpU1v6d14hVbA== + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.8.tgz#511fc1569cc32b0cf50941fe9f00bf70f94116bb" + integrity sha512-7axfYN8SW9pWg78NgenHasSproWQee5rzyPVLC9HpaQSDgNArsnKJD88EaMfi4Pl48AyciO3agYCFqpHS1gLpg== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^13.0.0": version "13.0.12" @@ -1560,17 +2490,12 @@ "@types/yargs-parser" "*" "@types/yargs@^15.0.0": - version "15.0.16" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.16.tgz#258009dc52907e8f03041eb64ffdac297ba4b208" - integrity sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg== + version "15.0.15" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" + integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -1579,28 +2504,39 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-node@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" -acorn-walk@^7.1.1: +acorn-walk@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.1.1: +acorn-walk@^8.1.1: + version "8.3.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" + integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== + +acorn@^7.0.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +acorn@^8.4.1, acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== after@0.8.2: version "0.8.2" @@ -1614,7 +2550,14 @@ agent-base@6: dependencies: debug "4" -agentkeepalive@^4.1.4: +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + +agentkeepalive@^4.1.0, agentkeepalive@^4.1.4: version "4.5.0" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== @@ -1648,6 +2591,11 @@ ajv@^8.0.0: require-from-string "^2.0.2" uri-js "^4.2.2" +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -1660,7 +2608,7 @@ ansi-escapes@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -1682,7 +2630,7 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -1699,20 +2647,27 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@^3.0.3: version "3.1.3" @@ -1722,6 +2677,66 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" +app-module-path@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" + integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== + +app-root-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + 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" + +archiver-utils@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-3.0.4.tgz#a0d201f1cf8fce7af3b5a05aea0a337329e96ec7" + integrity sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw== + dependencies: + glob "^7.2.3" + 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 "^3.6.0" + +archiver@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0" + integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.4" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.1.2" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1729,6 +2744,16 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +args@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/args/-/args-5.0.1.tgz#4bf298df90a4799a09521362c579278cc2fdd761" + integrity sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ== + dependencies: + camelcase "5.0.0" + chalk "2.4.2" + leven "2.1.0" + mri "1.1.4" + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -1744,6 +2769,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1762,6 +2792,91 @@ arrivals@^2.1.2: debug "^4.0.1" nanotimer "0.3.14" +artillery-engine-playwright@latest: + version "1.1.0" + resolved "https://registry.yarnpkg.com/artillery-engine-playwright/-/artillery-engine-playwright-1.1.0.tgz#d1a7ff1e7b3b6965e8e67e8a615c3723eaa15106" + integrity sha512-AZrM5FbETHcBBOgBDCCTOkpSBwT6r0LqqSwoZQx/X/fHvBcxintf/OrIK/VFarUH3cCEu3ZiCqoT6j/Ydy5dnA== + dependencies: + "@playwright/browser-chromium" "1.39.0" + debug "^4.3.2" + playwright "1.39.0" + +artillery-engine-socketio-v3@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/artillery-engine-socketio-v3/-/artillery-engine-socketio-v3-1.2.0.tgz#2dd7b6c647da6fd35ad41fa5dd7d57d3ae6039d3" + integrity sha512-2u+XSq4heAeSb6re+3upv4+rMiSgv11b0NTiXYA55+g+MekOsBUz/3pneTludOFCL+ya0xMezPrgiWx1OALV+A== + dependencies: + artillery "^1.6.1" + async "^1.5.2" + debug "^4.3.1" + deep-equal "^1.0.1" + lodash "^4.17.20" + socket.io-client "^3 || ^4" + socket.io-msgpack-parser "^3.0.1" + +artillery-plugin-apdex@latest: + version "1.0.1" + resolved "https://registry.yarnpkg.com/artillery-plugin-apdex/-/artillery-plugin-apdex-1.0.1.tgz#1c15bc28e4bb1c2836b8cbf51adeaabd7a68716b" + integrity sha512-hXYHzkTv3RvapSBuO6YBjIvpsKhngrhBDLfiLuR9NoQhPpOO87K0TAKc9Tt73P36eOH1MOA/D5RCg5Bh1sbH8g== + +artillery-plugin-ensure@^1.1.5, artillery-plugin-ensure@latest: + version "1.3.0" + resolved "https://registry.yarnpkg.com/artillery-plugin-ensure/-/artillery-plugin-ensure-1.3.0.tgz#a0fa149f1af81ff5b36d04f753ae1d95fc6e11a3" + integrity sha512-+y5Ha5pSsxSwYaeKnn33F8Za7Ol2WcLowzDn8pHiCLwPRPNWmiewDKRffRekqRDpAYHhwgOF0/kWoCwEYjbPAA== + dependencies: + chalk "^2.4.2" + debug "^4.3.3" + filtrex "^2.2.3" + +artillery-plugin-expect@latest: + version "2.3.3" + resolved "https://registry.yarnpkg.com/artillery-plugin-expect/-/artillery-plugin-expect-2.3.3.tgz#739b4913b6b8789652d381e5c9732afaaff69435" + integrity sha512-vKA3WMjEwEGae29EWoZZjGPWX/hcLc1lRqEl/2xAcQXwDnF7nj2aiqMgeEBlpqr8XqAhbr9teQxblFxlf37yzQ== + dependencies: + chalk "^4.1.2" + debug "^4.3.2" + jmespath "^0.16.0" + lodash "^4.17.21" + +artillery-plugin-metrics-by-endpoint@latest: + version "1.2.0" + resolved "https://registry.yarnpkg.com/artillery-plugin-metrics-by-endpoint/-/artillery-plugin-metrics-by-endpoint-1.2.0.tgz#eaf9850ab86e200f816cf5d9d4e3b1308a17bbca" + integrity sha512-4SatrmYffyex/j/wjCBW2gVGwgRfLSJFBTuOGM1pJH3l0iEOeHM+/HOzVIUL8IQbnjA/G1WpkJL3bB7jOuX4Dg== + dependencies: + debug "^4.3.2" + +artillery-plugin-publish-metrics@latest: + version "2.9.0" + resolved "https://registry.yarnpkg.com/artillery-plugin-publish-metrics/-/artillery-plugin-publish-metrics-2.9.0.tgz#fbb1cbc745066376d94501b4afd203add54e4b27" + integrity sha512-IKWoGrBdR5+XQ82W9HYUNuO89f8y4aCDiqFHLVqMYCq4avqS9WsBKr49mCmLV0lhbUWA3qMcVfNZnuTdZLnHew== + dependencies: + "@aws-sdk/client-cloudwatch" "^3.370.0" + "@opentelemetry/api" "^1.4.1" + "@opentelemetry/context-async-hooks" "^1.17.1" + "@opentelemetry/exporter-metrics-otlp-grpc" "^0.41.2" + "@opentelemetry/exporter-metrics-otlp-http" "^0.41.2" + "@opentelemetry/exporter-metrics-otlp-proto" "^0.41.2" + "@opentelemetry/exporter-trace-otlp-grpc" "^0.43.0" + "@opentelemetry/exporter-trace-otlp-http" "^0.41.2" + "@opentelemetry/exporter-trace-otlp-proto" "^0.41.2" + "@opentelemetry/exporter-zipkin" "^1.15.2" + "@opentelemetry/resources" "^1.15.2" + "@opentelemetry/sdk-metrics" "^1.15.2" + "@opentelemetry/sdk-trace-base" "^1.15.2" + "@opentelemetry/semantic-conventions" "^1.15.2" + async "^2.6.1" + datadog-metrics "^0.9.3" + debug "^4.1.1" + dogapi "^2.8.4" + hot-shots "^6.0.1" + libhoney "^4.1.0" + lightstep-tracer "^0.31.0" + mixpanel "^0.13.0" + opentracing "^0.14.5" + prom-client "^14.0.1" + semver "^7.3.5" + uuid "^8.3.2" + artillery-plugin-statsd@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/artillery-plugin-statsd/-/artillery-plugin-statsd-2.2.1.tgz#45f625687540128b851d9519f5c14abf0a6e963b" @@ -1771,7 +2886,7 @@ artillery-plugin-statsd@^2.2.1: lodash "^4.17.11" lynx "^0.2.0" -artillery@^1.7.9: +artillery@^1.6.1: version "1.7.9" resolved "https://registry.yarnpkg.com/artillery/-/artillery-1.7.9.tgz#1775bc50b80d65098269f4b52648ee3b34d7b578" integrity sha512-YuBBtcJJo6qKB0GJEiZZASnRMdB/4MdURpcPM4ifTkV7pHGFYWrlpgXKkO6nRFn0jVc2Yc0RFT3DgJ3ZHMazDA== @@ -1815,6 +2930,54 @@ artillery@^1.7.9: uuid "^2.0.3" ws "^5.1.1" +artillery@^2.0.0-38: + version "2.0.0-38" + resolved "https://registry.yarnpkg.com/artillery/-/artillery-2.0.0-38.tgz#db6d9a4c46b6fb083b28e3ab1fbc4e35082754c8" + integrity sha512-W4TnktLrtLy17cNV9k+mXjTwTRVGpidCzC+eElbxJipI8XCWulbpH3yzEOBPxw7Eo/3RHULMMr1mZu8J8oGWVg== + dependencies: + "@artilleryio/int-commons" latest + "@artilleryio/int-core" latest + "@artilleryio/platform-fargate" "^2.2.0" + "@aws-sdk/credential-providers" "^3.127.0" + "@oclif/core" "^2.8.11" + "@oclif/plugin-help" "^5.2.11" + "@oclif/plugin-not-found" "^2.3.1" + archiver "^5.3.1" + artillery-engine-playwright latest + artillery-plugin-apdex latest + artillery-plugin-ensure latest + artillery-plugin-expect latest + artillery-plugin-metrics-by-endpoint latest + artillery-plugin-publish-metrics latest + async "^2.6.4" + aws-sdk "^2.1338.0" + chalk "^2.4.2" + ci-info "^3.8.0" + cli-table3 "^0.6.2" + cross-spawn "^7.0.3" + csv-parse "^4.16.3" + debug "^4.3.1" + dotenv "^16.0.1" + eventemitter3 "^4.0.4" + fs-extra "^10.1.0" + ip "^1.1.8" + joi "^17.6.0" + js-yaml "^3.13.1" + lodash "^4.17.19" + moment "^2.29.4" + nanoid "^3.3.4" + ora "^4.0.4" + posthog-node "^2.2.3" + sqs-consumer "5.8.0" + temp "^0.9.4" + tmp "0.2.1" + try-require "^1.2.1" + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -1825,25 +2988,54 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== +ast-module-types@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ast-module-types/-/ast-module-types-3.0.0.tgz#9a6d8a80f438b6b8fe4995699d700297f398bf81" + integrity sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ== + +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.0.tgz#2796642723573859565633fc6274444bee2f8ce3" + integrity sha512-m9nMwCtLtz29LszVaR0q/FqsJWkrxVoQL95p7JU0us7qUx4WEcySQgwvuneYSGVyvirl81gz7agflS3V1yW14g== + async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== -async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +async@^2.6.1, async@^2.6.3, async@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.3, async@^3.2.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" @@ -1855,15 +3047,36 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + await-to-js@=2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/await-to-js/-/await-to-js-2.1.1.tgz#c2093cd5a386f2bb945d79b292817bbc3f41b31b" integrity sha512-CHBC6gQGCIzjZ09tJ+XmpQoZOn4GdWePB4qUweCaKNJ0D3f115YdhmYVTZ4rMVpiJ3cFzZcTYK1VMYEICV4YXw== +aws-sdk@^2.1271.0, aws-sdk@^2.1338.0: + version "2.1502.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1502.0.tgz#13bc01d63f19bae4ddc3992d8971861d58a740e0" + integrity sha512-mUXUaWmbIyqE6zyIcbUUQIUgw1evK7gV1vQP7ZZEE0qi6hO2Mw99Nc25Bh+187yvRxamMTsFXvvmBViR0Q75SA== + 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" + axios-retry@^3.1.9: - version "3.8.0" - resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.8.0.tgz#a174af633ef143a9f5642b9e4afe65c2017936b5" - integrity sha512-CfIsQyWNc5/AE7x/UEReRUadiBmQeoBpSEC+4QyGLJMswTsP1tz0GW2YYPnE7w9+ESMef5zOgLDFpHynNyEZ1w== + version "3.7.0" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.7.0.tgz#d5007755d257b97e08d846089976f838b9db9ef9" + integrity sha512-ZTnCkJbRtfScvwiRnoVskFAfvU0UG3xNcsjwTR0mawSbIJoothxn67gKsMaNAFHRXJ1RmuLhmZBzvyXi3+9WyQ== dependencies: "@babel/runtime" "^7.15.4" is-retry-allowed "^2.2.0" @@ -1875,28 +3088,37 @@ axios@0.24.0: dependencies: follow-redirects "^1.14.4" -axios@^0.21.4: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^0.27.0: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.14.9" + form-data "^4.0.0" -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" +axios@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" slash "^3.0.0" -babel-plugin-istanbul@^6.0.0: +babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== @@ -1907,39 +3129,39 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" + integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz#1fac2b1dcef6274e72b3c72977ed8325cb330591" - integrity sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg== + version "0.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== dependencies: "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.32.2" + core-js-compat "^3.31.0" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" + integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -1959,12 +3181,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^26.6.2" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" backo2@1.0.2: @@ -1982,7 +3204,7 @@ base64-arraybuffer@0.1.4: resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" integrity sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg== -base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.2.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2005,6 +3227,33 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +basic-auth-parser@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/basic-auth-parser/-/basic-auth-parser-0.0.2.tgz#ce9e71a77f23c1279eecd2659b2a46244c156e41" + integrity sha512-Y7OBvWn+JnW45JWHLY6ybYub2k9cXCMrtCyO1Hds2s6eqClqWhPnOQpgXUPjAiMHj+A8TEPIQQ1dYENnJoBOHQ== + +basic-ftp@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.3.tgz#b14c0fe8111ce001ec913686434fe0c2fb461228" + integrity sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g== + +bignumber.js@^9.0.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bintrees@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" + integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== + bip39@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.3.tgz#4a8b79067d6ed2e74f9199ac994a2ab61b176760" @@ -2015,6 +3264,15 @@ bip39@3.0.3: pbkdf2 "^3.0.9" randombytes "^2.0.1" +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -2025,6 +3283,11 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + boxen@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" @@ -2046,6 +3309,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -2069,18 +3339,18 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== +browser-or-node@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-or-node/-/browser-or-node-1.3.0.tgz#f2a4e8568f60263050a6714b2cc236bb976647a7" + integrity sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg== browserslist@^4.21.10, browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== + version "4.21.10" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" node-releases "^2.0.13" update-browserslist-db "^1.0.13" @@ -2091,6 +3361,16 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -2101,7 +3381,16 @@ buffer-reverse@1.0.1: resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== -buffer@6.0.3: +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@6.0.3, buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -2109,6 +3398,24 @@ buffer@6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" + integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== + +byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/byte-length/-/byte-length-1.0.2.tgz#ba5a5909240b0121c079b7f7b15248d6f08223cc" + integrity sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q== + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2142,19 +3449,25 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" -call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + camelcase@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -2165,15 +3478,15 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001517: + version "1.0.30001529" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001529.tgz#c1f2a411e85fdaace4b1560e1bad078b00ac3181" + integrity sha512-n2pUQYGAkrLG4QYj2desAh+NqsJpHbNmVZz87imptDdxLAtjxary7Df/psdfyDGmskJK/9Dt9cPnx5RZ3CU4Og== capture-exit@^2.0.0: version "2.0.0" @@ -2187,18 +3500,26 @@ capture-stack-trace@^1.0.0: resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz#1c43f6b059d4249e7f3f8724f15f048b927d3a8a" integrity sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w== +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + chai@^4.3.6: - version "4.3.8" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" - integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== + version "4.3.10" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" + integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== dependencies: assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.5" + type-detect "^4.0.8" chalk@1.1.3: version "1.1.3" @@ -2211,7 +3532,7 @@ chalk@1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2220,7 +3541,15 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2238,10 +3567,12 @@ charenc@0.0.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" cheerio-select@^2.1.0: version "2.1.0" @@ -2255,7 +3586,7 @@ cheerio-select@^2.1.0: domhandler "^5.0.3" domutils "^3.0.1" -cheerio@^1.0.0-rc.2: +cheerio@^1.0.0-rc.10, cheerio@^1.0.0-rc.2: version "1.0.0-rc.12" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== @@ -2278,6 +3609,11 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.2.0, ci-info@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -2286,10 +3622,10 @@ cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== class-utils@^0.3.5: version "0.3.6" @@ -2301,6 +3637,13 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +clean-stack@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" + integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== + dependencies: + escape-string-regexp "4.0.0" + cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" @@ -2313,11 +3656,51 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-progress@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" + integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== + dependencies: + string-width "^4.2.3" + cli-spinners@^1.0.1: version "1.3.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== +cli-spinners@^2.2.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-table3@^0.6.0, cli-table3@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -2327,14 +3710,23 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" clone-response@^1.0.2: version "1.0.3" @@ -2343,6 +3735,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2409,15 +3806,20 @@ commander@2.9.0: dependencies: graceful-readlink ">= 1.0.0" +commander@^2.13.0, commander@^2.16.0, commander@^2.19.0, commander@^2.8.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" integrity sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw== -component-emitter@^1.2.1, component-emitter@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +component-emitter@^1.2.1, component-emitter@^1.3.0, component-emitter@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== component-inherit@0.0.3: version "0.0.3" @@ -2425,25 +3827,25 @@ component-inherit@0.0.3: integrity sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA== component-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.1.tgz#8a47901700238e4fc32269771230226f24b415a9" - integrity sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.2.tgz#4458ecc0c1871efc6288bfaff0cbdab08141d079" + integrity sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA== + +compress-commons@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.2.tgz#6542e59cb63e1f46a8b21b0e06f9a32e4c8b06df" + integrity sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.4.7: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - configstore@^3.0.0: version "3.1.5" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" @@ -2456,7 +3858,7 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" -convert-source-map@^1.4.0, convert-source-map@^1.6.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -2471,17 +3873,22 @@ cookie@~0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +cookiejar@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== -core-js-compat@^3.31.0, core-js-compat@^3.32.2: +core-js-compat@^3.31.0: version "3.32.2" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== dependencies: - browserslist "^4.21.10" + browserslist "^4.22.1" core-util-is@~1.0.0: version "1.0.3" @@ -2496,6 +3903,19 @@ cors@~2.8.5: object-assign "^4" vary "^1" +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc32-stream@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.3.tgz#85dd677eb78fa7cad1ba17cc506a597d41fc6f33" + integrity sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + create-error-class@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" @@ -2526,6 +3946,24 @@ create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -2546,7 +3984,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2581,54 +4019,69 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -csv-parse@^4.4.6: +csv-parse@^4.16.3, csv-parse@^4.4.6: version "4.16.3" resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== csv-parse@^5.0.4: - version "5.5.0" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.5.0.tgz#2313421e69b650dae32a79ac884b20b21ca1d9da" - integrity sha512-RxruSK3M4XgzcD7Trm2wEN+SJ26ChIb903+IWxNOcB5q4jT2Cs+hFr6QP39J05EohshRFEvyzEBoZ/466S2sbw== + version "5.5.2" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.5.2.tgz#ab525e642093dccff7c5cca5c7b71fd3e99fe8f2" + integrity sha512-YRVtvdtUNXZCMyK5zd5Wty1W6dNTpGKdqQd4EQ8tl/c6KW1aMBB1Kg1ppky5FONKmEqGJ/8WjLlTNLPne4ioVA== -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== +data-api-client@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/data-api-client/-/data-api-client-1.3.0.tgz#57eba20e3fd6a51b70702ed01a8c30d58a3aaa4c" + integrity sha512-+Q+lChhl5PBogsB7nO/VZFF3X0WJe8y93dyft50HIg2Bg+c765wM/sXkfBz5pjmGoRESkB/GLesQJLTMBbK4dQ== + dependencies: + sqlstring "^2.3.2" + +data-uri-to-buffer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz#540bd4c8753a25ee129035aebdedf63b078703c7" + integrity sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg== + +datadog-metrics@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.9.3.tgz#e62d92b9619129805802d82111c8bcc4439fc859" + integrity sha512-BVsBX2t+4yA3tHs7DnB5H01cHVNiGJ/bHA8y6JppJDyXG7s2DLm6JaozPGpgsgVGd42Is1CHRG/yMDQpt877Xg== + dependencies: + debug "3.1.0" + dogapi "2.8.4" + +date-fns@^2.29.3: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" + "@babel/runtime" "^7.21.0" date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -2643,28 +4096,23 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - decode-uri-component@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== +decomment@^0.9.2: + version "0.9.5" + resolved "https://registry.yarnpkg.com/decomment/-/decomment-0.9.5.tgz#61753c80b8949620eb6bc3f8246cc0e2720ceac1" + integrity sha512-h0TZ8t6Dp49duwyDHo3iw67mnh9/UpFiSSiOb5gDK1sqoXzrfX/SQxIUQd2R2QEiSnqib0KF2fnKnGfAhAs6lg== + dependencies: + esprima "4.0.1" + decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -2672,7 +4120,12 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -deep-eql@^4.1.2: +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + +deep-eql@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== @@ -2680,16 +4133,16 @@ deep-eql@^4.1.2: type-detect "^4.0.0" deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + version "1.1.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" + integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" + is-arguments "^1.1.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + object-is "^1.1.5" object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" + regexp.prototype.flags "^1.5.1" deep-extend@^0.6.0: version "0.6.0" @@ -2713,20 +4166,18 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + defer-to-connect@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - define-properties@^1.1.3, define-properties@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -2758,25 +4209,163 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" + integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== + +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +dependency-tree@^6.1.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-6.5.0.tgz#666d6838c2d8eab0eeeb2e2d19eafcbdda336cde" + integrity sha512-r0KO5BkQy8sMbyTD8NxSDOexsySbGpSH5fIsxCLZjarFTXMryiZoR7+Ao6OWkwLz6OeQPYCOIjUDh+knWitMEw== + dependencies: + commander "^2.19.0" + debug "^4.1.1" + filing-cabinet "^2.3.0" + precinct "^5.3.1" + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detective-amd@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-3.1.2.tgz#bf55eb5291c218b76d6224a3d07932ef13a9a357" + integrity sha512-jffU26dyqJ37JHR/o44La6CxtrDf3Rt9tvd2IbImJYxWKTMdBjctp37qoZ6ZcY80RHg+kzWz4bXn39e4P7cctQ== + dependencies: + ast-module-types "^3.0.0" + escodegen "^2.0.0" + get-amd-module-type "^3.0.0" + node-source-walk "^4.2.0" + +detective-cjs@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/detective-cjs/-/detective-cjs-3.1.3.tgz#50e107d67b37f459b0ec02966ceb7e20a73f268b" + integrity sha512-ljs7P0Yj9MK64B7G0eNl0ThWSYjhAaSYy+fQcpzaKalYl/UoQBOzOeLCSFEY1qEBhziZ3w7l46KG/nH+s+L7BQ== + dependencies: + ast-module-types "^3.0.0" + node-source-walk "^4.0.0" + +detective-es6@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/detective-es6/-/detective-es6-2.2.2.tgz#ee5f880981d9fecae9a694007029a2f6f26d8d28" + integrity sha512-eZUKCUsbHm8xoeoCM0z6JFwvDfJ5Ww5HANo+jPR7AzkFpW9Mun3t/TqIF2jjeWa2TFbAiGaWESykf2OQp3oeMw== + dependencies: + node-source-walk "^4.0.0" + +detective-less@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/detective-less/-/detective-less-1.0.2.tgz#a68af9ca5f69d74b7d0aa190218b211d83b4f7e3" + integrity sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA== + dependencies: + debug "^4.0.0" + gonzales-pe "^4.2.3" + node-source-walk "^4.0.0" + +detective-postcss@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-3.0.1.tgz#511921951f66135e17d0ece2e7604c6e4966c9c6" + integrity sha512-tfTS2GdpUal5NY0aCqI4dpEy8Xfr88AehYKB0iBIZvo8y2g3UsrcDnrp9PR2FbzoW7xD5Rip3NJW7eCSvtqdUw== + dependencies: + debug "^4.1.1" + is-url "^1.2.4" + postcss "^7.0.2" + postcss-values-parser "^1.5.0" + +detective-sass@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/detective-sass/-/detective-sass-3.0.2.tgz#e0f35aac79a4d2f6409c284d95b8f7ecd5973afd" + integrity sha512-DNVYbaSlmti/eztFGSfBw4nZvwsTaVXEQ4NsT/uFckxhJrNRFUh24d76KzoCC3aarvpZP9m8sC2L1XbLej4F7g== + dependencies: + gonzales-pe "^4.3.0" + node-source-walk "^4.0.0" + +detective-scss@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detective-scss/-/detective-scss-2.0.2.tgz#7d2a642616d44bf677963484fa8754d9558b8235" + integrity sha512-hDWnWh/l0tht/7JQltumpVea/inmkBaanJUcXRB9kEEXVwVUMuZd6z7eusQ6GcBFrfifu3pX/XPyD7StjbAiBg== + dependencies: + gonzales-pe "^4.3.0" + node-source-walk "^4.0.0" + +detective-stylus@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detective-stylus/-/detective-stylus-1.0.3.tgz#20a702936c9fd7d4203fd7a903314b5dd43ac713" + integrity sha512-4/bfIU5kqjwugymoxLXXLltzQNeQfxGoLm2eIaqtnkWxqbhap9puDVpJPVDx96hnptdERzS5Cy6p9N8/08A69Q== + +detective-typescript@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-4.1.2.tgz#796ef6215a948ce3a11ec7e787a6c2c03db62d35" + integrity sha512-jeQMIN/0hjMdMpFGoo9y+ibo+dTb1Vbg6z/peHoRMR69jqH691kgz1gT5XM5UfkDD/Ru0save1bSJBmUr2yjvQ== + dependencies: + node-source-walk "^4.0.0" + typescript "^3.0.3" + typescript-eslint-parser "^18.0.0" + +detective@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== + dependencies: + acorn-node "^1.8.2" + defined "^1.0.0" + minimist "^1.2.6" + +dezalgo@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dogapi@2.8.4, dogapi@^2.8.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-2.8.4.tgz#ada64f20c6acdea206b9fd9e70df0c96241b6621" + integrity sha512-065fsvu5dB0o4+ENtLjZILvXMClDNH/yA9H6L8nsdcNiz9l0Hzpn7aQaCOPYXxqyzq4CRPOdwkFXUjDOXfRGbg== + dependencies: + extend "^3.0.2" + json-bigint "^1.0.0" + lodash "^4.17.21" + minimist "^1.2.5" + rc "^1.2.8" dom-serializer@^2.0.0: version "2.0.0" @@ -2792,13 +4381,6 @@ domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" @@ -2822,7 +4404,17 @@ dot-prop@^4.2.1: dependencies: is-obj "^1.0.0" -driftless@^2.0.3: +dotenv@16.0.1: + version "16.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" + integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== + +dotenv@^16.0.1, dotenv@^16.0.3: + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + +driftless@2.0.3, driftless@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/driftless/-/driftless-2.0.3.tgz#4378cade7aa8e39dee33faa94413bdc67850d90b" integrity sha512-hSDKsQphnL4O0XLAiyWQ8EiM9suXH0Qd4gMtwF86b5wygGV8r95w0JcA38FOmx9N3LjFCIHLG2winLPNken4Tg== @@ -2834,22 +4426,22 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.477: + version "1.4.512" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.512.tgz#f6c14d4d2ddacf064f1de36dbd3f6a469821a7ee" + integrity sha512-1W8wRbYlQE4ph7eoj3TJ+uqwO6+xvAE/L+KGU7WTQQvX3tnSIGZAb90MTsMoJqzntamiwJhBAj4WZmygXhsOUg== -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -2874,9 +4466,9 @@ engine.io-client@~3.5.0: yeast "0.1.2" engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -2901,9 +4493,9 @@ engine.io-parser@~5.2.1: integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== engine.io@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c" - integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -2916,11 +4508,32 @@ engine.io@~6.5.2: engine.io-parser "~5.2.1" ws "~8.11.0" +enhanced-resolve@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +ensure-posix-path@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" + integrity sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw== + entities@^4.2.0, entities@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +errno@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2933,6 +4546,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2955,7 +4573,7 @@ escodegen@^1.8.1: optionalDependencies: source-map "~0.6.1" -escodegen@^2.0.0: +escodegen@^2.0.0, escodegen@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== @@ -2966,12 +4584,26 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" +eslint-visitor-keys@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +espree@^9.4.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + esprima@1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b" integrity sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A== -esprima@^4.0.0, esprima@^4.0.1: +esprima@4.0.1, esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -2991,15 +4623,20 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eventemitter3@^4.0.0: +eventemitter3@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.1.1.tgz#47786bdaa087caf7b1b75e73abc5c7d540158cd0" + integrity sha512-idmH3G0vJjQv2a5N74b+oXcOUKYBqSGJGN1eVV6ELGdUnesAO8RZsU74eaS3VfldRet8N9pFupxppBUKztrBdQ== + +eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== execa@^0.7.0: version "0.7.0" @@ -3027,19 +4664,19 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + 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.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exit@^0.1.2: @@ -3072,17 +4709,16 @@ expect@^24.1.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" extend-shallow@^2.0.1: version "2.0.1" @@ -3099,6 +4735,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +extend@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -3113,21 +4754,63 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-json-stable-stringify@^2.0.0: +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + 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" + +fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-levenshtein@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== + dependencies: + fastest-levenshtein "^1.0.7" + fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fast-xml-parser@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" + integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== + dependencies: + strnum "^1.0.5" + +fastest-levenshtein@^1.0.7: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + fb-watchman@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" @@ -3135,6 +4818,42 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +file-exists-dazinatorfork@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/file-exists-dazinatorfork/-/file-exists-dazinatorfork-1.0.2.tgz#cd8d0d85f63e39dc81eceb0b687c44a2cca95c47" + integrity sha512-r70c72ln2YHzQINNfxDp02hAhbGkt1HffZ+Du8oetWDLjDtFja/Lm10lUaSh9e+wD+7VDvPee0b0C9SAy8pWZg== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filing-cabinet@^2.3.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/filing-cabinet/-/filing-cabinet-2.6.0.tgz#3d4d5093a98b6fae84cf282e8bded1b8ad5f9c0c" + integrity sha512-7kSlTScEkxoYKXCix7tAQ52ZeIHcx7ZWWArEZgXY+eTMe6yDYFdDhHdkXm9rSmvrrpzdZeR1wiufS1rUt4OzMA== + dependencies: + app-module-path "^2.2.0" + commander "^2.13.0" + debug "^4.1.1" + decomment "^0.9.2" + enhanced-resolve "^4.1.0" + is-relative-path "^1.0.2" + module-definition "^3.0.0" + module-lookup-amd "^6.1.0" + resolve "^1.11.1" + resolve-dependency-path "^2.0.0" + sass-lookup "^3.0.0" + stylus-lookup "^3.0.1" + typescript "^3.0.3" + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3157,6 +4876,11 @@ filtrex@^0.5.4: resolved "https://registry.yarnpkg.com/filtrex/-/filtrex-0.5.4.tgz#98075d518f068c4f58b7b589a227d98bd9f6395d" integrity sha512-2phGAjWOYRf96Al6s+w/hMjObP1cRyQ95hoZApjeFO75DXN4Flh9uuUAtL3LI4fkryLa2QWdA8MArvt0GMU0pA== +filtrex@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/filtrex/-/filtrex-2.2.3.tgz#299dff339ac957558e3f56fa46e9a850b362d64b" + integrity sha512-TL12R6SckvJdZLibXqyp4D//wXZNyCalVYGqaWwQk9zucq9dRxmrJV4oyuRq4PHFHCeV5ZdzncIc/Ybqv1Lr6Q== + find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -3172,22 +4896,29 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8" + integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw== + dependencies: + traverse-chain "~0.1.0" + flatted@^3.2.7: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.4: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== -form-data@^2.0.0, form-data@^2.3.3: +form-data@^2.3.3: version "2.5.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== @@ -3205,6 +4936,25 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formidable@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89" + integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== + dependencies: + dezalgo "^1.0.4" + hexoid "^1.0.0" + once "^1.4.0" + qs "^6.11.0" + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -3212,6 +4962,20 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -3226,15 +4990,20 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.1.2: +fsevents@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +fsevents@^2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== functions-have-names@^1.2.3: version "1.2.3" @@ -3246,30 +5015,43 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +get-amd-module-type@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-3.0.2.tgz#46550cee2b8e1fa4c3f2c8a5753c36990aa49ab0" + integrity sha512-PcuKwB8ouJnKuAPn6Hk3UtdfKoUV3zXRqVEvj8XGIXqjWfgd1j7QGdXy5Z9OdQfzVt1Sk29HVe/P+X74ccOuqw== + dependencies: + ast-module-types "^3.0.0" + node-source-walk "^4.2.2" + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-func-name@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== get-package-type@^0.1.0: version "0.1.0" @@ -3288,19 +5070,41 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-uri@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.2.tgz#e019521646f4a8ff6d291fbaea2c46da204bb75b" + integrity sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^6.0.0" + debug "^4.3.4" + fs-extra "^8.1.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3312,6 +5116,17 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -3324,13 +5139,6 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - got@^11.8.2: version "11.8.6" resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" @@ -3365,7 +5173,7 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -3375,11 +5183,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w== -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== - has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -3410,11 +5213,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -3464,13 +5267,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hash-base@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" @@ -3485,28 +5281,53 @@ hash-wasm@4.9.0: resolved "https://registry.yarnpkg.com/hash-wasm/-/hash-wasm-4.9.0.tgz#7e9dcc9f7d6bd0cc802f2a58f24edce999744206" integrity sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +hdr-histogram-js@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-1.2.0.tgz#1213c0b317f39b9c05bc4f208cb7931dbbc192ae" + integrity sha512-h0YToJ3ewqsaZ3nFTTa6dLOD7sqx+EgdC4+OcJ9Ou7zZDlT0sXSPHHr3cyenQsPqqbVHGn/oFY6zjfEKXGvzmQ== + dependencies: + base64-js "^1.2.0" + pako "^1.0.3" + header-case-normalizer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/header-case-normalizer/-/header-case-normalizer-1.0.3.tgz#fb1d4c8d0c6169dcab4f7c7e21b186a6a22ac0c1" integrity sha512-wKAlzwV5I4m/am8J9eUN3S7WyXJufzMAKjmNScCbqlUF2J42kx8Nx8blw/L9z3tGklVuTYUo1dhohpG6RaV7LA== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hex2dec@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hex2dec/-/hex2dec-1.0.1.tgz#949bb33f1fdbbeab20e06403a00fc7d5ff284207" + integrity sha512-F9QO0+ZI8r1VZudxw21bD/U5pb2Y9LZY3TsnVqCPaijvw5mIhH5jsH29acLPijl5fECfD8FetJtgX8GN5YPM9Q== + +hexoid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" + integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +hot-shots@^6.0.1: + version "6.8.7" + resolved "https://registry.yarnpkg.com/hot-shots/-/hot-shots-6.8.7.tgz#9a19502e0b87e3550a257d31760f1fa71155a770" + integrity sha512-XH8iezBSZgVw2jegu96pUfF1Zv0VZ/iXjb7L5yE3F7mn7/bdhf4qeniXjO0wQWeefe433rhOsazNKLxM+XMI9w== + optionalDependencies: + unix-dgram "2.0.x" hpagent@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/hpagent/-/hpagent-0.1.2.tgz#cab39c66d4df2d4377dbd212295d878deb9bdaa9" integrity sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ== -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -3527,14 +5348,13 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" + agent-base "^7.1.0" + debug "^4.3.4" http-proxy@^1.18.1: version "1.18.1" @@ -3553,6 +5373,14 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" +https-proxy-agent@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -3561,10 +5389,18 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +https-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== + dependencies: + agent-base "^7.0.2" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-ms@^1.2.1: version "1.2.1" @@ -3573,18 +5409,26 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" +hyperlinker@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== -ieee754@^1.2.1: +ieee754@1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -3603,6 +5447,16 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA== + indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" @@ -3631,21 +5485,24 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== - dependencies: - kind-of "^3.0.2" +ip@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +is-accessor-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" + integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== dependencies: - kind-of "^6.0.0" + hasown "^2.0.0" -is-arguments@^1.0.4: +is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== @@ -3663,6 +5520,18 @@ is-buffer@^1.1.5, is-buffer@~1.1.6: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-builtin-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-2.0.0.tgz#431104b3b4ba838ec7a17d82bb3bccd2233e8cd9" + integrity sha512-G2jLHphOywpgrL/AaJKWDXpdpGR9X4V1PCkB+EwG5Z28z8EukgdWnAUFAS2wdBtIpwHhHBIiq0NBOWEbSXN0Rg== + dependencies: + builtin-modules "^2.0.0" + +is-callable@^1.1.3: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" @@ -3678,27 +5547,20 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - kind-of "^3.0.2" + hasown "^2.0.0" -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== +is-data-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" + integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== dependencies: - kind-of "^6.0.0" + hasown "^2.0.0" -is-date-object@^1.0.1: +is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -3706,22 +5568,20 @@ is-date-object@^1.0.1: has-tostringtag "^1.0.0" is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + version "0.1.7" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" + integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" + integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" is-docker@^2.0.0: version "2.2.1" @@ -3740,6 +5600,11 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -3762,6 +5627,20 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -3770,6 +5649,11 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -3787,7 +5671,7 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0: +is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== @@ -3806,17 +5690,12 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" integrity sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw== -is-regex@^1.0.4: +is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -3824,6 +5703,16 @@ is-regex@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-relative-path@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-relative-path/-/is-relative-path-1.0.2.tgz#091b46a0d67c1ed0fe85f1f8cfdde006bb251d46" + integrity sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA== + is-retry-allowed@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" @@ -3844,10 +5733,17 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== +is-typed-array@^1.1.3: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== is-windows@^1.0.2: version "1.0.2" @@ -3866,7 +5762,7 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== @@ -3898,25 +5794,15 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-ws@4.0.1: +isomorphic-ws@4.0.1, isomorphic-ws@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4: version "5.2.1" @@ -3929,6 +5815,17 @@ istanbul-lib-instrument@^5.0.4: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -3947,7 +5844,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: +istanbul-reports@^3.1.3: version "3.1.6" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== @@ -3955,57 +5852,95 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.4" import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" + ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" jest-diff@^24.9.0: version "24.9.0" @@ -4017,58 +5952,45 @@ jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-mock "^29.7.0" + jest-util "^29.7.0" jest-extended@^0.11.5: version "0.11.5" @@ -4089,63 +6011,37 @@ jest-get-type@^24.9.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" jest-matcher-utils@^22.0.0: version "22.4.3" @@ -4166,15 +6062,15 @@ jest-matcher-utils@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" jest-message-util@^24.9.0: version "24.9.0" @@ -4190,20 +6086,20 @@ jest-message-util@^24.9.0: slash "^2.0.0" stack-utils "^1.0.1" -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" slash "^3.0.0" - stack-utils "^2.0.2" + stack-utils "^2.0.3" jest-mock@^24.9.0: version "24.9.0" @@ -4212,13 +6108,14 @@ jest-mock@^24.9.0: dependencies: "@jest/types" "^24.9.0" -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -4230,122 +6127,114 @@ jest-regex-util@^24.9.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^26.6.2" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" - cjs-module-lexer "^0.6.0" + cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" jest-util@^24.9.0: version "24.9.0" @@ -4365,29 +6254,29 @@ jest-util@^24.9.0: slash "^2.0.0" source-map "^0.6.0" -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" + "@jest/types" "^29.6.3" + camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^26.3.0" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^26.6.2" + pretty-format "^29.7.0" jest-watch-toggle-config@^1.0.2: version "1.0.2" @@ -4422,41 +6311,49 @@ jest-watcher@^24.3.0: jest-util "^24.9.0" string-length "^2.0.0" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.6.2" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" -jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^26.6.3" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^26.6.3" + jest-cli "^29.7.0" + +jmespath@0.16.0, jmespath@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" + integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== joi@^17.6.0: - version "17.10.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.2.tgz#4ecc348aa89ede0b48335aad172e0f5591e55b29" - integrity sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA== + version "17.10.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.1.tgz#f908ee1617137cca5d83b91587cde80e472b5753" + integrity sha512-vIiDxQKmRidUVp8KngT8MZSOcmRVm2zV7jbMjNYWuHcJWI0bUck3nRTGQjhpPlQenIQIBC5Vp9AhcnHbWQqafw== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -4479,7 +6376,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: +js-yaml@^3.13.1, js-yaml@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -4492,39 +6389,6 @@ jsck@^0.3.2: resolved "https://registry.yarnpkg.com/jsck/-/jsck-0.3.2.tgz#8e06b31bb57b0090e503dd4ee6ad0f269dff1a55" integrity sha512-N4mYMCN7+NiI5+hAOqB2+72rMNcDe4ol8zY+NkA5h1lPuUd20vvfTB5bHfU9cO1nndVZSYaz1PhGPL6secO2BA== -jsdom@^16.4.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -4535,6 +6399,13 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -4562,6 +6433,20 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonpath-plus@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz#7ad94e147b3ed42f7939c315d2b9ce490c5a3899" + integrity sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA== + jsonpath@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.1.1.tgz#0ca1ed8fb65bb3309248cc9d5466d12d5b0b9901" @@ -4571,10 +6456,43 @@ jsonpath@^1.0.2: static-eval "2.0.2" underscore "1.12.1" +jsonwebtoken@^9.0.1: + version "9.0.2" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + keyv@^4.0.0: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -4592,12 +6510,7 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -4614,6 +6527,13 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -4621,6 +6541,11 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +leven@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -4634,6 +6559,28 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libhoney@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/libhoney/-/libhoney-4.1.0.tgz#82d3398d6d71b9046fdb282cbf19f35077f572dc" + integrity sha512-U8oCouZXzjlO67wAhDyvnskn9MJFIzTWkxpzsAawUU4nQLMSdISgaGL64eqAeElLRnjlA4hhREr8zOz1So0+yg== + dependencies: + proxy-agent "^6.3.0" + superagent "^8.0.0" + url-join "^5.0.0" + +lightstep-tracer@^0.31.0: + version "0.31.2" + resolved "https://registry.yarnpkg.com/lightstep-tracer/-/lightstep-tracer-0.31.2.tgz#be012db51de963adde3fa630ec29bd01053da1e3" + integrity sha512-DRdyUrASPkr+hxyHQJ9ImPSIxpUCpqQvfgHwxoZ42G6iEJ2g0/2chCw39tuz60JUmLfTlVp1LFzLscII6YPRoA== + dependencies: + async "1.5.0" + eventemitter3 "1.1.1" + google-protobuf "3.6.1" + hex2dec "1.0.1" + opentracing "^0.14.4" + source-map-support "0.3.3" + thrift "^0.14.1" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -4654,6 +6601,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.clonedeep@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -4664,12 +6616,72 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== -lodash@^4.17.11, lodash@^4.17.21, lodash@^4.7.0: +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg== + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4681,6 +6693,23 @@ log-symbols@^2.1.0: dependencies: chalk "^2.0.1" +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + log4js@^6.4.7: version "6.9.1" resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" @@ -4692,12 +6721,17 @@ log4js@^6.4.7: rfdc "^1.3.0" streamroller "^3.1.5" -loupe@^2.3.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - get-func-name "^2.0.0" + get-func-name "^2.0.1" lowercase-keys@^1.0.0: version "1.0.1" @@ -4731,6 +6765,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + lynx@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/lynx/-/lynx-0.2.0.tgz#79e6674530da4183e87953bd686171e070da50b9" @@ -4746,6 +6785,14 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -4753,14 +6800,14 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error-cause@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d" - integrity sha512-4TO2Y3HkBnis4c0dxhAgD/jprySYLACf7nwN6V0HAHDx59g12WlRpUmFy1bRHamjGUEEBrEvCq6SUpsEE2lhUg== +make-error-cause@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-2.3.0.tgz#ecd11875971e506d510e93d37796e5b83f46d6f9" + integrity sha512-etgt+n4LlOkGSJbBTV9VROHA5R7ekIPS4vfh+bCAoJgRrJWdqJCBbpS3osRJ/HrT7R68MzMiY3L3sDJ/Fd8aBg== dependencies: - make-error "^1.2.0" + make-error "^1.3.5" -make-error@^1.2.0: +make-error@^1.1.1, make-error@^1.3.5: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -4791,6 +6838,13 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +matcher-collection@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.1.2.tgz#1076f506f10ca85897b53d14ef54f90a5c426838" + integrity sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g== + dependencies: + minimatch "^3.0.2" + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -4818,17 +6872,35 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + mersenne@~0.0.3: version "0.0.4" resolved "https://registry.yarnpkg.com/mersenne/-/mersenne-0.0.4.tgz#401fdec7ec21cdb9e03cd3d3021398da21b27085" integrity sha512-XoSUL+nF8hMTKGQxUs8r3Btdsf1yuKKBdCCGbh3YXgCXuVKishpZv1CNc385w9s8t4Ynwc5h61BwW/FCVulkbg== -micromatch@^3.1.10, micromatch@^3.1.4: +methods@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -4847,7 +6919,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: +micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -4867,6 +6939,11 @@ mime-types@^2.1.12, mime-types@~2.1.34: dependencies: mime-db "1.52.0" +mime@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -4887,14 +6964,21 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: +minimatch@^5.0.1, minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -4907,6 +6991,13 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mixpanel@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/mixpanel/-/mixpanel-0.13.0.tgz#699bf510d9ba013c75edcf979ff1e24085fde9d2" + integrity sha512-YOWmpr/o4+zJ8LPjuLUkWLc2ImFeIkX6hF1t62Wlvq6loC6e8EK8qieYO4gYPTPxxtjAryl7xmIvf/7qnPwjrQ== + dependencies: + https-proxy-agent "5.0.0" + mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -4914,6 +7005,11 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" +mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + mockserver@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/mockserver/-/mockserver-3.1.1.tgz#0fdc629dfd2b88141e1ca42e82364379a325acd8" @@ -4924,11 +7020,36 @@ mockserver@^3.1.1: js-combinatorics "^0.5.0" yargs "^12.0.1" -moment@^2.22.1, moment@^2.29.4: +module-definition@^3.0.0, module-definition@^3.1.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-3.4.0.tgz#953a3861f65df5e43e80487df98bb35b70614c2b" + integrity sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA== + dependencies: + ast-module-types "^3.0.0" + node-source-walk "^4.0.0" + +module-lookup-amd@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/module-lookup-amd/-/module-lookup-amd-6.2.0.tgz#70600008b3f26630fde9ef9ae6165ac69de6ecbb" + integrity sha512-uxHCj5Pw9psZiC1znjU2qPsubt6haCSsN9m7xmIdoTciEgfxUkE1vhtDvjHPuOXEZrVJhjKgkmkP+w73rRuelQ== + dependencies: + commander "^2.8.1" + debug "^4.1.0" + file-exists-dazinatorfork "^1.0.2" + find "^0.3.0" + requirejs "^2.3.5" + requirejs-config-file "^3.1.1" + +moment@^2.22.1, moment@^2.22.2, moment@^2.29.4: version "2.29.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +mri@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" + integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4944,6 +7065,30 @@ ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.16.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" + integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + +nanoid@^3.3.4: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -4976,59 +7121,47 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +natural-orderby@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" + integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== + negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-gyp-build@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" - integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + version "4.7.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.7.1.tgz#cd7d2eb48e594874053150a9418ac85af83ca8f7" + integrity sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg== node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - node-releases@^2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== +node-source-walk@^4.0.0, node-source-walk@^4.2.0, node-source-walk@^4.2.2: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-4.3.0.tgz#8336b56cfed23ac5180fe98f1e3bb6b11fd5317c" + integrity sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA== dependencies: - remove-trailing-separator "^1.0.1" + "@babel/parser" "^7.0.0" normalize-path@^3.0.0: version "3.0.0" @@ -5040,6 +7173,11 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +notepack.io@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/notepack.io/-/notepack.io-2.2.0.tgz#d7ea71d1cb90094f88c6f3c8d84277c2d0cd101c" + integrity sha512-9b5w3t5VSH6ZPosoYnyDONnUTF8o0UkBw7JLA6eBlYJWyGT1Q3vQa8Hmuj1/X6RYvHjjygBDgw6fJhe0JEojfw== + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -5047,7 +7185,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -5066,12 +7204,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - -object-assign@^4: +object-assign@^4, object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -5085,7 +7218,12 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-is@^1.0.1: +object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -5098,6 +7236,11 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +object-treeify@^1.1.33: + version "1.1.33" + resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" + integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -5126,13 +7269,18 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" +opentracing@^0.14.4, opentracing@^0.14.5: + version "0.14.7" + resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.7.tgz#25d472bd0296dc0b64d7b94cbc995219031428f5" + integrity sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q== + opn@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -5152,7 +7300,7 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^1.3.0: +ora@^1.3.0, ora@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ora/-/ora-1.4.0.tgz#884458215b3a5d4097592285f93321bb7a79e2e5" integrity sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw== @@ -5162,6 +7310,20 @@ ora@^1.3.0: cli-spinners "^1.0.1" log-symbols "^2.1.0" +ora@^4.0.4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" + integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== + dependencies: + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -5171,7 +7333,7 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@~1.0.1: +os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== @@ -5186,11 +7348,6 @@ p-defer@^1.0.0: resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -5208,6 +7365,13 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -5227,6 +7391,29 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pac-proxy-agent@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz#6b9ddc002ec3ff0ba5fdf4a8a21d363bcc612d75" + integrity sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.0.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" + pac-resolver "^7.0.0" + socks-proxy-agent "^8.0.2" + +pac-resolver@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.0.tgz#79376f1ca26baf245b96b34c339d79bff25e900c" + integrity sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg== + dependencies: + degenerator "^5.0.0" + ip "^1.1.8" + netmask "^2.0.2" + package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" @@ -5237,7 +7424,12 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" -parse-json@^5.0.0: +pako@^1.0.3: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -5247,6 +7439,13 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" @@ -5255,7 +7454,12 @@ parse5-htmlparser2-tree-adapter@^7.0.0: domhandler "^5.0.2" parse5 "^7.0.0" -parse5@6.0.1: +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -5282,6 +7486,14 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== +password-prompt@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" + integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== + dependencies: + ansi-escapes "^4.3.2" + cross-spawn "^7.0.3" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -5317,6 +7529,11 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" @@ -5333,12 +7550,17 @@ pbkdf2@^3.0.9: safe-buffer "^5.0.1" sha.js "^2.4.8" +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -5348,7 +7570,12 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== -pirates@^4.0.1: +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== @@ -5360,25 +7587,91 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -popsicle@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/popsicle/-/popsicle-10.0.1.tgz#2abd36130560647c74eaf08400d473ae25c4486f" - integrity sha512-IFVBRz+hc05+MiVDH+KH9QoeE6gjFOiIZNxKePIwz+JbH/yP9rLreUT9+GocxRweYBiRh7O9+MfI5X1zKfSH6Q== +playwright-core@1.39.0: + version "1.39.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.39.0.tgz#efeaea754af4fb170d11845b8da30b2323287c63" + integrity sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw== + +playwright@1.39.0: + version "1.39.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.39.0.tgz#184c81cd6478f8da28bcd9e60e94fcebf566e077" + integrity sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw== + dependencies: + playwright-core "1.39.0" + optionalDependencies: + fsevents "2.3.2" + +popsicle-content-encoding@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/popsicle-content-encoding/-/popsicle-content-encoding-1.0.0.tgz#2ab419083fee0387bf6e64d21b1a9af560795adb" + integrity sha512-4Df+vTfM8wCCJVTzPujiI6eOl3SiWQkcZg0AMrOkD1enMXsF3glIkFUZGvour1Sj7jOWCsNSEhBxpbbhclHhzw== + +popsicle-cookie-jar@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/popsicle-cookie-jar/-/popsicle-cookie-jar-1.0.1.tgz#a33bdafac85fe499989c73805216b71db2ef328d" + integrity sha512-QVIZhADP8nDbXIQW6wq8GU9IOSE8INUACO/9KD9TFKQ7qq8r/y3qUDz59xIi6p6TH19lCJJyBAPSXP1liIoySw== + dependencies: + "@types/tough-cookie" "^4.0.2" + tough-cookie "^4.1.3" + +popsicle-redirects@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/popsicle-redirects/-/popsicle-redirects-1.1.1.tgz#da0936ed97f0ea22b16daa028bc624cb5b6ce05d" + integrity sha512-mC2HrKjdTAWDalOjGxlXw9j6Qxrz/Yd2ui6bPxpi2IQDYWpF4gUAMxbA8EpSWJhLi0PuWKDwTHHPrUPGutAoIA== + +popsicle-transport-http@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/popsicle-transport-http/-/popsicle-transport-http-1.2.1.tgz#35fdf4a59f429470b13b62f4223ec0249e3a163b" + integrity sha512-i5r3IGHkGiBDm1oPFvOfEeSGWR0lQJcsdTqwvvDjXqcTHYJJi4iSi3ecXIttDiTBoBtRAFAE9nF91fspQr63FQ== dependencies: - "@types/concat-stream" "^1.6.0" - "@types/form-data" "0.0.33" - "@types/methods" "^1.1.0" - "@types/tough-cookie" "^2.3.0" - concat-stream "^1.4.7" - form-data "^2.0.0" - make-error-cause "^1.2.1" - tough-cookie "^2.0.0" + make-error-cause "^2.2.0" + +popsicle-transport-xhr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/popsicle-transport-xhr/-/popsicle-transport-xhr-2.0.0.tgz#23d5fabb0e50e321d50219860825c27cd827ddd9" + integrity sha512-5Sbud4Widngf1dodJE5cjEYXkzEUIl8CzyYRYR57t6vpy9a9KPGQX6KBKdPjmBZlR5A06pOBXuJnVr23l27rtA== + +popsicle-user-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/popsicle-user-agent/-/popsicle-user-agent-1.0.0.tgz#976af355b605966168733c4e03ad1e4f783f5d48" + integrity sha512-epKaq3TTfTzXcxBxjpoKYMcTTcAX8Rykus6QZu77XNhJuRHSRxMd+JJrbX/3PFI0opFGSN0BabbAYCbGxbu0mA== + +popsicle@^12.1.0: + version "12.1.2" + resolved "https://registry.yarnpkg.com/popsicle/-/popsicle-12.1.2.tgz#75dc39873dabc12b17ecb3ee19d033cce976fb40" + integrity sha512-xE2vEUa15TiHvFhGmKTtdKk9aSLL5CHX8Vw5kHfVM3R0YHiaTon6Ybsamw0XYqMR+Ng2RijX88iYUKPBMpLBww== + dependencies: + popsicle-content-encoding "^1.0.0" + popsicle-cookie-jar "^1.0.1" + popsicle-redirects "^1.1.0" + popsicle-transport-http "^1.1.0" + popsicle-transport-xhr "^2.0.0" + popsicle-user-agent "^1.0.0" + servie "^4.3.3" + throwback "^4.1.0" posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== +postcss-values-parser@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-1.5.0.tgz#5d9fa63e2bcb0179ce48f3235303765eb89f3047" + integrity sha512-3M3p+2gMp0AH3da530TlX8kiO1nxdTnc3C6vr8dMxRLIlh8UYkz0/wcwptSXjhtx2Fr0TySI7a+BHDQ8NL7LaQ== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@^7.0.2: + version "7.0.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + posthog-node@^1.1.3: version "1.3.0" resolved "https://registry.yarnpkg.com/posthog-node/-/posthog-node-1.3.0.tgz#804ed2f213a2f05253f798bf9569d55a9cad94f7" @@ -5393,6 +7686,32 @@ posthog-node@^1.1.3: remove-trailing-slash "^0.1.1" uuid "^8.3.2" +posthog-node@^2.2.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/posthog-node/-/posthog-node-2.6.0.tgz#63665d85806a20ea023ea6ce9ac4e114e082a351" + integrity sha512-/BiFw/jwdP0uJSRAIoYqLoBTjZ612xv74b1L/a3T/p1nJVL8e0OrHuxbJW56c6WVW/IKm9gBF/zhbqfaz0XgJQ== + dependencies: + axios "^0.27.0" + +precinct@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/precinct/-/precinct-5.3.1.tgz#4ab0ec1d1a8f1b2f4982b810d56419e7b3025870" + integrity sha512-HOIXDarP6S5JXYC5GhnpoAj9RqJ6yAwZ8VI71vQFlq1rmkBRPs+Mt60TOr7DUc/fx309iIQaniB4x3zueOOSdw== + dependencies: + commander "^2.19.0" + debug "^4.1.1" + detective-amd "^3.0.0" + detective-cjs "^3.1.1" + detective-es6 "^2.0.0" + detective-less "^1.0.2" + detective-postcss "^3.0.0" + detective-sass "^3.0.0" + detective-scss "^2.0.0" + detective-stylus "^1.0.0" + detective-typescript "^4.1.2" + module-definition "^3.1.0" + node-source-walk "^4.2.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -5426,21 +7745,27 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +prom-client@^14.0.1: + version "14.2.0" + resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-14.2.0.tgz#ca94504e64156f6506574c25fb1c34df7812cf11" + integrity sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA== + dependencies: + tdigest "^0.1.1" + prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -5449,6 +7774,57 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" +protobufjs@^7.2.3, protobufjs@^7.2.4: + version "7.2.5" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.5.tgz#45d5c57387a6d29a17aab6846dcc283f9b8e7f2d" + integrity sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +proxy-agent@^6.3.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.3.1.tgz#40e7b230552cf44fd23ffaf7c59024b692612687" + integrity sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" + lru-cache "^7.14.1" + pac-proxy-agent "^7.0.1" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.2" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +proxy@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/proxy/-/proxy-1.0.2.tgz#e0cfbe11c0a7a8b238fd2d7134de4e2867578e7f" + integrity sha512-KNac2ueWRpjbUh77OAFPZuNdfEqNynm9DD4xHT14CccGpW8wKZwEkN0yjlb7X9G9Z9F55N0Q+1z+WfgAhwYdzQ== + dependencies: + args "5.0.1" + basic-auth-parser "0.0.2" + debug "^4.1.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -5467,16 +7843,48 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + +q@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@^6.11.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + quick-lru@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" @@ -5489,7 +7897,7 @@ randombytes@^2.0.1: dependencies: safe-buffer "^5.1.0" -rc@^1.0.1, rc@^1.1.6: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -5504,31 +7912,12 @@ react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -readable-stream@^2.2.2: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -5541,7 +7930,7 @@ readable-stream@^2.2.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -5550,6 +7939,25 @@ readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== + dependencies: + minimatch "^5.1.0" + +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== + dependencies: + esprima "~4.0.0" + +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + regenerate-unicode-properties@^10.1.0: version "10.1.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" @@ -5583,9 +7991,9 @@ regex-not@^1.0.0, regex-not@^1.0.2: safe-regex "^1.1.0" regexp.prototype.flags@^1.2.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" @@ -5625,11 +8033,6 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - remove-trailing-slash@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" @@ -5660,10 +8063,19 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requirejs-config-file@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-3.1.2.tgz#de8c0b3eebdf243511c994a8a24b006f8b825997" + integrity sha512-sdLWywcDuNz7EIOhenSbRfT4YF84nItDv90coN2htbokjmU2QeyQuSBZILQUKNksepl8UPVU+hgYySFaDxbJPQ== + dependencies: + esprima "^4.0.0" + make-dir "^2.1.0" + stringify-object "^3.2.1" + +requirejs@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9" + integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg== requires-port@^1.0.0: version "1.0.0" @@ -5682,6 +8094,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-dependency-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz#11700e340717b865d216c66cabeb4a2a3c696736" + integrity sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w== + resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" @@ -5693,9 +8110,9 @@ resolve-url@^0.2.1: integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -5716,11 +8133,24 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rfdc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" @@ -5733,6 +8163,13 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -5741,10 +8178,12 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" @@ -5763,32 +8202,27 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== +sass-lookup@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sass-lookup/-/sass-lookup-3.0.0.tgz#3b395fa40569738ce857bc258e04df2617c48cac" + integrity sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg== dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" + commander "^2.16.0" -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== + +sax@>=0.6.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== semver-diff@^2.0.0: version "2.1.0" @@ -5797,10 +8231,10 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== semver@7.5.2: version "7.5.2" @@ -5809,32 +8243,37 @@ semver@7.5.2: dependencies: lru-cache "^6.0.0" +semver@^5.0.3, semver@^5.1.0, semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.7, semver@^7.5.3: +semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" +servie@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/servie/-/servie-4.3.3.tgz#4a9ffed6842cd0523003ad0ae9c0c8079f37718f" + integrity sha512-b0IrY3b1gVMsWvJppCf19g1p3JSnS0hQi6xu4Hi40CIhf0Lx8pQHcvBL+xunShpmOiQzg1NOia812NAWdSaShw== + dependencies: + "@servie/events" "^1.0.0" + byte-length "^1.0.2" + ts-expect "^1.1.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -5845,7 +8284,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -sha.js@^2.4.0, sha.js@^2.4.8: +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -5877,12 +8316,16 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -5902,6 +8345,20 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -5956,7 +8413,7 @@ socket.io-client@^2.1.0: socket.io-parser "~3.3.0" to-array "0.1.4" -socket.io-client@^4.5.3: +"socket.io-client@^3 || ^4", socket.io-client@^4.5.1, socket.io-client@^4.5.3: version "4.7.2" resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.2.tgz#f2f13f68058bd4e40f94f2a1541f275157ff2c08" integrity sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w== @@ -5966,6 +8423,14 @@ socket.io-client@^4.5.3: engine.io-client "~6.5.2" socket.io-parser "~4.2.4" +socket.io-msgpack-parser@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/socket.io-msgpack-parser/-/socket.io-msgpack-parser-3.0.2.tgz#34c4d69acd0fa2a0eede98c14e29fa9f6a5b880a" + integrity sha512-1e76bJ1PCKi9H+JiYk+S29PBJvknHjQWM7Mtj0hjF2KxDA6b6rQxv3rTsnwBoz/haZOhlCDIMQvPATbqYeuMxg== + dependencies: + component-emitter "~1.3.0" + notepack.io "~2.2.0" + socket.io-parser@~3.3.0: version "3.3.3" resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.3.tgz#3a8b84823eba87f3f7624e64a8aaab6d6318a72f" @@ -6001,6 +8466,23 @@ socketio-wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/socketio-wildcard/-/socketio-wildcard-2.0.0.tgz#2466e832276b19163563bee772388747f912475b" integrity sha512-Bf3ioZq15Z2yhFLDasRvbYitg82rwm+5AuER5kQvEQHhNFf4R4K5o/h57nEpN7A59T9FyRtTj34HZfMWAruw/A== +socks-proxy-agent@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" + integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -6012,10 +8494,17 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.3.3.tgz#34900977d5ba3f07c7757ee72e73bb1a9b53754f" + integrity sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg== + dependencies: + source-map "0.1.32" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -6025,6 +8514,13 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== +source-map@0.1.32: + version "0.1.32" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" + integrity sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ== + dependencies: + amdefine ">=0.0.4" + source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -6062,9 +8558,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.15" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz#142460aabaca062bc7cd4cc87b7d50725ed6a4ba" - integrity sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ== + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -6078,6 +8574,19 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +sqlstring@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" + integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== + +sqs-consumer@5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/sqs-consumer/-/sqs-consumer-5.8.0.tgz#eb2796bf17e4f703dd93e534bf949f15e7b1fef9" + integrity sha512-pJReMEtDM9/xzQTffb7dxMD5MKagBfOW65m+ITsbpNk0oZmJ38tTC4LPmj0/7ZcKSOqi2LrpA1b0qGYOwxlHJg== + dependencies: + aws-sdk "^2.1271.0" + debug "^4.3.4" + stack-utils@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" @@ -6085,7 +8594,7 @@ stack-utils@^1.0.1: dependencies: escape-string-regexp "^2.0.0" -stack-utils@^2.0.2: +stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== @@ -6169,7 +8678,7 @@ string-width@^2.0.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6192,6 +8701,15 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-object@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -6235,11 +8753,45 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +stylus-lookup@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-3.0.2.tgz#c9eca3ff799691020f30b382260a67355fefdddd" + integrity sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg== + dependencies: + commander "^2.8.1" + debug "^4.1.0" + +superagent@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.1.2.tgz#03cb7da3ec8b32472c9d20f6c2a57c7f3765f30b" + integrity sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.4" + debug "^4.3.4" + fast-safe-stringify "^2.1.1" + form-data "^4.0.0" + formidable "^2.1.2" + methods "^1.1.2" + mime "2.6.0" + qs "^6.11.0" + semver "^7.3.8" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -6259,7 +8811,14 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: +supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== @@ -6272,10 +8831,36 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + 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" + +tdigest@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.2.tgz#96c64bac4ff10746b910b0e23b515794e12faced" + integrity sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA== + dependencies: + bintrees "1.0.2" + +temp@^0.9.4: + version "0.9.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" + integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== + dependencies: + mkdirp "^0.5.1" + rimraf "~2.6.2" term-size@^1.2.0: version "1.2.0" @@ -6284,14 +8869,6 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -6301,10 +8878,35 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thrift@^0.14.1: + version "0.14.2" + resolved "https://registry.yarnpkg.com/thrift/-/thrift-0.14.2.tgz#723c38a27da2d235ee744b5850ea61d29f3f988e" + integrity sha512-bW8EaE6iw3hSt4HB2HpBdHW86Xpb9IUJfqufx4NwEu7OGuIpS0ISj+Yy1Z1Wvhfno6SPNhKRJ1qFXea84HcrOQ== + dependencies: + browser-or-node "^1.2.1" + isomorphic-ws "^4.0.1" + node-int64 "^0.4.0" + q "^1.5.0" + ws "^5.2.2" + +throwback@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throwback/-/throwback-4.1.0.tgz#421aac7ba9eff473105385ac4a2b0130d4b0a59c" + integrity sha512-dLFe8bU8SeH0xeqeKL7BNo8XoPC/o91nz9/ooeplZPiso+DZukhoyZcSz9TFnUNScm+cA9qjU1m1853M6sPOng== timed-out@^4.0.0: version "4.0.1" @@ -6318,6 +8920,20 @@ tmp@0.0.28: dependencies: os-tmpdir "~1.0.1" +tmp@0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -6365,7 +8981,7 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@^2.0.0, tough-cookie@^2.5.0: +tough-cookie@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -6373,7 +8989,7 @@ tough-cookie@^2.0.0, tough-cookie@^2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^4.0.0: +tough-cookie@^4.0.0, tough-cookie@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== @@ -6383,18 +8999,55 @@ tough-cookie@^4.0.0: universalify "^0.2.0" url-parse "^1.5.3" -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" +traverse-chain@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" + integrity sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg== + +traverse@^0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" + integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== try-require@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/try-require/-/try-require-1.2.1.tgz#34489a2cac0c09c1cc10ed91ba011594d4333be2" integrity sha512-aMzrGUIA/R2LwUgvsOusx+GTy8ERyNjpBzbWgS1Qx4oTFlXCMxY3PyyXbPE1pvrvK/CXpO+BBREEqrTkNroC+A== +ts-expect@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-expect/-/ts-expect-1.3.0.tgz#3f8d3966e0e22b5e2bb88337eb99db6816a4c1cf" + integrity sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ== + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@^1.11.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.1, tslib@^2.3.1, tslib@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tweetnacl@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" @@ -6407,7 +9060,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -6417,33 +9070,57 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== +typeorm-aurora-data-api-driver@^2.4.2: + version "2.4.4" + resolved "https://registry.yarnpkg.com/typeorm-aurora-data-api-driver/-/typeorm-aurora-data-api-driver-2.4.4.tgz#05004c95eeaf6f44018646efc3c6cb58a510b8e3" + integrity sha512-EqrdoXr0FbUrAMmkNQQuPwlhUGM7SJnpwUlWTWNlK2mOhOUyM+33fhm1f1hz3nnJJV8fTxzS3kTDq6pkVASLAw== dependencies: - is-typedarray "^1.0.0" + data-api-client "^1.3.0" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== +typeorm@^0.3.6: + version "0.3.17" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.17.tgz#a73c121a52e4fbe419b596b244777be4e4b57949" + integrity sha512-UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig== + dependencies: + "@sqltools/formatter" "^1.2.5" + app-root-path "^3.1.0" + buffer "^6.0.3" + chalk "^4.1.2" + cli-highlight "^2.1.11" + date-fns "^2.29.3" + debug "^4.3.4" + dotenv "^16.0.3" + glob "^8.1.0" + mkdirp "^2.1.3" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.5.0" + uuid "^9.0.0" + yargs "^17.6.2" + +typescript-eslint-parser@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-18.0.0.tgz#3e5055a44980d69e4154350fc5d8b1ab4e2332a8" + integrity sha512-Pn/A/Cw9ysiXSX5U1xjBmPQlxtWGV2o7jDNiH/u7KgBO2yC/y37wNFl2ogSrGZBQFuglLzGq0Xl0Bt31Jv44oA== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + +typescript@^3.0.3: + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== underscore@1.12.1: version "1.12.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -6477,6 +9154,11 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== + unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -6494,6 +9176,19 @@ universalify@^0.2.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unix-dgram@2.0.x: + version "2.0.6" + resolved "https://registry.yarnpkg.com/unix-dgram/-/unix-dgram-2.0.6.tgz#6d567b0eb6d7a9504e561532b598a46e34c5968b" + integrity sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg== + dependencies: + bindings "^1.5.0" + nan "^2.16.0" + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -6543,6 +9238,11 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== +url-join@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" + integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -6558,6 +9258,14 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== + dependencies: + punycode "1.3.2" + querystring "0.2.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -6568,32 +9276,55 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +util@^0.12.4: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + 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" + +uuid@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" + integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== + uuid@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" integrity sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg== -uuid@^8.3.0, uuid@^8.3.2: +uuid@^3.1.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.0.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" validator@13.7.0: version "13.7.0" @@ -6605,63 +9336,44 @@ vary@^1: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== +walk-sync@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.4.tgz#cf78486cc567d3a96b5b2237c6108017a5ffb9a4" + integrity sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig== dependencies: - xml-name-validator "^3.0.0" + ensure-posix-path "^1.0.0" + matcher-collection "^1.0.0" -walker@^1.0.7, walker@~1.0.5: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" + defaults "^1.0.3" which-module@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== +which-typed-array@^1.1.11, which-typed-array@^1.1.2: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -6669,7 +9381,7 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -6683,11 +9395,23 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -6705,6 +9429,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -6719,29 +9452,27 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" + signal-exit "^3.0.7" ws@8.11.0, ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -ws@^5.1.1: +ws@^5.1.1, ws@^5.2.2: version "5.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== dependencies: async-limiter "~1.0.0" -ws@^7.4.6: +ws@^7.5.7: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== @@ -6756,15 +9487,18 @@ xdg-basedir@^3.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" integrity sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml2js@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xmlhttprequest-ssl@~1.6.2: version "1.6.3" @@ -6776,11 +9510,21 @@ xmlhttprequest-ssl@~2.0.0: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: +xtend@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +"y18n@^3.2.1 || ^4.0.0": version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -6796,6 +9540,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml-js@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/yaml-js/-/yaml-js-0.2.3.tgz#f4cf6c1b3c784f59f55547d7dfcdd06418303291" + integrity sha512-6xUQtVKl1qcd0EXtTEzUDVJy9Ji1fYa47LtkDtYKlIjhibPE9knNPmoRyf6SGREFHlOAUyDe9OdYqRP4DuSi5Q== + yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -6804,13 +9553,15 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^12.0.1: version "12.0.5" @@ -6830,31 +9581,59 @@ yargs@^12.0.1: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== +yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + 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" yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" integrity sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg== +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + zeromq@6.0.0-beta.6: version "6.0.0-beta.6" resolved "https://registry.yarnpkg.com/zeromq/-/zeromq-6.0.0-beta.6.tgz#2b8934cafce735ea9007fd3074ec8aca9bf11204" integrity sha512-wLf6M7pBHijl+BRltUL2VoDpgbQcOZetiX8UzycHL8CcYFxYnRrpoG5fi3UX3+Umavz1lk4/dGaQez8qiDgr/Q== dependencies: node-gyp-build "^4.1.0" + +zip-stream@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.1.tgz#1337fe974dbaffd2fa9a1ba09662a66932bd7135" + integrity sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ== + dependencies: + archiver-utils "^3.0.4" + compress-commons "^4.1.2" + readable-stream "^3.6.0" diff --git a/yarn.lock b/yarn.lock index 9ebd3cd1d..9793d9b19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,58 +22,58 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" + integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.6" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" @@ -104,10 +104,10 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -134,43 +134,43 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" + integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -207,6 +207,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -257,9 +264,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -272,28 +279,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" + integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -310,9 +317,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.6.1": - version "4.9.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.0.tgz#7ccb5f58703fa61ffdcbf39e2c604a109e781162" - integrity sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ== + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== "@eslint/eslintrc@^0.4.0": version "0.4.3" @@ -329,10 +336,10 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -344,17 +351,17 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.50.0.tgz#9e93b850f0f3fa35f5fa59adfd03adae8488e484" - integrity sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ== +"@eslint/js@8.55.0": + version "8.55.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6" + integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA== -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" @@ -363,10 +370,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -384,173 +391,196 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^16.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": @@ -577,10 +607,10 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -606,29 +636,29 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@sinonjs/commons" "^3.0.0" -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -637,57 +667,57 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" -"@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.9": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -695,34 +725,31 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/node@*": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== - -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" "@types/semver@^7.3.12": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" - integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== -"@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" @@ -890,45 +917,25 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" +acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" @@ -1014,7 +1021,7 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-includes@^3.1.1, array-includes@^3.1.6: +array-includes@^3.1.1, array-includes@^3.1.7: version "3.1.7" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== @@ -1030,7 +1037,7 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.2: +array.prototype.findlastindex@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== @@ -1041,7 +1048,7 @@ array.prototype.findlastindex@^1.2.2: es-shim-unscopables "^1.0.0" get-intrinsic "^1.2.1" -array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1: +array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -1051,7 +1058,7 @@ array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1: +array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -1079,26 +1086,20 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -1114,14 +1115,14 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: @@ -1142,12 +1143,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^27.5.1" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -1170,19 +1171,14 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bser@2.1.1: @@ -1197,13 +1193,14 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1220,10 +1217,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001540" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" - integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== chalk@^2.4.2: version "2.4.2" @@ -1248,22 +1245,22 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" co@^4.6.0: @@ -1300,13 +1297,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1322,10 +1312,23 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg== -convert-source-map@^1.4.0, convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" convert-source-map@^2.0.0: version "2.0.0" @@ -1341,39 +1344,6 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -1388,15 +1358,17 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-is@^0.1.3: version "0.1.4" @@ -1408,16 +1380,16 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -1426,20 +1398,15 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== dir-glob@^3.0.1: version "3.0.1" @@ -1470,22 +1437,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.601: + version "1.4.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz#e17b22203f4aa2e1ed77759c720546d95a51186f" + integrity sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -1508,25 +1468,25 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -1536,7 +1496,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -1550,23 +1510,23 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: - has "^1.0.3" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -1597,17 +1557,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - eslint-config-airbnb-base@14.2.1: version "14.2.1" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" @@ -1635,7 +1584,12 @@ eslint-config-prettier@8.1.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz#4ef1eaf97afe5176e6a75ddfb57c335121abc5a6" integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== -eslint-import-resolver-node@^0.3.4, eslint-import-resolver-node@^0.3.7: +eslint-config-prettier@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-import-resolver-node@^0.3.4, eslint-import-resolver-node@^0.3.9: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== @@ -1671,25 +1625,25 @@ eslint-plugin-import@2.22.1: tsconfig-paths "^3.9.0" eslint-plugin-import@^2.26.0: - version "2.28.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== - dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" + eslint-import-resolver-node "^0.3.9" eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" semver "^6.3.1" tsconfig-paths "^3.14.2" @@ -1804,17 +1758,18 @@ eslint@7.22.0: v8-compile-cache "^2.0.3" eslint@^8.46.0: - version "8.50.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.50.0.tgz#2ae6015fee0240fcd3f83e1e25df0287f487d6b2" - integrity sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg== + version "8.55.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.55.0.tgz#078cb7b847d66f2c254ea1794fa395bf8e7e03f8" + integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.50.0" - "@humanwhocodes/config-array" "^0.11.11" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.55.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -1864,7 +1819,7 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -1918,15 +1873,16 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -1934,9 +1890,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -1944,7 +1900,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -2006,15 +1962,15 @@ find-up@^5.0.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.2.7" + flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.2.7: +flatted@^3.2.9: version "3.2.9" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== @@ -2026,15 +1982,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2045,10 +1992,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -2080,15 +2027,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -2122,7 +2069,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2140,9 +2087,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0, globals@^13.6.0, globals@^13.9.0: - version "13.22.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.22.0.tgz#0c9fcb9c48a2494fbb5edbfee644285543eba9d8" - integrity sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -2198,11 +2145,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -2222,67 +2169,41 @@ has-tostringtag@^1.0.0: has-symbols "^1.0.2" has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -2319,12 +2240,12 @@ inherits@2: integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: @@ -2361,12 +2282,12 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== +is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -2419,11 +2340,6 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -2465,11 +2381,6 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: dependencies: which-typed-array "^1.1.11" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -2493,11 +2404,11 @@ isexe@^2.0.0: integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -2508,6 +2419,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -2534,410 +2456,363 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/types" "^27.5.1" execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.6.3" + "@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 "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== - dependencies: - "@babel/core" "^7.7.2" + "@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.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.3.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -2959,39 +2834,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3035,9 +2877,9 @@ json5@^2.2.3: integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -3106,7 +2948,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3157,18 +2999,6 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -3211,10 +3041,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-package-data@^2.3.2: version "2.5.0" @@ -3238,15 +3068,10 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -3254,12 +3079,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.2, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -3272,7 +3097,7 @@ object.entries@^1.1.2: define-properties "^1.2.0" es-abstract "^1.22.1" -object.fromentries@^2.0.6: +object.fromentries@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== @@ -3281,7 +3106,7 @@ object.fromentries@^2.0.6: define-properties "^1.2.0" es-abstract "^1.22.1" -object.groupby@^1.0.0: +object.groupby@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== @@ -3291,7 +3116,7 @@ object.groupby@^1.0.0: es-abstract "^1.22.1" get-intrinsic "^1.2.1" -object.values@^1.1.1, object.values@^1.1.6: +object.values@^1.1.1, object.values@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== @@ -3340,7 +3165,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -3402,11 +3227,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -3476,14 +3296,19 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +prettier@2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" + react-is "^18.0.0" progress@^2.0.0: version "2.0.3" @@ -3498,20 +3323,15 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== queue-microtask@^1.2.2: version "1.2.3" @@ -3523,10 +3343,10 @@ rambda@^7.4.0: resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.5.0.tgz#1865044c59bc0b16f63026c6e5a97e4b1bbe98fe" integrity sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA== -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== read-pkg-up@^2.0.0: version "2.0.0" @@ -3569,11 +3389,6 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -3591,15 +3406,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.10.0, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.4: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -3610,7 +3425,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -3643,18 +3458,6 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - "semver@2 || 3 || 4 || 5": version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" @@ -3665,13 +3468,23 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -3702,7 +3515,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -3726,24 +3539,19 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" @@ -3766,9 +3574,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.15" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz#142460aabaca062bc7cd4cc87b7d50725ed6a4ba" - integrity sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ== + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== sprintf-js@~1.0.2: version "1.0.3" @@ -3860,7 +3668,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -3874,24 +3682,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - table@^6.0.4: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" @@ -3903,14 +3698,6 @@ table@^6.0.4: string-width "^4.2.3" strip-ansi "^6.0.1" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -3925,11 +3712,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -3947,23 +3729,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tsconfig-paths@^3.14.2, tsconfig-paths@^3.9.0: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" @@ -4047,13 +3812,6 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -4064,10 +3822,10 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== update-browserslist-db@^1.0.13: version "1.0.13" @@ -4084,27 +3842,19 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - v8-compile-cache@^2.0.3: version "2.4.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" validate-npm-package-license@^3.0.1: version "3.0.4" @@ -4114,58 +3864,13 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -4177,13 +3882,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -4209,30 +3914,13 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + signal-exit "^3.0.7" y18n@^5.0.5: version "5.0.8" @@ -4249,23 +3937,23 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" yocto-queue@^0.1.0: version "0.1.0"